observers 0.6.0 → 0.7.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: c6d833421a632a5d73e0b3bcd73d227881b67cfa5384bb386632b04607e3745d
4
- data.tar.gz: 458dbadf1111fa9cdbeef5d65cce5bcd8b6da3ea355c4178ced79e0c48824f50
3
+ metadata.gz: e2d0c58f136cc23164aa0cf64ded4ff642c86d8f82842fedaf459a0205024b17
4
+ data.tar.gz: 4ab7392ec00ad1fcb13ad891051c807c40c496037bcd6e730c9692f9c6acfdbb
5
5
  SHA512:
6
- metadata.gz: 5e1b8ad7ac1007633742d060524135d9013972dd973676a6f89a4c831668f9a590f0106397c315e727758b6e8e30ce344529750fd33d84f3305f7bbb4c805556
7
- data.tar.gz: ec92959757150e34c161acd7152bdd4e82501a4dc3f0e4b0ffd79cd321fc196c81ce3d148040bff9121ec651ed351d215f636ac2e3042768032dfe225fa9c241
6
+ metadata.gz: fb4a46da4a46c8036f5f8acdebff74817138eb3566db27e929054d4b6d4670715324cb31cead6371bcd45b6f1ea11b927aadb8508dc5707bd417a8c6d7631e2b
7
+ data.tar.gz: e30650c3284a90f0a94c6fbf80ab0aa549e8676b2f93531d4d99da16944f4e0fa70922a220c224b41ccf8e839dfa01b2162a08c936a56c12350e1b6445a9c232
data/lib/keys.rb CHANGED
@@ -4,26 +4,14 @@ require_relative 'models/key'
4
4
 
5
5
  module Observers
6
6
  class Keys
7
- class MissingKeyError < StandardError; end
8
-
9
7
  class << self
10
- def keys
11
- @keys ||= {}
12
- @keys
13
- end
14
-
15
- def fetch(key)
16
- # TODO: Log instead per configuration, much better to fail silently sometimes!
17
- keys[key] || raise(MissingKeyError, "Key key '#{key}' not found")
18
- end
19
-
20
8
  def [](key)
21
- keys[key] || upsert(key:)
9
+ keys[key] ||= Key.new(key:)
22
10
  end
23
11
 
24
- def upsert(key:)
25
- keys[key] = Key.new if keys[key].nil?
26
- keys[key]
12
+ def keys
13
+ @keys ||= {}
14
+ @keys
27
15
  end
28
16
 
29
17
  def reset
data/lib/models/key.rb CHANGED
@@ -4,7 +4,8 @@ module Observers
4
4
  class Key
5
5
  attr_reader :observers
6
6
 
7
- def initialize
7
+ def initialize(key:)
8
+ @key = key
8
9
  @observers = []
9
10
  end
10
11
 
@@ -15,7 +16,9 @@ module Observers
15
16
  end
16
17
 
17
18
  # @returns: The result of the last observer with a non-nil value.
18
- def trigger(action: nil, event:)
19
+ def trigger(action: nil, event: nil)
20
+ key_callback
21
+
19
22
  action = event.action if event && action.nil?
20
23
  action = :handle if action.nil?
21
24
 
@@ -31,7 +34,9 @@ module Observers
31
34
  end
32
35
 
33
36
  # @returns: The result of the first observer with a non-nil value.
34
- def take(action: nil, event:)
37
+ def take(action: nil, event: nil)
38
+ key_callback
39
+
35
40
  action = event.action if event && action.nil?
36
41
  action = :handle if action.nil?
37
42
 
@@ -43,5 +48,11 @@ module Observers
43
48
 
44
49
  nil # This is a bad day for the take method, one of the worst.
45
50
  end
51
+
52
+ private
53
+
54
+ def key_callback
55
+ Observers.config.key_callback.call(@key) if Observers.config.key_callback && @observers.empty?
56
+ end
46
57
  end
47
58
  end
data/lib/observers.rb CHANGED
@@ -4,13 +4,26 @@ require_relative 'keys'
4
4
  require_relative 'models/observer'
5
5
 
6
6
  module Observers
7
+ Config = Struct.new(:key_callback)
8
+
7
9
  class << self
10
+ def [](key)
11
+ Keys[key].observers
12
+ end
13
+
8
14
  def included(klass)
9
15
  klass.extend Observers
10
16
  end
17
+
18
+ def config
19
+ @config ||= Config.new(key_callback: nil)
20
+ end
21
+
22
+ def configure
23
+ yield(config)
24
+ end
11
25
  end
12
26
 
13
- # Add an observer on the key side.
14
27
  def observers(key = self)
15
28
  Struct.new(:key) do
16
29
  def push(object, action: nil)
@@ -24,21 +37,17 @@ module Observers
24
37
  end.new(key)
25
38
  end
26
39
 
27
- # Add an observer on the observer side.
28
40
  def observe(key, action: nil)
29
41
  Keys[key].observe(object: self, action:)
30
42
  end
31
43
 
32
44
  def trigger(key: self, action: nil, event: nil)
33
- Keys.fetch(key).trigger(action:, event:)
45
+ Keys[key].trigger(action:, event:)
34
46
  end
35
47
 
36
48
  def take(key: self, action: nil, event: nil)
37
- Keys.fetch(key).take(action:, event:)
49
+ Keys[key].take(action:, event:)
38
50
  end
39
51
 
40
52
  # TODO: Provide a "pipe/port/take" method that uses ractors to be concurrent... if supplied with immutable Data?
41
53
  end
42
-
43
- # For quick debugging, not official API.
44
- OKK = Observers::Keys.keys unless defined?(OKK)
data/lib/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Observers
4
- VERSION = '0.6.0'
4
+ VERSION = '0.7.0'
5
5
  end
metadata CHANGED
@@ -1,28 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: observers
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.0
4
+ version: 0.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - maedi
8
8
  bindir: exe
9
9
  cert_chain: []
10
10
  date: 1980-01-02 00:00:00.000000000 Z
11
- dependencies:
12
- - !ruby/object:Gem::Dependency
13
- name: low_dependency
14
- requirement: !ruby/object:Gem::Requirement
15
- requirements:
16
- - - ">="
17
- - !ruby/object:Gem::Version
18
- version: '0'
19
- type: :runtime
20
- prerelease: false
21
- version_requirements: !ruby/object:Gem::Requirement
22
- requirements:
23
- - - ">="
24
- - !ruby/object:Gem::Version
25
- version: '0'
11
+ dependencies: []
26
12
  description: Observe events for objects of any kind
27
13
  email:
28
14
  - maediprichard@gmail.com