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 +4 -4
- data/lib/keys.rb +4 -16
- data/lib/models/key.rb +14 -3
- data/lib/observers.rb +16 -7
- data/lib/version.rb +1 -1
- metadata +2 -16
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: e2d0c58f136cc23164aa0cf64ded4ff642c86d8f82842fedaf459a0205024b17
|
|
4
|
+
data.tar.gz: 4ab7392ec00ad1fcb13ad891051c807c40c496037bcd6e730c9692f9c6acfdbb
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
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]
|
|
9
|
+
keys[key] ||= Key.new(key:)
|
|
22
10
|
end
|
|
23
11
|
|
|
24
|
-
def
|
|
25
|
-
keys
|
|
26
|
-
keys
|
|
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
|
|
45
|
+
Keys[key].trigger(action:, event:)
|
|
34
46
|
end
|
|
35
47
|
|
|
36
48
|
def take(key: self, action: nil, event: nil)
|
|
37
|
-
Keys
|
|
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
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.
|
|
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
|