1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00
ruby--ruby/lib/observer.rb
matz 765255b737 * array.c (rb_ary_sort_bang): returns self, even if its length is
less than 2.

* eval.c (POP_VARS): propagate DVAR_DONT_RECYCLE, if
  SCOPE_DONT_RECYCLE of ruby_scope is set.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@1156 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2001-02-02 11:38:20 +00:00

46 lines
1,010 B
Ruby

# Observable Mixin
#
# Observers must respond to update
module Observable
def add_observer(observer)
@observer_peers = [] unless defined? @observer_peers
unless observer.respond_to? :update
raise NameError, "observer needs to respond to `update'"
end
@observer_peers.push observer
end
def delete_observer(observer)
@observer_peers.delete observer if defined? @observer_peers
end
def delete_observers
@observer_peers.clear if defined? @observer_peers
end
def count_observers
if defined? @observer_peers
@observer_peers.size
else
0
end
end
def changed(state=true)
@observer_state = state
end
def changed?
if defined? @observer_state and @observer_state
true
else
false
end
end
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
end
@observer_state = false
end
end
end