observers 0.4.0 → 0.5.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
  SHA256:
3
- metadata.gz: 7a683d87de52e3b964c325db4cc4cb732203c594eac263aadaf513a59a0dab76
4
- data.tar.gz: 50b6e45f3357de2e06b5d599c7c2614804af8db850522717f34f6524064c4f53
3
+ metadata.gz: eb285238975fddf6f112154a0c2dba9ce47569011afd28b613c6a9ecce4f6611
4
+ data.tar.gz: cd5998f3e1632de38775a2f840ac4215c2bb872bf9436213d99b0b73574a3dd1
5
5
  SHA512:
6
- metadata.gz: a5e2e9afdb9f313a8bcaddbd8c0b309e01aa52d495458e3cb63efc3182b1c7876b87ccd227bb0fa55fb0866d31514b22fe715a58d276e610e14165d51010188e
7
- data.tar.gz: ab2d9cc3aa952df58c7a7b5bfe9fa2f4f1c6eb1aa74469c8e82145324f0f45c5759126770a30d7a1252a20cccbb5dcef6d8e586eeb9d47fc48ed71c01ef9d3e8
6
+ metadata.gz: 76195d403e724f44bec4bb2b77922efaa608be434ea5462084dd0e88b1d917535f622c66935392bc53cea35b1d05114f024e4ef5498babca6eedca68c1d92517
7
+ data.tar.gz: 5bf9e779194597ea33148459bc92cbef3406070feadfe3d81b94ea95077eca9f697da3b1e7cd8e1f7e648306dc0b28934f68b95fea54031dadaf33092ecfdabc
@@ -13,7 +13,7 @@ module Observers
13
13
  @observers << Observer.new(object:, action:)
14
14
  end
15
15
 
16
- # @returns: The result of the last trigger with a non-nil value.
16
+ # @returns: The result of the last observer with a non-nil value.
17
17
  def trigger(action:, event:)
18
18
  action = event.action if event && action.nil?
19
19
  action = :handle if action.nil?
@@ -27,5 +27,18 @@ module Observers
27
27
 
28
28
  last_result
29
29
  end
30
+
31
+ # @returns: The result of the first observer with a non-nil value.
32
+ def take(action:, event:)
33
+ action = event.action if event && action.nil?
34
+ action = :handle if action.nil?
35
+
36
+ @observers.each do |observer|
37
+ result = observer.trigger(action:, event:)
38
+ return result unless result.nil?
39
+ end
40
+
41
+ nil # This is a bad day for the take method, one of the worst.
42
+ end
30
43
  end
31
44
  end
data/lib/observers.rb CHANGED
@@ -24,11 +24,14 @@ module Observers
24
24
  Observables[key].observe(object: self, action:)
25
25
  end
26
26
 
27
- # Returns the last observer's non-nil return value.
28
27
  def trigger(key = self, action: nil, event: nil)
29
28
  Observables.fetch(key).trigger(action:, event:)
30
29
  end
31
30
 
31
+ def take(key = self, action: nil, event: nil)
32
+ Observables.fetch(key).take(action:, event:)
33
+ end
34
+
32
35
  # TODO: Provide a "pipe/port/take" method that uses ractors to be concurrent... if supplied with immutable Data?
33
36
  end
34
37
 
data/lib/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Observers
4
- VERSION = '0.4.0'
4
+ VERSION = '0.5.0'
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: observers
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - maedi