omnes 0.2.0 → 0.2.1

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: fa683052724423d76ee0b417e84e2d0ed954c47b50382eead7e8e85942eea8c0
4
- data.tar.gz: e0690f6d8852c9ab3ff1d4e2fb7c6e68f82aca657fe6b684a503f14a085e0efc
3
+ metadata.gz: eb5f0bfcfdcbaffdfe41c807db505023e8bb84cacdb56378a0851b9effdd51c1
4
+ data.tar.gz: 4b2bb740f6525c96651912a88f7738b04ceeca699a4af7b3f883f68a3e60eb55
5
5
  SHA512:
6
- metadata.gz: 41a41801b5b133640bca4c98f004163382fe6747848595a70fa1404c9638cca304cb8e95c0f7b6b81ebcebe15df1df32a4c28274b252d38d8d66fac572d988dd
7
- data.tar.gz: 76a23f76d4a007cfadcf59140168934f2653804f65c7cbdad21a70e3dcd71177438b4eb2174da4b421d07fe694d793da271a5e40c2e61a2d5b77bd915e8869ce
6
+ metadata.gz: 55b5fe1e1bc4fd5cd10e6683ff7539be5dec727f4399758d7fcfe3fd3d485d30fe4d99e8c2f1354bf1aef28f3efffd991573a89d827edf3839827c6fcfcd71d8
7
+ data.tar.gz: cc1c6c69c4e98442abad019ffac4dfa56221924182fd041d9830d7c72660eec09b4173c812e90969fb49f28cd7968acaeb91ab89c94bb8a9efb96e3bbe5626e7
data/.gitignore CHANGED
@@ -6,6 +6,7 @@
6
6
  /pkg/
7
7
  /spec/reports/
8
8
  /tmp/
9
+ Gemfile.lock
9
10
 
10
11
  # rspec failure tracking
11
12
  .rspec_status
data/CHANGELOG.md CHANGED
@@ -4,6 +4,16 @@ All notable changes to this project will be documented in this file.
4
4
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
5
5
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
6
6
 
