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 +4 -4
- data/README.md +20 -3
- data/lib/event_engine/subscribers/engine.rb +9 -0
- data/lib/event_engine/subscribers/version.rb +1 -1
- data/lib/event_engine/subscribers.rb +4 -0
- metadata +1 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: eae67c45dcc6b8946ca569bbf90a1e9811b5c974a98ebdf27b1030aac9dfe948
|
|
4
|
+
data.tar.gz: 6fd89515d0fd50f6324a37f605343a2f63e347ce20400e6e166536c922125405
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
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`
|
|
104
|
-
registered. A subscriber anywhere else
|
|
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
|
|
@@ -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
|