event_engine-subscribers 0.1.1 → 0.2.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d2a695d8809af3af1b9145dd9866e96aa710304f3ccdba661ec5ed46e059577e
4
- data.tar.gz: 4625cf214a4b49c8814afd693b099f5d46bfe94421ceec5d346ce362acb87e33
3
+ metadata.gz: 34965b10a7789582de233120f7e16c220292225c732605797c7dd2759f84d070
4
+ data.tar.gz: 3936714ca836690e78228fdfe66c5be51b5c7a7826264ea5f745ea696c16a277
5
5
  SHA512:
6
- metadata.gz: '08d6aeee53d7aa109bf72227d0cc5dd9698f57307389c052ff6113eb1859018ec4e852c5c9b2ef95d6ace4f057663c4e31e1596d106d3debd72162ccef0d4efd'
7
- data.tar.gz: f0469ee662fd07bd01598b44125d1123f5a1bb2b972442c3b246ca28a1d8bb0d7a8a6b6c6dbf81c00db9f0575bdaf2598988af025c47e6dc55c2b09e96c20c53
6
+ metadata.gz: '08c34c7ddcdef975a9c8af1f2289e55bf13bcaa7426e18544bb92bebe80f3acd1f927a9f207d05b130a4481b4aed632506f0e8e24c7fe3384e3cefbf62821088'
7
+ data.tar.gz: a750d52e0fc9a50cde6feded5f5ac782a027f9618ce4104a7fc2c231bdc403f8e6e607f8e9326297796e6fc4aab740f4912a3e458536acd65ea85d04fc808a1f
data/README.md CHANGED
@@ -92,9 +92,17 @@ EventEngine::UnregisteredProcessorError: the rule for event :lead_created
92
92
  under that name
93
93
  ```
94
94
 
95
- If subscribers do not run for an event that *is* routed here, check that the
96
- subscriber class is in `app/subscribers`. A subscriber anywhere else registers only
97
- once Rails has loaded its class.
95
+ If an event is routed to `inline` or `background` and no subscriber is registered for
96
+ it, the app refuses to start and names each such event:
97
+
98
+ ```
99
+ EventEngine::Subscribers::UnsubscribedEventsError: These events are routed to
100
+ subscribers but have none: hay_baled
101
+ ```
102
+
103
+ The check runs once the app has started, after every class in `app/subscribers` is
104
+ registered. A subscriber anywhere else registers only once Rails has loaded its class,
105
+ so keep subscribers in `app/subscribers`.
98
106
 
99
107
  ## A working example app
100
108
 
@@ -14,6 +14,10 @@ module EventEngine
14
14
  end
15
15
  end
16
16
 
17
+ initializer "event_engine.subscribers.check_every_routed_event_has_a_subscriber" do
18
+ config.after_initialize { Subscribers.check!(Subscribers.routes) }
19
+ end
20
+
17
21
  initializer "event_engine.subscribers.forget_unloaded_subscribers" do |app|
18
22
  app.reloader.before_class_unload { Registry.clear! }
19
23
  end
@@ -23,6 +23,13 @@ module EventEngine
23
23
  registrations[event_name&.to_sym] || []
24
24
  end
25
25
 
26
+ def self.unsubscribed(routes)
27
+ routes.select { |event_name, process_type| routed_to_subscribers?(process_type) && subscribers_for(event_name).empty? }.keys
28
+ end
29
+
30
+ def self.routed_to_subscribers?(process_type) = Processor::HANDLED_PROCESS_TYPES.include?(process_type&.to_sym)
31
+ private_class_method :routed_to_subscribers?
32
+
26
33
  # Removes all registrations. Intended for test isolation.
27
34
  #
28
35
  # @return [void]
@@ -0,0 +1,9 @@
1
+ module EventEngine
2
+ module Subscribers
3
+ class UnsubscribedEventsError < StandardError
4
+ def initialize(event_names)
5
+ super("These events are routed to subscribers but have none: #{event_names.join(", ")}")
6
+ end
7
+ end
8
+ end
9
+ end
@@ -1,5 +1,5 @@
1
1
  module EventEngine
2
2
  module Subscribers
3
- VERSION = "0.1.1"
3
+ VERSION = "0.2.0"
4
4
  end
5
5
  end
@@ -3,8 +3,25 @@ require "event_engine/subscribers/engine"
3
3
  require "event_engine/subscribers/registry"
4
4
  require "event_engine/subscribers/base"
5
5
  require "event_engine/subscribers/processor"
6
+ require "event_engine/subscribers/unsubscribed_events_error"
6
7
 
7
8
  module EventEngine
8
9
  module Subscribers
10
+ def self.routes
11
+ EventEngine.schema_registry.events.to_h { |event_name| [ event_name, process_type_of(event_name) ] }
12
+ end
13
+
14
+ def self.process_type_of(event_name)
15
+ domain = EventEngine.schema_registry.latest_for(event_name).domain
16
+ EventEngine.processing_rules.for(event_name: event_name, pack: domain)
17
+ end
18
+ private_class_method :process_type_of
19
+
20
+ def self.check!(routes)
21
+ unsubscribed = Registry.unsubscribed(routes)
22
+ raise UnsubscribedEventsError, unsubscribed if unsubscribed.any?
23
+
24
+ true
25
+ end
9
26
  end
10
27
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: event_engine-subscribers
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - tylercschneider
@@ -85,6 +85,7 @@ files:
85
85
  - lib/event_engine/subscribers/engine.rb
86
86
  - lib/event_engine/subscribers/processor.rb
87
87
  - lib/event_engine/subscribers/registry.rb
88
+ - lib/event_engine/subscribers/unsubscribed_events_error.rb
88
89
  - lib/event_engine/subscribers/version.rb
89
90
  - lib/tasks/event_engine/subscribers_tasks.rake
90
91
  - the_local/agents/event_engine-subscribers-develop.md