Event Handling

I

iamscottwalter

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.
 
A

Austin Ziegler

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
 
J

James Edward Gray II


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
 
R

Robert Klemme

James said:
Hello and welcome.


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
 
J

Jeff Wood

------=_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.

Hello and welcome.


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--
 
J

Joel VanderWerf

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
 

Ask a Question

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

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,755
Messages
2,569,536
Members
45,020
Latest member
GenesisGai

Latest Threads

Top