event_engine-subscribers 0.4.0 → 0.5.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: 9911cefcbfa87b20178f615e68e88cef8f57da763ad42fcdf10a3f7f1b9d7be9
4
- data.tar.gz: 1aa83bfbbea17ba4b3d2555f08509545f487e94d38abc52409de1a97bfa52109
3
+ metadata.gz: eae67c45dcc6b8946ca569bbf90a1e9811b5c974a98ebdf27b1030aac9dfe948
4
+ data.tar.gz: 6fd89515d0fd50f6324a37f605343a2f63e347ce20400e6e166536c922125405
5
5
  SHA512:
6
- metadata.gz: 64e5c8652616821523641c4ffa5e17afb165e052847cde405c42f9ba2e852ed90a5c77add76ba3d6315e4fe230b97c280ff6213db5671c18a94e41757d957f82
7
- data.tar.gz: 6b420c78274b70abf4cda7d544074e692e400409dac035937204b2270a0a2605b9a3f63198d46b0c9201c49cd3406aab5a6d1f789de28defe4c69aaf4f6fd88c
6
+ metadata.gz: 4f0ac3aa8052389ef2b57646d586e07492346e9f1eb3a9abf4dcd5275687e4bebd11b4e023a5df14469971c32e6c74b32ddcde1ff494ff64331171efe3b294a8
7
+ data.tar.gz: 5567b5513c5524d4ab3c93a3db192def68a24ad5260805b8c2c3b861009f0c46d0cbffd257e6e6c7ee4fe4bdf84db318a2841c98db48f311bbce0e12df4749d9
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
@@ -36,6 +42,9 @@ module EventEngine
36
42
  config.to_prepare do
37
43
  subscribers = app.root.join("app/subscribers")
38
44
  Rails.autoloaders.main.eager_load_dir(subscribers) if subscribers.directory?
45
+ Subscribers.folders_matching(app.root, app.config.event_engine_subscribers.subscriber_folders).each do |folder|
46
+ Rails.autoloaders.main.eager_load_dir(folder)
47
+ end
39
48
  end
40
49
  end
41
50
  end
@@ -1,5 +1,5 @@
1
1
  module EventEngine
2
2
  module Subscribers
3
- VERSION = "0.4.0"
3
+ VERSION = "0.5.0"
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.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - tylercschneider