observers 0.0.0 → 0.0.2
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/{observation.rb → observable.rb} +6 -4
- data/lib/models/observer.rb +9 -2
- data/lib/observables.rb +34 -0
- data/lib/observers.rb +26 -6
- data/lib/version.rb +1 -1
- metadata +4 -4
- data/lib/observation_deck.rb +0 -21
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: e16b25754307c5e5ae72dfbe6e2774637306a381c0fb4acb81495732aa21f9ac
|
|
4
|
+
data.tar.gz: 9b376d1470e2c9b30b7888dd1409fd7ef3e5340fdb97ea53d93ed037d68c67b8
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: eab730189e35a58279c2069fbd41b9763c6a3c8862777982a3e4d4bccd5cf704a7e5371277ac50415d70ecc18a8bda674224073f0f3dc27406d972496f46c405
|
|
7
|
+
data.tar.gz: d498b6b4590c74e6695fee0922f017bf0af086ac85db299933f4e90a2b3c53c13bba00fcca861e6dbb8d67229980f1f66925b01b05ff558eb0fd052892ae3c5c
|
|
@@ -1,15 +1,17 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
module Observers
|
|
4
|
-
class
|
|
5
|
-
|
|
6
|
-
|
|
4
|
+
class Observable
|
|
5
|
+
attr_reader :observers
|
|
6
|
+
|
|
7
|
+
def initialize(key:)
|
|
8
|
+
@key = key
|
|
7
9
|
@observers = []
|
|
8
10
|
end
|
|
9
11
|
|
|
10
12
|
def add_observer(observer:)
|
|
11
13
|
@observers << observer
|
|
12
|
-
@observers.sort_by(&:
|
|
14
|
+
@observers.sort_by(&:order)
|
|
13
15
|
end
|
|
14
16
|
end
|
|
15
17
|
end
|
data/lib/models/observer.rb
CHANGED
|
@@ -2,8 +2,15 @@
|
|
|
2
2
|
|
|
3
3
|
module Observers
|
|
4
4
|
class Observer
|
|
5
|
-
|
|
6
|
-
|
|
5
|
+
attr_reader :order
|
|
6
|
+
|
|
7
|
+
def initialize(observer:, order:)
|
|
8
|
+
@observer = observer
|
|
9
|
+
@order = order
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def trigger(action:, event:)
|
|
13
|
+
event ? @observer.send(action, event) : @observer.send(action)
|
|
7
14
|
end
|
|
8
15
|
end
|
|
9
16
|
end
|
data/lib/observables.rb
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative 'models/observable'
|
|
4
|
+
|
|
5
|
+
module Observers
|
|
6
|
+
class Observables
|
|
7
|
+
class << self
|
|
8
|
+
def observables
|
|
9
|
+
@observables ||= {}
|
|
10
|
+
@observables
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def reset
|
|
14
|
+
@observables = {}
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def upsert(key:)
|
|
18
|
+
observables[key] = Observable.new(key:) if observables[key].nil?
|
|
19
|
+
observables[key]
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def observe(key:, observer:)
|
|
23
|
+
observable = observables[key] || upsert(key:)
|
|
24
|
+
observable.add_observer(observer:)
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def trigger(key:, action:, event:)
|
|
28
|
+
observables[key].observers.each do |observer|
|
|
29
|
+
observer.trigger(action:, event:)
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
data/lib/observers.rb
CHANGED
|
@@ -1,14 +1,34 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require_relative '
|
|
3
|
+
require_relative 'observables'
|
|
4
|
+
require_relative 'models/observer'
|
|
4
5
|
|
|
5
6
|
module Observers
|
|
6
|
-
def observable(
|
|
7
|
-
|
|
8
|
-
ObservationDeck.track(observable:)
|
|
7
|
+
def observable(key = self)
|
|
8
|
+
Observables.upsert(key:)
|
|
9
9
|
end
|
|
10
10
|
|
|
11
|
-
def observe(
|
|
12
|
-
|
|
11
|
+
def observe(key, order: 0)
|
|
12
|
+
observer = Observer.new(observer: self, order:)
|
|
13
|
+
Observables.observe(key:, observer:)
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def trigger(*args)
|
|
17
|
+
key = self
|
|
18
|
+
action = nil
|
|
19
|
+
|
|
20
|
+
case args.count
|
|
21
|
+
when 1
|
|
22
|
+
action = args.first
|
|
23
|
+
when 2
|
|
24
|
+
key, action = args
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
if action.respond_to?(:action)
|
|
28
|
+
event = action
|
|
29
|
+
action = event.action
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
Observables.trigger(key:, action:, event: nil)
|
|
13
33
|
end
|
|
14
34
|
end
|
data/lib/version.rb
CHANGED
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.0.
|
|
4
|
+
version: 0.0.2
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- maedi
|
|
@@ -9,16 +9,16 @@ bindir: exe
|
|
|
9
9
|
cert_chain: []
|
|
10
10
|
date: 1980-01-02 00:00:00.000000000 Z
|
|
11
11
|
dependencies: []
|
|
12
|
-
description:
|
|
12
|
+
description: Observe events for objects of any kind
|
|
13
13
|
email:
|
|
14
14
|
- maediprichard@gmail.com
|
|
15
15
|
executables: []
|
|
16
16
|
extensions: []
|
|
17
17
|
extra_rdoc_files: []
|
|
18
18
|
files:
|
|
19
|
-
- lib/models/
|
|
19
|
+
- lib/models/observable.rb
|
|
20
20
|
- lib/models/observer.rb
|
|
21
|
-
- lib/
|
|
21
|
+
- lib/observables.rb
|
|
22
22
|
- lib/observers.rb
|
|
23
23
|
- lib/version.rb
|
|
24
24
|
homepage: https://github.com/maedi/observers
|
data/lib/observation_deck.rb
DELETED
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
require_relative '../models/observation'
|
|
4
|
-
require_relative '../models/observer'
|
|
5
|
-
|
|
6
|
-
module Observers
|
|
7
|
-
class ObservationDeck
|
|
8
|
-
def initialize
|
|
9
|
-
@observations = {}
|
|
10
|
-
end
|
|
11
|
-
|
|
12
|
-
def track(observable:)
|
|
13
|
-
@observations[observable] = Observation.new(observable:)
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
def observe(observable:, observer:)
|
|
17
|
-
observation = @observations[observable]
|
|
18
|
-
observation.add_observer(observer:)
|
|
19
|
-
end
|
|
20
|
-
end
|
|
21
|
-
end
|