alakazam 0.2 → 0.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 436e1280e0c920d0918fc29f2451c4539e1ac459
4
- data.tar.gz: b7750cfc3ad4054b3acc9b96bfae31d156dc08da
3
+ metadata.gz: 88403d21dadf02d5883da0004dc3431b83869f58
4
+ data.tar.gz: 60521c83237c0be9528f0431c4851b56e68fffb1
5
5
  SHA512:
6
- metadata.gz: d85069fc95a598c8e36b70c59e325a8b55fe4f1284c049a881f298dedfde4ab805541838e82422aeb7b9241298ffeb60df0b616d346cef1e4d853c001b5a8da0
7
- data.tar.gz: 2a47986e6d5b728d5d03c549198ca767bf9bfb0537cf58a0ac831d503edaa0e6486e67674ea9c3c4f7d9497a8d5d58282ee86900e29811c1faf5b2ce2fa3fc53
6
+ metadata.gz: 2aabcfe69b837cfef0ab73fb5b7193691601792ff8b3f4009d8bb1451f4305431947d39662fa2ca0bc0f179c2c70a0952873a2ac9346398d944434823d295228
7
+ data.tar.gz: fa3fc31cb095f077706fe758301edd9ab713cca8281d543e8a24a587d39bc859bbb2033488528c3d09d17c7c4f56cfba700b019e7314d8ba14c21163bdaa3d50
@@ -9,7 +9,18 @@
9
9
  #++
10
10
 
11
11
  module Alakazam
12
- def add_observer(observer, attributes: {}, when_change: true, methods: [] )
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
- if not has_observer? observer
27
- @observers ||= {}
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
- (@observers || {}).delete observer
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
- (@observers || {}).include? observer
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
- (@observers || {}).length
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
- (@observers || {}).each { |observer, options|
71
- if !options[:when_change] || changed?
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 *things
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
@@ -9,5 +9,5 @@
9
9
  #++
10
10
 
11
11
  module Alakazam
12
- VERSION = '0.2'
12
+ VERSION = '0.3'
13
13
  end
@@ -74,7 +74,7 @@ describe Alakazam do
74
74
  end
75
75
 
76
76
  it 'invokes a Proc without explicit notify when notified by observed class' do
77
- shiftry.is_observed_by logger, when_change: false
77
+ shiftry.is_observed_by logger, on_change: false
78
78
 
79
79
  shiftry.lol
80
80
  shiftry.lol
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: alakazam
3
3
  version: !ruby/object:Gem::Version
4
- version: '0.2'
4
+ version: '0.3'
5
5
  platform: ruby
6
6
  authors:
7
7
  - Giovanni Capuano