event_engine-subscribers 0.4.0 → 0.5.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: 9911cefcbfa87b20178f615e68e88cef8f57da763ad42fcdf10a3f7f1b9d7be9
4
- data.tar.gz: 1aa83bfbbea17ba4b3d2555f08509545f487e94d38abc52409de1a97bfa52109
3
+ metadata.gz: bbee4f2589c558f24ee153965000570ecdafd07fc131a60c123b444943a69a2e
4
+ data.tar.gz: 2f314b0b83c6cc107f9367ea8dd43afc82c7cf1fd1007a92795964f21865a4cd
5
5
  SHA512:
6
- metadata.gz: 64e5c8652616821523641c4ffa5e17afb165e052847cde405c42f9ba2e852ed90a5c77add76ba3d6315e4fe230b97c280ff6213db5671c18a94e41757d957f82
7
- data.tar.gz: 6b420c78274b70abf4cda7d544074e692e400409dac035937204b2270a0a2605b9a3f63198d46b0c9201c49cd3406aab5a6d1f789de28defe4c69aaf4f6fd88c
6
+ metadata.gz: 4f0b5988077c604629273013de16dfda42f4dbcb568e57d744e688d0b0107c94c90d60b66cecd0d2fdcfdcb156fbdd69036b8f030888bd787a0df9d0dc8daabb
7
+ data.tar.gz: 116c77921a190211c785c866dc97a81def005dfc8e0bb47ada93c3e6f5c9ecaf7cdb24c2063748fbc7bf7d4401a49ab4d08a003116277afba9810eb107688d12
data/README.md CHANGED
@@ -100,9 +100,26 @@ EventEngine::Subscribers::UnsubscribedEventsError: These events are routed to
100
100
  subscribers but have none: hay_baled
101
101
  ```
102
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`.
103
+ The check runs once the app has started, after every class in `app/subscribers` and in
104
+ the folders named in `subscriber_folders` is registered. A subscriber anywhere else
105
+ registers only once Rails has loaded its class, so keep subscribers in `app/subscribers`
106
+ or in a folder you name there.
107
+
108
+ ## Keeping subscribers in other folders
109
+
110
+ A host that keeps subscribers outside `app/subscribers` names those folders, relative to
111
+ the app's root:
112
+
113
+ ```ruby
114
+ # config/application.rb
115
+ config.event_engine_subscribers.subscriber_folders = ["hubs/*/app/subscribers"]
116
+ ```
117
+
118
+ Each entry is a folder or a pattern that matches several folders. The gem adds every
119
+ folder it matches to the app's eager load paths, then loads and registers its subscribers
120
+ when the app starts and again after each code reload, the same as `app/subscribers`. A
121
+ folder or pattern that matches nothing is skipped. It names no folders by default, so
122
+ only `app/subscribers` is loaded.
106
123
 
107
124
  ## Requiring a pack's events to run inline
108
125
 
@@ -7,6 +7,12 @@ module EventEngine
7
7
 
8
8
  config.event_engine_subscribers = ActiveSupport::OrderedOptions.new
9
9
  config.event_engine_subscribers.inline_packs = []
10
+ config.event_engine_subscribers.subscriber_folders = []
11
+
12
+ initializer "event_engine.subscribers.autoload_subscriber_folders", before: :set_autoload_paths do |app|
13
+ folders = Subscribers.folders_matching(app.root, app.config.event_engine_subscribers.subscriber_folders)
14
+ app.config.eager_load_paths += folders.map(&:to_s)
15
+ end
10
16
 
11
17
  initializer "event_engine.subscribers.register_processor" do
12
18
  config.after_initialize do
@@ -21,10 +27,14 @@ module EventEngine
21
27
  config.after_initialize { Subscribers.check!(Subscribers.routes) }
22
28
  end
23
29
 
24
- initializer "event_engine.subscribers.check_inline_packs", after: "event_engine.subscribers.register_processor" do |app|
25
- config.after_initialize do
26
- packs = app.config.event_engine_subscribers.inline_packs
27
- Subscribers.check_inline!(Subscribers.routes, packs: packs) if packs.any?
30
+ initializer "event_engine.subscribers.check_inline_packs" do |app|
31
+ config.to_prepare do
32
+ next if app.initialized?
33
+
34
+ app.config.after_initialize do
35
+ packs = app.config.event_engine_subscribers.inline_packs
36
+ Subscribers.check_inline!(Subscribers.routes, packs: packs) if packs.any?
37
+ end
28
38
  end
29
39
  end
30
40
 
@@ -36,6 +46,9 @@ module EventEngine
36
46
  config.to_prepare do
37
47
  subscribers = app.root.join("app/subscribers")
38
48
  Rails.autoloaders.main.eager_load_dir(subscribers) if subscribers.directory?
49
+ Subscribers.folders_matching(app.root, app.config.event_engine_subscribers.subscriber_folders).each do |folder|
50
+ Rails.autoloaders.main.eager_load_dir(folder)
51
+ end
39
52
  end
40
53
  end
41
54
  end
@@ -1,5 +1,5 @@
1
1
  module EventEngine
2
2
  module Subscribers
3
- VERSION = "0.4.0"
3
+ VERSION = "0.5.1"
4
4
  end
5
5
  end
@@ -34,6 +34,10 @@ module EventEngine
34
34
  true
35
35
  end
36
36
 
37
+ def self.folders_matching(root, patterns)
38
+ patterns.flat_map { |pattern| Dir[root.join(pattern).to_s] }.map { |folder| Pathname.new(folder) }.select(&:directory?)
39
+ end
40
+
37
41
  def self.pack_of(event_name) = EventEngine.schema_registry.latest_for(event_name).domain
38
42
  private_class_method :pack_of
39
43
  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.4.0
4
+ version: 0.5.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - tylercschneider