use_cases 1.0.12 → 1.0.13
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/lib/use_cases/events/publish_job.rb +1 -1
- data/lib/use_cases/events/publisher.rb +24 -22
- data/lib/use_cases/events/subscriber.rb +7 -5
- data/lib/use_cases/module_optins/publishing.rb +26 -3
- data/lib/use_cases/step_adapters/abstract.rb +2 -2
- data/lib/use_cases/version.rb +1 -1
- data/lib/use_cases.rb +1 -1
- metadata +5 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3cec89e8a4f4ecdabae86c99156447d8b39ffd5de5e918130b21ccae18f045a7
|
4
|
+
data.tar.gz: e36cd9587aab933815775ee1181360ccea4a24e58e82c3a4a073a99bb565ff31
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fdaa3ea0104e5bb38190c5c65f59e44569d38b08f0f4174e1c82f5f3b6f0698900a7001463dc3215007a2af2f4030616cc038ae2f2c78aba388b2cab90c520ad
|
7
|
+
data.tar.gz: 0c9663e589c521677529bb5b8a4cbe87c4c3591c82dfbc30ea9248b215c53f16c915f4a37dd3683f22b8dc7698f20e46e7cc8dfe20c5390ae9daaf418ee8e26d
|
@@ -6,7 +6,7 @@ module UseCases
|
|
6
6
|
class PublishJob < ActiveJob::Base
|
7
7
|
def perform(publish_key, payload)
|
8
8
|
publish_key += ".async"
|
9
|
-
UseCases.publisher.
|
9
|
+
UseCases.publisher.subscribe_and_publish_event(publish_key, payload)
|
10
10
|
end
|
11
11
|
end
|
12
12
|
end
|
@@ -5,31 +5,20 @@ module UseCases
|
|
5
5
|
class Publisher
|
6
6
|
include Dry::Events::Publisher[:use_cases]
|
7
7
|
|
8
|
-
def
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
publisher.publish(event_name, payload)
|
14
|
-
end
|
8
|
+
def subscribe_and_publish_event(event_name, payload)
|
9
|
+
subscribe_to_event(event_name)
|
10
|
+
publish(event_name, payload)
|
11
|
+
publish_async(event_name, payload) if event_should_be_published_asynchronously?(event_name)
|
12
|
+
end
|
15
13
|
|
16
|
-
|
14
|
+
private
|
17
15
|
|
16
|
+
def publish_async(event_name, payload)
|
18
17
|
UseCases::Events::PublishJob.perform_later(event_name, payload)
|
19
18
|
end
|
20
19
|
|
21
|
-
def
|
22
|
-
|
23
|
-
return_value: use_case_args[0],
|
24
|
-
params: use_case_args[1],
|
25
|
-
current_user: use_case_args[2]
|
26
|
-
}
|
27
|
-
end
|
28
|
-
|
29
|
-
def self.register_events(event_name)
|
30
|
-
[event_name, "#{event_name}.aync"].each do |key|
|
31
|
-
register_event(key) unless events[key]
|
32
|
-
end
|
20
|
+
def event_should_be_published_asynchronously?(event_name)
|
21
|
+
defined? UseCases::Events::PublishJob && !event_name.end_with?(".async")
|
33
22
|
end
|
34
23
|
|
35
24
|
def subscribe_to_event(event_name)
|
@@ -38,12 +27,25 @@ module UseCases
|
|
38
27
|
|
39
28
|
def subscribers_for(event_name)
|
40
29
|
available_subscribers.select do |subscriber|
|
41
|
-
subscriber.
|
30
|
+
subscriber.should_subscribe_to?(event_name) && !subscribed?(subscriber)
|
42
31
|
end
|
43
32
|
end
|
44
33
|
|
34
|
+
def subscribe(listener)
|
35
|
+
subcribers << listener
|
36
|
+
super
|
37
|
+
end
|
38
|
+
|
39
|
+
def subscribed?(listener)
|
40
|
+
subcribers.include?(listener)
|
41
|
+
end
|
42
|
+
|
43
|
+
def subcribers
|
44
|
+
@subcribers ||= []
|
45
|
+
end
|
46
|
+
|
45
47
|
def available_subscribers
|
46
|
-
UseCases
|
48
|
+
UseCases.subscribers
|
47
49
|
end
|
48
50
|
end
|
49
51
|
end
|
@@ -1,12 +1,14 @@
|
|
1
|
-
require "active_support/core_ext/class/subclasses"
|
2
|
-
|
3
1
|
module UseCases
|
4
2
|
module Events
|
5
|
-
|
6
|
-
def
|
3
|
+
module Subscriber
|
4
|
+
def self.included(base)
|
5
|
+
UseCases.subscribers << base.new
|
6
|
+
end
|
7
|
+
|
8
|
+
def should_subscribe_to?(event_name)
|
7
9
|
event_handler_name = "on_#{event_name.gsub('.', '_')}"
|
8
10
|
|
9
|
-
respond_to?(event_handler_name)
|
11
|
+
respond_to?(event_handler_name.to_sym)
|
10
12
|
end
|
11
13
|
end
|
12
14
|
end
|
@@ -9,10 +9,33 @@ module UseCases
|
|
9
9
|
module Publishing
|
10
10
|
def self.included(base)
|
11
11
|
super
|
12
|
-
StepAdapters::Abstract.prepend
|
12
|
+
StepAdapters::Abstract.prepend StepPatch
|
13
13
|
end
|
14
14
|
|
15
|
-
module
|
15
|
+
module StepPatch
|
16
|
+
def initialize(*args)
|
17
|
+
super
|
18
|
+
return unless options[:publish] && UseCases.publisher
|
19
|
+
|
20
|
+
register_events
|
21
|
+
end
|
22
|
+
|
23
|
+
def register_events
|
24
|
+
event_names.each do |event_name|
|
25
|
+
next if UseCases.publisher.class.events[event_name]
|
26
|
+
|
27
|
+
UseCases.publisher.class.register_event(event_name)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def event_names
|
32
|
+
event_name = options[:publish]
|
33
|
+
[
|
34
|
+
"#{event_name}.success", "#{event_name}.failure",
|
35
|
+
"#{event_name}.success.async", "#{event_name}.failure.async"
|
36
|
+
]
|
37
|
+
end
|
38
|
+
|
16
39
|
def call(*args)
|
17
40
|
super(*args).tap do |result|
|
18
41
|
publish_step_result(result, args)
|
@@ -25,7 +48,7 @@ module UseCases
|
|
25
48
|
key = extract_event_key(step_result)
|
26
49
|
payload = extract_payload(step_result, args)
|
27
50
|
|
28
|
-
UseCases.publisher.
|
51
|
+
UseCases.publisher.subscribe_and_publish_event(key, payload)
|
29
52
|
end
|
30
53
|
|
31
54
|
private
|
data/lib/use_cases/version.rb
CHANGED
data/lib/use_cases.rb
CHANGED
@@ -15,6 +15,6 @@ module UseCases
|
|
15
15
|
extend Dry::Configurable
|
16
16
|
|
17
17
|
setting :container, reader: true
|
18
|
-
setting :publisher, default: ::UseCases::Events::Publisher, reader: true
|
18
|
+
setting :publisher, default: ::UseCases::Events::Publisher.new, reader: true
|
19
19
|
setting :subscribers, default: [], reader: true
|
20
20
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: use_cases
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.13
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ring Twice
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-
|
11
|
+
date: 2022-02-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -178,7 +178,7 @@ metadata:
|
|
178
178
|
homepage_uri: https://github.com/listminut/use_cases
|
179
179
|
source_code_uri: https://github.com/listminut/use_cases
|
180
180
|
changelog_uri: https://github.com/listminut/use_cases/CHANGELOG.md
|
181
|
-
post_install_message:
|
181
|
+
post_install_message:
|
182
182
|
rdoc_options: []
|
183
183
|
require_paths:
|
184
184
|
- lib
|
@@ -194,7 +194,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
194
194
|
version: '0'
|
195
195
|
requirements: []
|
196
196
|
rubygems_version: 3.1.6
|
197
|
-
signing_key:
|
197
|
+
signing_key:
|
198
198
|
specification_version: 4
|
199
199
|
summary: Use Cases
|
200
200
|
test_files: []
|