observers 0.0.1 → 0.1.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 +4 -1
- data/lib/observables.rb +37 -1
- data/lib/observers.rb +8 -17
- 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: 82c40c0a93bc5ffefe86c3c27685e18fd699a7188c8ffc10899386974e48ac3c
|
|
4
|
+
data.tar.gz: 70992908f64214fc993e2bad241c7bb81cccbf6b07d4a895e79a8bf173299b05
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: d75da6da3eb93b6e8e3e8fdd9e343560d96bfec7828fe38822945d0927edddd72e80a93e15bb8421629aa2f0d64e6f0012dd242de27204ecf9bc8783ece184b3
|
|
7
|
+
data.tar.gz: 58df26a6e12b767cbd9ffc46f3eda991a04ab85791c714e61fabd92b98e6e4ec64d537d17f57358cf2974516dbf15375f9320eba4dd87a6fa3fc97c5197fa7da
|
data/lib/models/observer.rb
CHANGED
|
@@ -10,7 +10,10 @@ module Observers
|
|
|
10
10
|
end
|
|
11
11
|
|
|
12
12
|
def trigger(action:, event:)
|
|
13
|
-
event ? @observer.send(action, event) : @observer.send(action)
|
|
13
|
+
event ? @observer.send(action, **{ event: event }) : @observer.send(action)
|
|
14
|
+
rescue ArgumentError
|
|
15
|
+
type = @observer.instance_of?(Class) ? @observer : @observer.class
|
|
16
|
+
raise ArgumentError, "#{event.class} sent to #{type}##{action} but it has no 'event:' keyword argument"
|
|
14
17
|
end
|
|
15
18
|
end
|
|
16
19
|
end
|
data/lib/observables.rb
CHANGED
|
@@ -24,10 +24,46 @@ module Observers
|
|
|
24
24
|
observable.add_observer(observer:)
|
|
25
25
|
end
|
|
26
26
|
|
|
27
|
-
def trigger(key
|
|
27
|
+
def trigger(*args, key:)
|
|
28
|
+
key, action, event = parse_args(*args, key:)
|
|
29
|
+
|
|
28
30
|
observables[key].observers.each do |observer|
|
|
29
31
|
observer.trigger(action:, event:)
|
|
30
32
|
end
|
|
33
|
+
|
|
34
|
+
nil # The trigger method is boring and uneventful, it fires events and if it doesn't complain then all is okay.
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def take(*args, key:)
|
|
38
|
+
key, action, event = parse_args(*args, key:)
|
|
39
|
+
|
|
40
|
+
observables[key].observers.each do |observer|
|
|
41
|
+
result = observer.trigger(action:, event:)
|
|
42
|
+
return result unless result.nil?
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
nil # This is a bad day for the take method, one of the worst.
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
private
|
|
49
|
+
|
|
50
|
+
def parse_args(*args, key:)
|
|
51
|
+
action = nil
|
|
52
|
+
event = nil
|
|
53
|
+
|
|
54
|
+
case args.count
|
|
55
|
+
when 1
|
|
56
|
+
action = args.first
|
|
57
|
+
when 2
|
|
58
|
+
key, action = args
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
if action.respond_to?(:action)
|
|
62
|
+
event = action
|
|
63
|
+
action = event.action
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
[key, action, event]
|
|
31
67
|
end
|
|
32
68
|
end
|
|
33
69
|
end
|
data/lib/observers.rb
CHANGED
|
@@ -8,28 +8,19 @@ module Observers
|
|
|
8
8
|
Observables.upsert(key:)
|
|
9
9
|
end
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
# TODO: Test order.
|
|
12
|
+
def observe(key, order: Observables.observables.count)
|
|
12
13
|
observer = Observer.new(observer: self, order:)
|
|
13
14
|
Observables.observe(key:, observer:)
|
|
14
15
|
end
|
|
15
16
|
|
|
16
17
|
def trigger(*args)
|
|
17
|
-
key
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
case args.count
|
|
21
|
-
when 1
|
|
22
|
-
action = args.first
|
|
23
|
-
when 2
|
|
24
|
-
key, action = args
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
event = nil
|
|
28
|
-
if action.is_a?(Event)
|
|
29
|
-
event = action
|
|
30
|
-
action = arg.action
|
|
31
|
-
end
|
|
18
|
+
Observables.trigger(*args, key: self)
|
|
19
|
+
end
|
|
32
20
|
|
|
33
|
-
|
|
21
|
+
# Returns the first observer with a non-nil return value.
|
|
22
|
+
# One day it may use ractors and be concurrent, if we can freeze the args.
|
|
23
|
+
def take(*args)
|
|
24
|
+
Observables.take(*args, key: self)
|
|
34
25
|
end
|
|
35
26
|
end
|
data/lib/version.rb
CHANGED