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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: fc8e409b9cf0b7f8fe7e84fa2efad90808d00fd513276371fa06174d943ca556
4
- data.tar.gz: bb127d514011ec3ee6d3bb18b87548fa3627de92c0d3edda102e060092809c08
3
+ metadata.gz: e16b25754307c5e5ae72dfbe6e2774637306a381c0fb4acb81495732aa21f9ac
4
+ data.tar.gz: 9b376d1470e2c9b30b7888dd1409fd7ef3e5340fdb97ea53d93ed037d68c67b8
5
5
  SHA512:
6
- metadata.gz: 8dd4e4cca8f1407a33ecb39daada99586775c2ce1205f88148c496ccf9bf3351ca9c74f0b0c1c247568c2f496a33725a7c5fd14c6ba5e804a65fdd6bbcd99bf9
7
- data.tar.gz: f09cf9e165ad7bc357b6e7f18f0222babe094e1bb2f0c562d93bec00928b972d05a560da14687adcd15420cf0cec706ef6e84dcf96856556bb9b0a62e9ec1dd6
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 Observation
5
- def initialize(observable:)
6
- @observable = observable
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(&:priority)
14
+ @observers.sort_by(&:order)
13
15
  end
14
16
  end
15
17
  end
@@ -2,8 +2,15 @@
2
2
 
3
3
  module Observers
4
4
  class Observer
5
- def initialize(priority:)
6
- @priority = priority
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
@@ -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 '../observation_deck'
3
+ require_relative 'observables'
4
+ require_relative 'models/observer'
4
5
 
5
6
  module Observers
6
- def observable(observable = nil)
7
- observable = self if observable.nil?
8
- ObservationDeck.track(observable:)
7
+ def observable(key = self)
8
+ Observables.upsert(key:)
9
9
  end
10
10
 
11
- def observe(observable)
12
- ObservationDeck.observe(observable:, observer: self)
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
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Observers
4
- VERSION = '0.0.0'
4
+ VERSION = '0.0.2'
5
5
  end
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.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: Observers for event-driven applications
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/observation.rb
19
+ - lib/models/observable.rb
20
20
  - lib/models/observer.rb
21
- - lib/observation_deck.rb
21
+ - lib/observables.rb
22
22
  - lib/observers.rb
23
23
  - lib/version.rb
24
24
  homepage: https://github.com/maedi/observers
@@ -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