7
+ ## Unreleased
8
+
9
+ ## [0.2.1] - 2022-04-19
10
+
11
+ ### Added
12
+ - Added `Omnes::Bus#clear` for autoloading [#4](https://github.com/nebulab/omnes/pull/4).
13
+
14
+ ### Changed
15
+ - Fix re-adding autodiscovered subscriptions on subsequent calls [#5](https://github.com/nebulab/omnes/pull/5).
16
+
7
17
  ## [0.2.0] - 2022-04-15
8
18
 
9
19
  ### Added
@@ -13,6 +23,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
13
23
 
14
24
  ## [0.1.0] - 2022-03-23
15
25
 
16
- [Unreleased]: https://github.com/nebulab/omnes/compare/v0.2.0...HEAD
26
+ [Unreleased]: https://github.com/nebulab/omnes/compare/v0.2.1...HEAD
27
+ [0.2.1]: https://github.com/nebulab/omnes/compare/v0.2.0...v0.2.1
17
28
  [0.2.0]: https://github.com/nebulab/omnes/compare/v0.1.0...v0.2.0
18
29
  [0.1.0]: https://github.com/nebulab/omnes/releases/tag/v0.1.0
data/README.md CHANGED
@@ -476,18 +476,29 @@ handle :order_created, with: ThreadAdapter.new(:order_created)
476
476
  # ...
477
477
  ```
478
478
 
479
- ## Debugging
480
-
481
- ### Unsubscribing
479
+ ## Unsubscribing & clearing
482
480
 
483
481
  You can unsubscribe a given subscription by passing its
484
- [reference](#referencing-subscriptions) to `Omnes::Bus#unsubscribe`:
482
+ [reference](#referencing-subscriptions) to `Omnes::Bus#unsubscribe` (see how to
483
+ [reference subscriptions](#referencing-subscriptions)):
485
484
 
486
485
  ```ruby
487
486
  subscription = bus.subscribe(:order_created, OrderCreationEmailSubscription.new)
488
487
  bus.unsubscribe(subscription)
489
488
  ```
490
489
 
490
+ Sometimes you might need to leave your bus in a pristine state, with no events
491
+ registered or active subscriptions. That can be useful for autoloading in
492
+ development:
493
+
494
+ ```ruby
495
+ bus.clear
496
+ bus.registry.event_names # => []
497
+ bus.subscriptions # => []
498
+ ```
499
+
500
+ ## Debugging
501
+
491
502
  ### Registration
492
503
 
493
504
  Whenever you register an event, you get back an [`Omnes::Registry::Registration`](lib/omnes/registry.rb)
@@ -629,9 +640,14 @@ require "omnes"
629
640
  Omnes.config.subscriber.autodiscover = true
630
641
 
631
642
  Bus = Omnes::Bus.new
632
- Bus.register(:order_created)
633
643
 
634
- OrderCreationEmailSubscriber.new.subscribe_to(Bus)
644
+ Rails.application.config.to_prepare do
645
+ Bus.clear
646
+
647
+ Bus.register(:order_created)
648
+
649
+ OrderCreationEmailSubscriber.new.subscribe_to(Bus)
650
+ end
635
651
  ```
636
652
 
637
653
  We can define `OrderCreationEmailSubscriber` in
data/lib/omnes/bus.rb CHANGED
@@ -287,6 +287,18 @@ module Omnes
287
287
  subscriptions.find { |subscription| subscription.id == id }
288
288
  end
289
289
 
290
+ # Clears all registered events and subscriptions
291
+ #
292
+ # Useful for code reloading.
293
+ #
294
+ # @return [Omnes::Bus]
295
+ def clear
296
+ tap do
297
+ @subscriptions = []
298
+ @registry = Registry.new
299
+ end
300
+ end
301
+
290
302
  private
291
303
 
292
304
  def execute_subscriptions_for_event(event, publication_context)
@@ -24,9 +24,9 @@ module Omnes
24
24
  def call(bus, instance)
25
25
  raise MultipleSubscriberSubscriptionAttemptError if already_called?(bus, instance)
26
26
 
27
- autodiscover_subscription_definitions(bus, instance) unless autodiscover_strategy.nil?
27
+ all_subscription_definitions = subscription_definitions + autodiscovered_subscription_definitions(bus, instance)
28
28
 
29
- definitions = subscription_definitions.map { |defn| defn.(bus, instance) }
29
+ definitions = all_subscription_definitions.map { |defn| defn.(bus, instance) }
30
30
 
31
31
  subscribe_definitions(definitions, bus, instance).tap do
32
32
  mark_as_called(bus, instance)
@@ -47,21 +47,32 @@ module Omnes
47
47
  @calling_cache << [bus, instance]
48
48
  end
49
49
 
50
- def autodiscover_subscription_definitions(bus, instance)
51
- bus.registry.event_names.each do |event_name|
52
- method_name = autodiscover_strategy.(event_name)
53
- next unless instance.respond_to?(method_name, true)
50
+ def autodiscovered_subscription_definitions(bus, instance)
51
+ return [] unless autodiscover_strategy
54
52
 
55
- add_subscription_definition do |_bus|
53
+ bus.registry.event_names.reduce([]) do |defs, event_name|
54
+ method_name = autodiscover_strategy.(event_name)
55
+ if instance.respond_to?(method_name, true)
56
56
  [
57
- Subscription::SINGLE_EVENT_MATCHER.curry[event_name],
58
- Adapter.Type(Adapter::Method.new(method_name)),
59
- Subscription.random_id
57
+ *defs,
58
+ autodiscovered_subscription_definition(event_name, method_name)
60
59
  ]
60
+ else
61
+ defs
61
62
  end
62
63
  end
63
64
  end
64
65
 
66
+ def autodiscovered_subscription_definition(event_name, method_name)
67
+ lambda do |_bus, _instance|
68
+ [
69
+ Subscription::SINGLE_EVENT_MATCHER.curry[event_name],
70
+ Adapter.Type(Adapter::Method.new(method_name)),
71
+ Subscription.random_id
72
+ ]
73
+ end
74
+ end
75
+
65
76
  def subscribe_definitions(definitions, bus, instance)
66
77
  matcher_with_callbacks = definitions.map do |(matcher, adapter, id)|
67
78
  [matcher, adapter.curry[instance], id]
data/lib/omnes/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Omnes
4
- VERSION = "0.2.0"
4
+ VERSION = "0.2.1"
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: omnes
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Marc Busqué
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-04-15 00:00:00.000000000 Z
11
+ date: 2022-04-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activejob
@@ -87,7 +87,6 @@ files:
87
87
  - CHANGELOG.md
88
88
  - CODE_OF_CONDUCT.md
89
89
  - Gemfile
90
- - Gemfile.lock
91
90
  - LICENSE.txt
92
91
  - README.md
93
92
  - Rakefile
data/Gemfile.lock DELETED
@@ -1,86 +0,0 @@
1
- PATH
2
- remote: .
3
- specs:
4
- omnes (0.1.0)
5
-
6
- GEM
7
- remote: https://rubygems.org/
8
- specs:
9
- activejob (7.0.2.3)
10
- activesupport (= 7.0.2.3)
11
- globalid (>= 0.3.6)
12
- activesupport (7.0.2.3)
13
- concurrent-ruby (~> 1.0, >= 1.0.2)
14
- i18n (>= 1.6, < 2)
15
- minitest (>= 5.1)
16
- tzinfo (~> 2.0)
17
- ast (2.4.2)
18
- concurrent-ruby (1.1.9)
19
- connection_pool (2.2.5)
20
- diff-lcs (1.5.0)
21
- globalid (1.0.0)
22
- activesupport (>= 5.0)
23
- i18n (1.10.0)
24
- concurrent-ruby (~> 1.0)
25
- minitest (5.15.0)
26
- parallel (1.21.0)
27
- parser (3.1.1.0)
28
- ast (~> 2.4.1)
29
- rack (2.2.3)
30
- rainbow (3.1.1)
31
- rake (12.3.3)
32
- redcarpet (3.5.1)
33
- redis (4.6.0)
34
- regexp_parser (2.2.1)
35
- rexml (3.2.5)
36
- rspec (3.11.0)
37
- rspec-core (~> 3.11.0)
38
- rspec-expectations (~> 3.11.0)
39
- rspec-mocks (~> 3.11.0)
40
- rspec-core (3.11.0)
41
- rspec-support (~> 3.11.0)
42
- rspec-expectations (3.11.0)
43
- diff-lcs (>= 1.2.0, < 2.0)
44
- rspec-support (~> 3.11.0)
45
- rspec-mocks (3.11.0)
46
- diff-lcs (>= 1.2.0, < 2.0)
47
- rspec-support (~> 3.11.0)
48
- rspec-support (3.11.0)
49
- rubocop (1.25.1)
50
- parallel (~> 1.10)
51
- parser (>= 3.1.0.0)
52
- rainbow (>= 2.2.2, < 4.0)
53
- regexp_parser (>= 1.8, < 3.0)
54
- rexml
55
- rubocop-ast (>= 1.15.1, < 2.0)
56
- ruby-progressbar (~> 1.7)
57
- unicode-display_width (>= 1.4.0, < 3.0)
58
- rubocop-ast (1.16.0)
59
- parser (>= 3.1.1.0)
60
- ruby-progressbar (1.11.0)
61
- sidekiq (6.4.1)
62
- connection_pool (>= 2.2.2)
63
- rack (~> 2.0)
64
- redis (>= 4.2.0)
65
- tzinfo (2.0.4)
66
- concurrent-ruby (~> 1.0)
67
- unicode-display_width (2.1.0)
68
- webrick (1.7.0)
69
- yard (0.9.27)
70
- webrick (~> 1.7.0)
71
-
72
- PLATFORMS
73
- x86_64-linux
74
-
75
- DEPENDENCIES
76
- activejob (~> 7.0)
77
- omnes!
78
- rake (~> 12.0)
79
- redcarpet (~> 3.5)
80
- rspec (~> 3.0)
81
- rubocop (~> 1.25)
82
- sidekiq (~> 6.4)
83
- yard (~> 0.9)
84
-
85
- BUNDLED WITH
86
- 2.2.3