callbacks_attachable 2.0.0 → 2.1.0

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: 8b3cbb8d4bd7ce32583ce955de64c50b6c573df8
4
- data.tar.gz: 9f7a8fa43ff82a24fad63277df0a8966fff4bc9e
3
+ metadata.gz: 9b8373eec469ec47043effaea07261ecdd3412ed
4
+ data.tar.gz: 0c5df404017b52496a0649dfc7f615a19ad7ee73
5
5
  SHA512:
6
- metadata.gz: 04afd03c6c374d2cbd40052dafd3c92f9884d8a77303643aec0b91dec3a4655887e27d5d881d5eeb78419765313040cf2e658b6f2e842a33a82a92cf7cc228b6
7
- data.tar.gz: 48e973e7699b8ead7d098afb8589b261cdf481340a757693a9e629ed4a9906fbe1c42df06349318f6d0f47c906319f5bdbbc9581e9925857a5344e38489cf4e4
6
+ metadata.gz: b033254d2951e81ea83199e368035002986d9f79cd6cbd45846d6474d368230dd5ca9bc638a1c13f4adf93da498dbab2e9ac5833295a39089d69bc0e392f7cc7
7
+ data.tar.gz: f4bc19cc785307178bb9e5a6c8374a51ee6047e998e73607a1d37093fc565e22b121cd5c2645ad142d532ae3e209053b749ccb66a646c4988d24ce76b7844e0d
data/mrblib/callback.rb CHANGED
@@ -6,6 +6,7 @@ module CallbacksAttachable
6
6
  @call_condition = opts.fetch(:if, false)
7
7
  @cancel_condition = opts.fetch(:until, false)
8
8
  @callback = callback
9
+ @canceled = false
9
10
  end
10
11
 
11
12
  def call(instance, args)
@@ -19,9 +20,17 @@ module CallbacksAttachable
19
20
  end
20
21
 
21
22
  def cancel
22
- @registry.deregister @event, self
23
- @on_cancel.call if @on_cancel
24
- true
23
+ if @canceled
24
+ raise Error, 'already canceled'
25
+ else
26
+ @registry.deregister @event, self
27
+ @on_cancel.call if @on_cancel
28
+ @canceled = true
29
+ end
30
+ end
31
+
32
+ def canceled?
33
+ @canceled
25
34
  end
26
35
  end
27
36
  end
@@ -1,5 +1,9 @@
1
1
  module CallbacksAttachable
2
2
  module RegistryOwnable
3
+ def extended(object)
4
+ object.singleton_class.extend RegistryOwnable
5
+ end
6
+
3
7
  def on(event, opts = {}, &callback)
4
8
  __callbacks__.register(event, opts, callback)
5
9
  end
@@ -9,32 +13,49 @@ module CallbacksAttachable
9
13
  end
10
14
 
11
15
  def on?(event)
12
- __callbacks__.registered? event
16
+ @__callbacks__ ? (@__callbacks__.registered? event) : false
17
+ end
18
+
19
+ def trigger(event, *args)
20
+ ObjectSpace.each_object(self).each do |inst|
21
+ trigger_for_instance(inst, event, args)
22
+ end
23
+ end
24
+
25
+ def trigger_for_instance(inst, event, args)
26
+ if superclass.respond_to? :trigger_for_instance
27
+ superclass.trigger_for_instance(inst, event, args)
28
+ end
29
+ @__callbacks__ and @__callbacks__.trigger(inst, event, args)
30
+ :triggered
13
31
  end
14
32
 
15
- private def __callbacks__
16
- @__callbacks__ ||= CallbackRegistry.new(self)
33
+ def __callbacks__
34
+ @__callbacks__ ||= CallbackRegistry.new self
17
35
  end
18
36
  end
19
37
 
20
- include RegistryOwnable
38
+ def self.extended(object)
39
+ object.singleton_class.extend RegistryOwnable
40
+ end
21
41
 
22
42
  def self.included(klass)
23
- klass.extend ClassMethods
43
+ klass.extend RegistryOwnable
24
44
  end
25
45
 
26
- module ClassMethods
27
- include RegistryOwnable
46
+ def on(*args, &callback)
47
+ singleton_class.on *args, &callback
48
+ end
28
49
 
29
- def trigger(event, *args)
30
- ObjectSpace.each_object(self).all?{ |inst| inst.trigger(event, *args) }
31
- end
50
+ def once_on(event, opts = {}, &callback)
51
+ on(event, opts.merge(until: proc{ true }), &callback)
52
+ end
53
+
54
+ def on?(event)
55
+ singleton_class.on? event
32
56
  end
33
57
 
34
58
  def trigger(event, *args)
35
- @class_callbacks ||= self.class.__send__ :__callbacks__
36
- @class_callbacks.trigger(self, event, args)
37
- @__callbacks__ and @__callbacks__.trigger(self, event, args)
38
- true
59
+ singleton_class.trigger_for_instance(self, event, args)
39
60
  end
40
61
  end
data/mrblib/error.rb ADDED
@@ -0,0 +1,3 @@
1
+ module CallbacksAttachable
2
+ class Error < StandardError; end
3
+ end
data/mrblib/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module CallbacksAttachable
2
- VERSION = "2.0.0"
2
+ VERSION = "2.1.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: callbacks_attachable
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0
4
+ version: 2.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Christopher Aue
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-02-04 00:00:00.000000000 Z
11
+ date: 2017-03-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -72,6 +72,7 @@ files:
72
72
  - mrblib/callback.rb
73
73
  - mrblib/callback_registry.rb
74
74
  - mrblib/callbacks_attachable.rb
75
+ - mrblib/error.rb
75
76
  - mrblib/version.rb
76
77
  homepage: https://github.com/christopheraue/m-ruby-callbacks_attachable
77
78
  licenses: