observers 0.0.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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: fc8e409b9cf0b7f8fe7e84fa2efad90808d00fd513276371fa06174d943ca556
4
+ data.tar.gz: bb127d514011ec3ee6d3bb18b87548fa3627de92c0d3edda102e060092809c08
5
+ SHA512:
6
+ metadata.gz: 8dd4e4cca8f1407a33ecb39daada99586775c2ce1205f88148c496ccf9bf3351ca9c74f0b0c1c247568c2f496a33725a7c5fd14c6ba5e804a65fdd6bbcd99bf9
7
+ data.tar.gz: f09cf9e165ad7bc357b6e7f18f0222babe094e1bb2f0c562d93bec00928b972d05a560da14687adcd15420cf0cec706ef6e84dcf96856556bb9b0a62e9ec1dd6
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Observers
4
+ class Observation
5
+ def initialize(observable:)
6
+ @observable = observable
7
+ @observers = []
8
+ end
9
+
10
+ def add_observer(observer:)
11
+ @observers << observer
12
+ @observers.sort_by(&:priority)
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Observers
4
+ class Observer
5
+ def initialize(priority:)
6
+ @priority = priority
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,21 @@
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
data/lib/observers.rb ADDED
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../observation_deck'
4
+
5
+ module Observers
6
+ def observable(observable = nil)
7
+ observable = self if observable.nil?
8
+ ObservationDeck.track(observable:)
9
+ end
10
+
11
+ def observe(observable)
12
+ ObservationDeck.observe(observable:, observer: self)
13
+ end
14
+ end
data/lib/version.rb ADDED
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Observers
4
+ VERSION = '0.0.0'
5
+ end
metadata ADDED
@@ -0,0 +1,46 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: observers
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.0
5
+ platform: ruby
6
+ authors:
7
+ - maedi
8
+ bindir: exe
9
+ cert_chain: []
10
+ date: 1980-01-02 00:00:00.000000000 Z
11
+ dependencies: []
12
+ description: Observers for event-driven applications
13
+ email:
14
+ - maediprichard@gmail.com
15
+ executables: []
16
+ extensions: []
17
+ extra_rdoc_files: []
18
+ files:
19
+ - lib/models/observation.rb
20
+ - lib/models/observer.rb
21
+ - lib/observation_deck.rb
22
+ - lib/observers.rb
23
+ - lib/version.rb
24
+ homepage: https://github.com/maedi/observers
25
+ licenses: []
26
+ metadata:
27
+ homepage_uri: https://github.com/maedi/observers
28
+ source_code_uri: https://github.com/maedi/observers/src/branch/main
29
+ rdoc_options: []
30
+ require_paths:
31
+ - lib
32
+ required_ruby_version: !ruby/object:Gem::Requirement
33
+ requirements:
34
+ - - ">="
35
+ - !ruby/object:Gem::Version
36
+ version: 3.3.0
37
+ required_rubygems_version: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - ">="
40
+ - !ruby/object:Gem::Version
41
+ version: '0'
42
+ requirements: []
43
+ rubygems_version: 3.7.2
44
+ specification_version: 4
45
+ summary: Observe objects of any kind
46
+ test_files: []