repo.or.cz
/
kaya.git
/
blob
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
log
|
graphiclog1
|
graphiclog2
|
commit
|
commitdiff
|
tree
|
refs
|
edit
|
fork
history
|
raw
|
HEAD
Use normal binding for SimpleObserver.
[kaya.git]
/
lib
/
observer_utils.rb
blob
269269a045fc591b6d95c4afd6bd0a2b7fb1ac1d
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
def initialize(event, &blk)
46
@event = event
47
@blk = blk
48
end
49
50
def update(data)
51
if data.has_key?(@event)
52
case @blk.arity
53
when 0
54
@blk[]
55
when 1
56
@blk[data[@event]]
57
else
58
@blk[*data[@event]]
59
end
60
end
61
end
62
end
63
64
class Object
65
def metaclass
66
class << self
67
self
68
end
69
end
70
71
def metaclass_eval(&blk)
72
metaclass.instance_eval(&blk)
73
end
74
end