repo.or.cz
/
kaya
/
ydirson.git
/
blob
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
log
|
graphiclog1
|
graphiclog2
|
commit
|
commitdiff
|
tree
|
refs
|
edit
|
fork
history
|
raw
|
HEAD
Pieces are demoted when captured.
[kaya/ydirson.git]
/
lib
/
observer_utils.rb
blob
a7880559e2f0b3548b8ae5805ab04c4a2477207d
1
require 'observer'
2
3
module Observer
4
def update(data)
5
data.each_key do |key|
6
m = begin
7
method("on_#{key}")
8
rescue NameError
9
end
10
11
if m
12
case m.arity
13
when 0
14
m[]
15
when 1
16
m[data[key]]
17
else
18
m[*data[key]]
19
end
20
end
21
end
22
end
23
end
24
25
module Observable
26
def observe(event, &blk)
27
add_observer SimpleObserver.new(event, &blk)
28
end
29
30
def fire(e)
31
changed
32
notify_observers any_to_event(e)
33
end
34
35
def any_to_event(e)
36
if e.is_a? Symbol
37
{ e => nil }
38
else
39
e
40
end
41
end
42
end
43
44
class SimpleObserver
45
include Observer
46
47
def initialize(event, &blk)
48
metaclass_eval do
49
define_method "on_#{event}", &blk
50
end
51
end
52
end
53
54
class Object
55
def metaclass
56
class << self
57
self
58
end
59
end
60
61
def metaclass_eval(&blk)
62
metaclass.instance_eval(&blk)
63
end
64
end