Event Handling

Discussion in 'Ruby' started by iamscottwalter@gmail.com, Oct 7, 2005.

  1. Guest

    Hi,

    I am coming from the Java world and was wondering if there ins anything
    in Ruby similar to Java's event processing? For example I have a
    particular Object that can fire off an event to all objects that listen
    for that event. A more real world example would be that I have a
    delete() method that was called and I want to let all interested
    parties know that the delete() method was called.

    In the Java space I would setup an event listener. When the delete()
    method would be called I wouold send an event to all my registered
    listeners.

    I hope I was clear enough.


    Thanks in advance, Scott.
    , Oct 7, 2005
    #1
    1. Advertising

  2. On 10/7/05, <> wrote:
    > I am coming from the Java world and was wondering if there ins anything
    > in Ruby similar to Java's event processing? For example I have a
    > particular Object that can fire off an event to all objects that listen
    > for that event. A more real world example would be that I have a
    > delete() method that was called and I want to let all interested
    > parties know that the delete() method was called.
    >
    > In the Java space I would setup an event listener. When the delete()
    > method would be called I wouold send an event to all my registered
    > listeners.
    >
    > I hope I was clear enough.


    http://phrogz.net/ProgrammingRuby/lib_patterns.html#observer

    -austin
    --
    Austin Ziegler *
    * Alternate:
    Austin Ziegler, Oct 7, 2005
    #2
    1. Advertising

  3. On Oct 7, 2005, at 8:46 AM, wrote:

    > Hi,


    Hello and welcome.

    > I am coming from the Java world and was wondering if there ins
    > anything
    > in Ruby similar to Java's event processing? For example I have a
    > particular Object that can fire off an event to all objects that
    > listen
    > for that event. A more real world example would be that I have a
    > delete() method that was called and I want to let all interested
    > parties know that the delete() method was called.
    >
    > In the Java space I would setup an event listener. When the delete()
    > method would be called I wouold send an event to all my registered
    > listeners.


    I think you are looking for observer, in Ruby's standard library:

    http://www.ruby-doc.org/stdlib/libdoc/observer/rdoc/index.html

    Hope that helps.

    James Edward Gray II
    James Edward Gray II, Oct 7, 2005
    #3
  4. James Edward Gray II wrote:
    > On Oct 7, 2005, at 8:46 AM, wrote:
    >
    >> Hi,

    >
    > Hello and welcome.
    >
    >> I am coming from the Java world and was wondering if there ins
    >> anything
    >> in Ruby similar to Java's event processing? For example I have a
    >> particular Object that can fire off an event to all objects that
    >> listen
    >> for that event. A more real world example would be that I have a
    >> delete() method that was called and I want to let all interested
    >> parties know that the delete() method was called.
    >>
    >> In the Java space I would setup an event listener. When the delete()
    >> method would be called I wouold send an event to all my registered
    >> listeners.

    >
    > I think you are looking for observer, in Ruby's standard library:
    >
    > http://www.ruby-doc.org/stdlib/libdoc/observer/rdoc/index.html


    This started in interesting thought with me: a block would come in handy
    as listener as well. In fact "adapter" might be a better name and what we
    get then seems to be quite similar to the C# approach.

    class SomeObserver
    def register(observable)
    observable.add_observer do |*a|
    puts "changed" if DEBUG
    @model_change = true
    # ...
    end
    end
    end

    Disadvantages I see so far

    - removal of adapters is impossible

    - a lot unnecessary adapter objects might be created

    Alternative approach:

    class SomeObserver
    def register(observable)
    observable.add_observer adapter(observable) do |*a|
    puts "changed" if DEBUG
    @model_change = true
    # ...
    end
    end

    def adapter(obj,&b)
    @adapters[obj] ||= ( b; class <<b; alias :update :call; end; b )
    end
    end

    Sorry, just loud thinking...

    Kind regards

    robert
    Robert Klemme, Oct 7, 2005
    #4
  5. Jeff Wood Guest

    ------=_Part_13099_4540671.1128698844549
    Content-Type: text/plain; charset=ISO-8859-1
    Content-Transfer-Encoding: quoted-printable
    Content-Disposition: inline

    You could always make your adapter collection a hash instead of an array,
    then you would have a name to be able to replace/delete by.
    j.

    On 10/7/05, Robert Klemme <> wrote:
    >
    > James Edward Gray II wrote:
    > > On Oct 7, 2005, at 8:46 AM, wrote:
    > >
    > >> Hi,

    > >
    > > Hello and welcome.
    > >
    > >> I am coming from the Java world and was wondering if there ins
    > >> anything
    > >> in Ruby similar to Java's event processing? For example I have a
    > >> particular Object that can fire off an event to all objects that
    > >> listen
    > >> for that event. A more real world example would be that I have a
    > >> delete() method that was called and I want to let all interested
    > >> parties know that the delete() method was called.
    > >>
    > >> In the Java space I would setup an event listener. When the delete()
    > >> method would be called I wouold send an event to all my registered
    > >> listeners.

    > >
    > > I think you are looking for observer, in Ruby's standard library:
    > >
    > > http://www.ruby-doc.org/stdlib/libdoc/observer/rdoc/index.html

    >
    > This started in interesting thought with me: a block would come in handy
    > as listener as well. In fact "adapter" might be a better name and what we
    > get then seems to be quite similar to the C# approach.
    >
    > class SomeObserver
    > def register(observable)
    > observable.add_observer do |*a|
    > puts "changed" if DEBUG
    > @model_change =3D true
    > # ...
    > end
    > end
    > end
    >
    > Disadvantages I see so far
    >
    > - removal of adapters is impossible
    >
    > - a lot unnecessary adapter objects might be created
    >
    > Alternative approach:
    >
    > class SomeObserver
    > def register(observable)
    > observable.add_observer adapter(observable) do |*a|
    > puts "changed" if DEBUG
    > @model_change =3D true
    > # ...
    > end
    > end
    >
    > def adapter(obj,&b)
    > @adapters[obj] ||=3D ( b; class <<b; alias :update :call; end; b )
    > end
    > end
    >
    > Sorry, just loud thinking...
    >
    > Kind regards
    >
    > robert
    >
    >
    >



    --
    "http://ruby-lang.org -- do you ruby?"

    Jeff Wood

    ------=_Part_13099_4540671.1128698844549--
    Jeff Wood, Oct 7, 2005
    #5
  6. Phrogz Guest

    Phrogz, Oct 7, 2005
    #6
  7. wrote:
    > Hi,
    >
    > I am coming from the Java world and was wondering if there ins anything
    > in Ruby similar to Java's event processing? For example I have a
    > particular Object that can fire off an event to all objects that listen
    > for that event. A more real world example would be that I have a
    > delete() method that was called and I want to let all interested
    > parties know that the delete() method was called.
    >
    > In the Java space I would setup an event listener. When the delete()
    > method would be called I wouold send an event to all my registered
    > listeners.
    >
    > I hope I was clear enough.
    >
    >
    > Thanks in advance, Scott.
    >


    Take look at observable (http://raa.ruby-lang.org/project/observable).
    The main use is declaring obervable attributes that other objects can
    "hook" code into, to be notified of changes in state. But there is also
    a "signal" feature for transient events with multiple observers.

    Here's an example from that project's examples dir:

    require 'observable'

    include Observable
    include Observable::Match

    module OpenFileExample
    class FilePicker
    signal :file_chosen
    def run
    self.file_chosen = "foo"
    end
    end

    class FileOpener
    def initialize file_picker
    file_picker.when_file_chosen do |file|
    puts "FileOpener: opening file #{file}."
    end
    end
    end

    picker = FilePicker.new
    opener = FileOpener.new(picker)
    picker.run
    p picker.file_chosen # signal has passed by now

    # Output:
    # FileOpener: opening file foo.
    # nil
    end

    --
    vjoel : Joel VanderWerf : path berkeley edu : 510 665 3407
    Joel VanderWerf, Oct 9, 2005
    #7
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. sunil

    Pager and Event Handling

    sunil, Jul 18, 2003, in forum: ASP .Net
    Replies:
    2
    Views:
    374
    sunil
    Jul 18, 2003
  2. Makarand

    ASP.NET Event handling.

    Makarand, Jul 24, 2003, in forum: ASP .Net
    Replies:
    0
    Views:
    403
    Makarand
    Jul 24, 2003
  3. Mark Tarver
    Replies:
    22
    Views:
    1,273
    J Kenneth King
    Apr 26, 2009
  4. Peter
    Replies:
    34
    Views:
    1,908
    James Kanze
    Oct 17, 2009
  5. Iñaki Baz Castillo
    Replies:
    1
    Views:
    173
    Iñaki Baz Castillo
    Apr 15, 2008
Loading...

Share This Page