diff options
author | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2005-09-05 08:29:52 +0000 |
---|---|---|
committer | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2005-09-05 08:29:52 +0000 |
commit | 48653d5ef0ed47469d64170d70c8c2a9f21f159e (patch) | |
tree | df86f2bf64022459acef5eea33442fb3d3ebcc27 /lib/observer.rb | |
parent | f5ac36f1a3e484464d13a115bd92fa9904215201 (diff) |
* lib/ostruct.rb: a patch from Florian Gross <[email protected]>
merged to allow recursive inspect (and to_s) for OpenStruct.
[ruby-core:05532]
* lib/observer.rb: a patch from nornagon <[email protected]>
merged to allow arbitrary names for update methods.
[ruby-core:05416]
* eval.c (rb_f_fcall): new method to avoid inefficiency of
obj.instance_eval{send(...)} tricks.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@9081 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'lib/observer.rb')
-rw-r--r-- | lib/observer.rb | 19 |
1 files changed, 10 insertions, 9 deletions
diff --git a/lib/observer.rb b/lib/observer.rb index 64c7d81351..472a154395 100644 --- a/lib/observer.rb +++ b/lib/observer.rb @@ -118,14 +118,15 @@ module Observable # # Add +observer+ as an observer on this object. +observer+ will now receive - # notifications. + # notifications. The second optional argument specifies a method to notify + # updates, of which default value is +update+. # - def add_observer(observer) - @observer_peers = [] unless defined? @observer_peers - unless observer.respond_to? :update - raise NoMethodError, "observer needs to respond to `update'" + def add_observer(observer, func=:update) + @observer_peers = {} unless defined? @observer_peers + unless observer.respond_to? func + raise NoMethodError, "observer does not respond to `#{func.to_s}'" end - @observer_peers.push observer + @observer_peers[observer] = func end # @@ -181,9 +182,9 @@ module Observable def notify_observers(*arg) if defined? @observer_state and @observer_state if defined? @observer_peers - for i in @observer_peers.dup - i.update(*arg) - end + @observer_peers.each { |k, v| + k.send v, *arg + } end @observer_state = false end |