[#20675] RCR: non-bang equivalent to []= — Tobias Reif <tobiasreif@...>

Hi,

49 messages 2001/09/01
[#20774] Re: RCR: non-bang equivalent to []= — Tobias Reif <tobiasreif@...> 2001/09/03

I wrote:

[#20778] Re: RCR: non-bang equivalent to []= — Kevin Smith <kevinbsmith@...> 2001/09/03

--- Tobias Reif <tobiasreif@pinkjuice.com> wrote:

[#20715] oreilly buch von matz - website online — markus jais <info@...>

hi

43 messages 2001/09/02
[#20717] Re: OReilly Ruby book has snail on cover — ptkwt@...1.aracnet.com (Phil Tomson) 2001/09/02

Actually, thanks for posting it here. I was trying to search OReilly's

[#20922] Re: OReilly Ruby book has snail on cover — Paul Brannan <pbrannan@...> 2001/09/05

On Mon, 3 Sep 2001, Phil Tomson wrote:

[#20768] Minor cgi.rb question — "Hal E. Fulton" <hal9000@...>

I don't have much experience with

25 messages 2001/09/03

[#20770] Calling member methods from C++ — jglueck@... (Bernhard Glk)

Some quetsions have been solved for me, but my message system does not

12 messages 2001/09/03

[#20976] destructor — Frank Sonnemans <ruby@...>

Does Ruby have a destructor as in C++?

25 messages 2001/09/07

[#21218] Ruby objects <-> XML: anyone working on this? — senderista@... (Tobin Baker)

Are there any Ruby analogs of these two Python modules (xml_pickle,

13 messages 2001/09/15

[#21296] nested require files need path internally — Bob Gustafson <bobgus@...>

Version: 1.64

29 messages 2001/09/18
[#21298] Re: nested require files need path internally — David Alan Black <dblack@...> 2001/09/18

Hello --

[#21302] Re: nested require files need path internally — Bob Gustafson <bobgus@...> 2001/09/18

On Tue, 18 Sep 2001, David Alan Black wrote:

[#21303] Re: nested require files need path internally — matz@... (Yukihiro Matsumoto) 2001/09/18

Hi,

[#21306] Re: nested require files need path internally — Lars Christensen <larsch@...> 2001/09/18

On Tue, 18 Sep 2001, Yukihiro Matsumoto wrote:

[#21307] Re: nested require files need path internally — matz@... (Yukihiro Matsumoto) 2001/09/18

Hi,

[#21331] Re: nested require files need path internally — Paul Brannan <pbrannan@...> 2001/09/18

> The big difference is C++ search done in compile time, Ruby search

[#21340] Re: nested require files need path internally — matz@... (Yukihiro Matsumoto) 2001/09/18

Hi,

[#21353] Re: nested require files need path internally — Paul Brannan <pbrannan@...> 2001/09/18

On Wed, 19 Sep 2001, Yukihiro Matsumoto wrote:

[#21366] Re: nested require files need path internally — matz@... (Yukihiro Matsumoto) 2001/09/19

Hi,

[#21368] Re: nested require files need path internally — "Julian Fitzell" <julian-ml@...4.com> 2001/09/19

On 19/09/2001 at 10:12 AM matz@ruby-lang.org wrote:

[#21376] Re: nested require files need path internally — matz@... (Yukihiro Matsumoto) 2001/09/19

Hi,

[#21406] Re: nested require files need path internally — Paul Brannan <pbrannan@...> 2001/09/19

On Wed, 19 Sep 2001, Yukihiro Matsumoto wrote:

[#21315] Suggestions for new CGI lib — anders@... (Anders Johannsen)

From the comp.lang.ruby thread "Minor cgi.rb question" (2001-09-03), I

21 messages 2001/09/18

[#21413] Ruby/objects book in style of The Little Lisper — Brian Marick <marick@...>

I fell in love with Lisp in the early 80's. Back then, I read a book called

36 messages 2001/09/19
[#21420] Re: Ruby/objects book in style of The Little Lisper — Christopher Sawtell <csawtell@...> 2001/09/20

On 20 Sep 2001 06:19:44 +0900, Brian Marick wrote:

[#21479] Re: Ruby/objects book in style of The Little Lisper — Kevin Smith <kevinbsmith@...> 2001/09/21

--- Christopher Sawtell <csawtell@paradise.net.nz> wrote:

[#21491] SV: Re: Ruby/objects book in style of The Little Lisper — "Mikkel Damsgaard" <mikkel_damsgaard@...> 2001/09/21

[#21494] Re: SV: Re: Ruby/objects book in style of The Little Lisper — Kevin Smith <kevinbsmith@...> 2001/09/21

--- Mikkel Damsgaard <mikkel_damsgaard@mailme.dk> wrote:

[#21510] Re: SV: Re: Ruby/objects book in style of The Little Lisper — Todd Gillespie <toddg@...> 2001/09/22

On Sat, 22 Sep 2001, Kevin Smith wrote:

[#21514] Re: SV: Re: Ruby/objects book in style of The Little Lisper — Kevin Smith <kevinbsmith@...> 2001/09/22

--- Todd Gillespie <toddg@mail.ma.utexas.edu> wrote:

[#21535] irb — Fabio <fabio.spelta@...>

Hello. :) I'm new here, and I have not found an archive of the previous

15 messages 2001/09/22

[#21616] opening a named pipe? — "Avdi B. Grimm" <avdi@...>

I'm having trouble reading from a named pipe in linux. basicly, I'm

12 messages 2001/09/24

[#21685] manipulating "immutable" objects such as Fixnum from within callbacks & al... — Guillaume Cottenceau <gc@...>

Hello,

15 messages 2001/09/25

[#21798] Ruby internal (guide to the source) — "Benoit Cerrina" <benoit.cerrina@...>

Hi,

22 messages 2001/09/28

[ruby-talk:21814] Pseudo-Become operator for Ruby (was: Transparent Proxies)

From: jason@... (Jason Voegele)
Date: 2001-09-28 19:30:30 UTC
List: ruby-talk #21814
With some help from this newsgroup, I've come up with a scheme for a
"become" like mechanism for Ruby.  It is not a true "become" operator
because it does not allow any arbitrary object to become any arbitrary
thing, but it does allow instances of a proxy class to become any
object you desire.  The idea is that there is a proxy object that
undefines all methods, and then uses the "method_missing" method to
trap messages, and then "becomes" the object which it was fronting
for.  This allows for such things as lazy initialization, and most
importantly for my application (a persistent object store) loading
objects on demand.

Here's an example:

class ProxyTest
    def initialize

        # create a proxy object so that the array object is only
        # created when it is first accessed.

        @lazily_loaded_array = ObjectProxy.new(self,
"@lazily_loaded_array") {
            # This "factory" block simply returns a new array,
            # but it could conceivably do anything it wants
            # to retrieve the object, such as load it from
            # an OO database.
            Array.new
        }
    end

    def test_proxy
        # once we call a method on the proxy object,
        # it should "become" an array
        puts @lazily_loaded_array.type    # -> "Array"
        @lazily_loaded_array.push(10)
        puts @lazily_loaded_array.length  # -> 1
    end
end

ProxyTest.new.test_proxy

Below is the code for the ObjectProxy class.  Please let me know if
you have any suggestions or comments.

Thanks
Jason Voegele

class ObjectProxy
    undef_method :==
    undef_method :===
    undef_method :=~
    undef_method :class
    undef_method :clone
    undef_method :display
    undef_method :dup
    undef_method :eql?
    undef_method :equal?
    undef_method :extend
    undef_method :freeze
    undef_method :frozen?
    undef_method :hash
    undef_method :id
    undef_method :inspect
    undef_method :instance_eval
    undef_method :instance_of?
    undef_method :instance_variables
    undef_method :is_a?
    undef_method :kind_of?
    undef_method :method
    undef_method :method_missing
    undef_method :methods
    undef_method :nil?
    undef_method :private_methods
    undef_method :protected_methods
    undef_method :public_methods
    undef_method :respond_to?
    undef_method :send
    undef_method :singleton_methods
    undef_method :taint
    undef_method :tainted?
    undef_method :to_a
    undef_method :to_s
    undef_method :type
    undef_method :untaint

    # The proxy object takes a block that retrieves
    # or creates the object. The container reference is
    # necessary so that we can break into it and replace
    # its reference to the proxy with a reference to the
    # actual object.
    def initialize(container, variable_name, *args, &factory)
        @container = container
        @name = variable_name
        @factory_args = args
        @factory = factory
    end

    def method_missing(method, *args)
        become = @factory.call
        @container.instance_eval("#@name = become")
        become.send(method, *args)
    end
end

In This Thread

Prev Next