alakazam 0.2 → 0.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/alakazam/alakazam.rb +21 -15
- data/lib/alakazam/version.rb +1 -1
- data/tests/alakazam_spec.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 88403d21dadf02d5883da0004dc3431b83869f58
|
4
|
+
data.tar.gz: 60521c83237c0be9528f0431c4851b56e68fffb1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2aabcfe69b837cfef0ab73fb5b7193691601792ff8b3f4009d8bb1451f4305431947d39662fa2ca0bc0f179c2c70a0952873a2ac9346398d944434823d295228
|
7
|
+
data.tar.gz: fa3fc31cb095f077706fe758301edd9ab713cca8281d543e8a24a587d39bc859bbb2033488528c3d09d17c7c4f56cfba700b019e7314d8ba14c21163bdaa3d50
|
data/lib/alakazam/alakazam.rb
CHANGED
@@ -9,7 +9,18 @@
|
|
9
9
|
#++
|
10
10
|
|
11
11
|
module Alakazam
|
12
|
-
def add_observer(observer,
|
12
|
+
def add_observer(observer, options = {})
|
13
|
+
on_change = if options.include? :on_fire
|
14
|
+
options[:on_fire]
|
15
|
+
elsif options.include? :on_change
|
16
|
+
options[:on_change]
|
17
|
+
else
|
18
|
+
true
|
19
|
+
end
|
20
|
+
|
21
|
+
attributes = options[:attributes] || {}
|
22
|
+
methods = options[:methods ] || []
|
23
|
+
|
13
24
|
attributes = [attributes] unless attributes.is_a? Array
|
14
25
|
methods = [methods ] unless methods.is_a? Array
|
15
26
|
|
@@ -23,30 +34,27 @@ module Alakazam
|
|
23
34
|
end
|
24
35
|
}
|
25
36
|
|
26
|
-
|
27
|
-
|
28
|
-
@observers[observer] = { when_change: when_change, methods: methods }
|
29
|
-
end
|
37
|
+
@observers ||= {}
|
38
|
+
@observers[observer] = { on_change: on_change, methods: methods }
|
30
39
|
end
|
31
40
|
alias_method :is_observed_by, :add_observer
|
32
41
|
alias_method :attach, :add_observer
|
33
42
|
alias_method :observe, :add_observer
|
34
43
|
|
35
|
-
|
36
44
|
def delete_observer(observer)
|
37
|
-
|
45
|
+
@observers.delete(observer) if @observers
|
38
46
|
end
|
39
47
|
alias_method :remove_observer, :delete_observer
|
40
48
|
alias_method :detach, :delete_observer
|
41
49
|
alias_method :disconnect, :delete_observer
|
42
50
|
|
43
51
|
def has_observer?(observer)
|
44
|
-
|
52
|
+
@observers.include?(observer) if @observers
|
45
53
|
end
|
46
54
|
alias_method :is_observed_by?, :has_observer?
|
47
55
|
|
48
56
|
def count_observers
|
49
|
-
|
57
|
+
@observers ? @observers.length : 0
|
50
58
|
end
|
51
59
|
alias_method :how_many_observers?, :count_observers
|
52
60
|
|
@@ -67,29 +75,27 @@ module Alakazam
|
|
67
75
|
alias_method :fired?, :changed?
|
68
76
|
|
69
77
|
def notify_observers(*things)
|
70
|
-
|
71
|
-
if !options[:
|
78
|
+
@observers.each { |observer, options|
|
79
|
+
if !options[:on_change] || changed?
|
72
80
|
if options[:methods].any?
|
73
81
|
options[:methods].each { |method|
|
74
82
|
if observer.respond_to? method
|
75
83
|
observer.send method, *things
|
76
84
|
elsif observer.singleton_class.respond_to? method
|
77
85
|
observer.singleton_class.send method, *things
|
78
|
-
elsif observer.respond_to? :"#{method}="
|
79
|
-
observer.send method, *things
|
80
86
|
end
|
81
87
|
}
|
82
88
|
elsif observer.respond_to? :update
|
83
89
|
observer.update *things
|
84
90
|
elsif observer.is_a? Proc
|
85
|
-
observer.call
|
91
|
+
observer.call *things
|
86
92
|
else
|
87
93
|
options[:methods].each { |method|
|
88
94
|
observer.send(method, *things) if observer.respond_to? method
|
89
95
|
}
|
90
96
|
end
|
91
97
|
end
|
92
|
-
}
|
98
|
+
} if @observers
|
93
99
|
|
94
100
|
@changed = false
|
95
101
|
end
|
data/lib/alakazam/version.rb
CHANGED
data/tests/alakazam_spec.rb
CHANGED