observers 0.1.0 → 0.2.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/models/observer.rb +3 -1
- data/lib/observables.rb +9 -16
- data/lib/observers.rb +7 -7
- data/lib/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: b1c16092762a682c96f1cc007988ec2406d3b2dd6ce91c1b793b2fbf4f95d628
|
|
4
|
+
data.tar.gz: 18045745a7cc775e61dd9afc1f46a80074565be6986a37ead5b30d49105a6e77
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 8c3eb3b00120bfcd498345c0f1ef44322212eacaa6856d794fb9e74044b7a26fa4a6502067cec87aaeff241b4835f5f5e0c048a80d59fe61e3dda277b84c03af
|
|
7
|
+
data.tar.gz: 843137754e96d5187b23f36fa72e2aa423cba6b9e0af82a99d3b84ef046bc7c2feb76fd3acfe0b3607ea55a6ef250d23ee0f90a211266bd551d5b2045211156f
|
data/lib/models/observer.rb
CHANGED
|
@@ -4,12 +4,14 @@ module Observers
|
|
|
4
4
|
class Observer
|
|
5
5
|
attr_reader :order
|
|
6
6
|
|
|
7
|
-
def initialize(observer:, order:)
|
|
7
|
+
def initialize(observer:, action:, order:)
|
|
8
8
|
@observer = observer
|
|
9
|
+
@action = action
|
|
9
10
|
@order = order
|
|
10
11
|
end
|
|
11
12
|
|
|
12
13
|
def trigger(action:, event:)
|
|
14
|
+
action = @action if @action
|
|
13
15
|
event ? @observer.send(action, **{ event: event }) : @observer.send(action)
|
|
14
16
|
rescue ArgumentError
|
|
15
17
|
type = @observer.instance_of?(Class) ? @observer : @observer.class
|
data/lib/observables.rb
CHANGED
|
@@ -24,8 +24,8 @@ module Observers
|
|
|
24
24
|
observable.add_observer(observer:)
|
|
25
25
|
end
|
|
26
26
|
|
|
27
|
-
def trigger(
|
|
28
|
-
|
|
27
|
+
def trigger(actionable:, key:)
|
|
28
|
+
action, event = parse_actionable(actionable:)
|
|
29
29
|
|
|
30
30
|
observables[key].observers.each do |observer|
|
|
31
31
|
observer.trigger(action:, event:)
|
|
@@ -34,8 +34,8 @@ module Observers
|
|
|
34
34
|
nil # The trigger method is boring and uneventful, it fires events and if it doesn't complain then all is okay.
|
|
35
35
|
end
|
|
36
36
|
|
|
37
|
-
def take(
|
|
38
|
-
|
|
37
|
+
def take(actionable:, key:)
|
|
38
|
+
action, event = parse_actionable(actionable:)
|
|
39
39
|
|
|
40
40
|
observables[key].observers.each do |observer|
|
|
41
41
|
result = observer.trigger(action:, event:)
|
|
@@ -47,23 +47,16 @@ module Observers
|
|
|
47
47
|
|
|
48
48
|
private
|
|
49
49
|
|
|
50
|
-
def
|
|
51
|
-
action =
|
|
50
|
+
def parse_actionable(actionable:)
|
|
51
|
+
action = actionable
|
|
52
52
|
event = nil
|
|
53
53
|
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
action = args.first
|
|
57
|
-
when 2
|
|
58
|
-
key, action = args
|
|
59
|
-
end
|
|
60
|
-
|
|
61
|
-
if action.respond_to?(:action)
|
|
62
|
-
event = action
|
|
54
|
+
if actionable.class.ancestors.any? { |ancestor| ancestor.to_s == 'Low::Event' }
|
|
55
|
+
event = actionable
|
|
63
56
|
action = event.action
|
|
64
57
|
end
|
|
65
58
|
|
|
66
|
-
[
|
|
59
|
+
[action, event]
|
|
67
60
|
end
|
|
68
61
|
end
|
|
69
62
|
end
|
data/lib/observers.rb
CHANGED
|
@@ -8,19 +8,19 @@ module Observers
|
|
|
8
8
|
Observables.upsert(key:)
|
|
9
9
|
end
|
|
10
10
|
|
|
11
|
-
# TODO:
|
|
12
|
-
def observe(key, order: Observables.observables.count)
|
|
13
|
-
observer = Observer.new(observer: self, order:)
|
|
11
|
+
# TODO: Unit test order.
|
|
12
|
+
def observe(key, action = nil, order: Observables.observables.count)
|
|
13
|
+
observer = Observer.new(observer: self, action:, order:)
|
|
14
14
|
Observables.observe(key:, observer:)
|
|
15
15
|
end
|
|
16
16
|
|
|
17
|
-
def trigger(
|
|
18
|
-
Observables.trigger(
|
|
17
|
+
def trigger(actionable, key = nil)
|
|
18
|
+
Observables.trigger(actionable:, key: key || self)
|
|
19
19
|
end
|
|
20
20
|
|
|
21
21
|
# Returns the first observer with a non-nil return value.
|
|
22
22
|
# One day it may use ractors and be concurrent, if we can freeze the args.
|
|
23
|
-
def take(
|
|
24
|
-
Observables.take(
|
|
23
|
+
def take(actionable, key = nil)
|
|
24
|
+
Observables.take(actionable:, key: key || self)
|
|
25
25
|
end
|
|
26
26
|
end
|
data/lib/version.rb
CHANGED