callbacks_attachable 2.0.0 → 2.1.0

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: 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: