alakazam 0.2 → 0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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