use_cases 1.0.12 → 1.1.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 +4 -4
- data/Gemfile.lock +3 -2
- data/lib/use_cases/events/event_registry.rb +23 -0
- data/lib/use_cases/events/publish_job.rb +5 -3
- data/lib/use_cases/events/publisher.rb +11 -36
- data/lib/use_cases/events/subscriber.rb +10 -6
- data/lib/use_cases/module_optins/authorized.rb +2 -2
- data/lib/use_cases/module_optins/publishing.rb +12 -3
- data/lib/use_cases/module_optins.rb +1 -1
- data/lib/use_cases/rspec/matchers.rb +1 -1
- 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
- data/use_cases.gemspec +1 -0
- metadata +20 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c61b0fc85c1ed9ffdee1bc0f03b6991a7fcd9b64bb502e5b6859e5e124865068
|
4
|
+
data.tar.gz: b99383f71920f2c376e2bb197e4a7be3140630b36dcd33b3169bc15582adc5ac
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 93f9d4b5b4f7492ac49d142b51336b6837c3ad8ff54706a1fa363bd851bd6f7d366e6131bb5e8399ef32de8e38608c07f33c8794ab7cb5fd571e6450b8f866f6
|
7
|
+
data.tar.gz: ea72716e2909d65ec10904df231262ba6104cab8e564eb99129f1ba2adfaf2a43b1e93b5ab7c1285aa3e72f76d52b9440e65ce2c7a5a903ae191685f4bee3a39
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
use_cases (1.
|
4
|
+
use_cases (1.1.1)
|
5
5
|
activesupport
|
6
6
|
dry-events
|
7
7
|
dry-matcher
|
@@ -110,6 +110,7 @@ GEM
|
|
110
110
|
|
111
111
|
PLATFORMS
|
112
112
|
x86_64-darwin-20
|
113
|
+
x86_64-darwin-21
|
113
114
|
x86_64-linux
|
114
115
|
|
115
116
|
DEPENDENCIES
|
@@ -126,4 +127,4 @@ DEPENDENCIES
|
|
126
127
|
use_cases!
|
127
128
|
|
128
129
|
BUNDLED WITH
|
129
|
-
2.2.
|
130
|
+
2.2.32
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module UseCases
|
4
|
+
module Events
|
5
|
+
class EventRegistry
|
6
|
+
def self.register(event_id)
|
7
|
+
event_ids << event_id
|
8
|
+
listener_name = ["on", event_id].join("_").gsub(".", "_")
|
9
|
+
UseCases.publisher.register_event(event_id)
|
10
|
+
|
11
|
+
UseCases.subscribers.each do |subscriber|
|
12
|
+
next if !subscriber.respond_to?(listener_name) || UseCases.publisher.subscribed?(subscriber.method(listener_name))
|
13
|
+
|
14
|
+
UseCases.publisher.subscribe(subscriber)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def self.event_ids
|
19
|
+
@event_ids ||= []
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -1,12 +1,14 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
|
2
3
|
return unless defined? ActiveJob
|
3
4
|
|
4
5
|
module UseCases
|
5
6
|
module Events
|
6
7
|
class PublishJob < ActiveJob::Base
|
7
|
-
def perform(
|
8
|
-
|
9
|
-
|
8
|
+
def perform(event_id, payload)
|
9
|
+
event_id += ".async"
|
10
|
+
Events::EventRegistry.register(event_id)
|
11
|
+
UseCases.publisher.publish(event_id, payload)
|
10
12
|
end
|
11
13
|
end
|
12
14
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require "dry/events/publisher"
|
2
4
|
|
3
5
|
module UseCases
|
@@ -5,45 +7,18 @@ module UseCases
|
|
5
7
|
class Publisher
|
6
8
|
include Dry::Events::Publisher[:use_cases]
|
7
9
|
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
end
|
15
|
-
|
16
|
-
return unless defined? UseCases::Events::PublishJob
|
17
|
-
|
18
|
-
UseCases::Events::PublishJob.perform_later(event_name, payload)
|
19
|
-
end
|
20
|
-
|
21
|
-
def self.extract_payload(use_case_args)
|
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
|
33
|
-
end
|
34
|
-
|
35
|
-
def subscribe_to_event(event_name)
|
36
|
-
subscribers_for(event_name).each(&method(:subscribe))
|
37
|
-
end
|
38
|
-
|
39
|
-
def subscribers_for(event_name)
|
40
|
-
available_subscribers.select do |subscriber|
|
41
|
-
subscriber.subscribed_to?(event_name)
|
10
|
+
# This is a hack waiting for this https://github.com/dry-rb/dry-events/pull/15 to be merged
|
11
|
+
def subscribed?(listener)
|
12
|
+
__bus__.listeners.values.any? do |value|
|
13
|
+
value.any? do |block, _|
|
14
|
+
block.owner == listener.owner && block.name == listener.name
|
15
|
+
end
|
42
16
|
end
|
43
17
|
end
|
44
18
|
|
45
|
-
def
|
46
|
-
|
19
|
+
def publish(event_name, payload)
|
20
|
+
super
|
21
|
+
PublishJob.perform_later(event_name, payload) if defined?(PublishJob) && !event_name.to_s.end_with?(".async")
|
47
22
|
end
|
48
23
|
end
|
49
24
|
end
|
@@ -1,12 +1,16 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
2
|
|
3
3
|
module UseCases
|
4
4
|
module Events
|
5
|
-
|
6
|
-
def
|
7
|
-
|
8
|
-
|
9
|
-
|
5
|
+
module Subscriber
|
6
|
+
def self.included(base)
|
7
|
+
UseCases.subscribers << base.new
|
8
|
+
end
|
9
|
+
|
10
|
+
def should_subscribe_to?(event_name)
|
11
|
+
event_handler_name = "on_#{event_name.gsub(".", "_")}"
|
12
|
+
|
13
|
+
respond_to?(event_handler_name.to_sym)
|
10
14
|
end
|
11
15
|
end
|
12
16
|
end
|
@@ -17,10 +17,10 @@ module UseCases
|
|
17
17
|
failure: :unauthorized,
|
18
18
|
failure_message: "Not Authorized",
|
19
19
|
merge_input_as: :resource
|
20
|
-
}
|
20
|
+
}.freeze
|
21
21
|
|
22
22
|
def authorize(name, options = {})
|
23
|
-
options = DEFAULT_OPTIONS.merge(options)
|
23
|
+
options = DEFAULT_OPTIONS.merge(options)
|
24
24
|
|
25
25
|
check name, options
|
26
26
|
end
|
@@ -3,16 +3,25 @@
|
|
3
3
|
require "use_cases/events/publisher"
|
4
4
|
require "use_cases/events/subscriber"
|
5
5
|
require "use_cases/events/publish_job"
|
6
|
+
require "use_cases/events/event_registry"
|
6
7
|
|
7
8
|
module UseCases
|
8
9
|
module ModuleOptins
|
9
10
|
module Publishing
|
10
11
|
def self.included(base)
|
11
12
|
super
|
12
|
-
StepAdapters::Abstract.prepend
|
13
|
+
StepAdapters::Abstract.prepend StepPatch
|
13
14
|
end
|
14
15
|
|
15
|
-
module
|
16
|
+
module StepPatch
|
17
|
+
def initialize(*)
|
18
|
+
super
|
19
|
+
%w[success failure].map do |event_type|
|
20
|
+
event_id = [options[:publish], event_type].join(".")
|
21
|
+
Events::EventRegistry.register(event_id)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
16
25
|
def call(*args)
|
17
26
|
super(*args).tap do |result|
|
18
27
|
publish_step_result(result, args)
|
@@ -25,7 +34,7 @@ module UseCases
|
|
25
34
|
key = extract_event_key(step_result)
|
26
35
|
payload = extract_payload(step_result, args)
|
27
36
|
|
28
|
-
UseCases.publisher.
|
37
|
+
UseCases.publisher.publish(key, payload)
|
29
38
|
end
|
30
39
|
|
31
40
|
private
|
@@ -29,7 +29,7 @@ RSpec::Matchers.define(:be_failure_with_payload) do |expected_result|
|
|
29
29
|
else
|
30
30
|
"the use case was expected to fail but it succeeded with #{test_subject.success.inspect}"
|
31
31
|
end
|
32
|
-
end
|
32
|
+
end
|
33
33
|
end
|
34
34
|
|
35
35
|
RSpec::Matchers.define(:be_failure_with) do |*expected_failure|
|
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
|
data/use_cases.gemspec
CHANGED
@@ -36,6 +36,7 @@ Gem::Specification.new do |spec|
|
|
36
36
|
spec.add_dependency "dry-monads"
|
37
37
|
spec.add_dependency "dry-validation"
|
38
38
|
|
39
|
+
spec.add_development_dependency "byebug"
|
39
40
|
spec.add_development_dependency "rake"
|
40
41
|
spec.add_development_dependency "rspec"
|
41
42
|
spec.add_development_dependency "rubocop"
|
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.
|
4
|
+
version: 1.1.1
|
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-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -80,6 +80,20 @@ dependencies:
|
|
80
80
|
- - ">="
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: byebug
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
83
97
|
- !ruby/object:Gem::Dependency
|
84
98
|
name: rake
|
85
99
|
requirement: !ruby/object:Gem::Requirement
|
@@ -146,6 +160,7 @@ files:
|
|
146
160
|
- lib/use_case.rb
|
147
161
|
- lib/use_cases.rb
|
148
162
|
- lib/use_cases/dsl.rb
|
163
|
+
- lib/use_cases/events/event_registry.rb
|
149
164
|
- lib/use_cases/events/publish_job.rb
|
150
165
|
- lib/use_cases/events/publisher.rb
|
151
166
|
- lib/use_cases/events/subscriber.rb
|
@@ -178,7 +193,7 @@ metadata:
|
|
178
193
|
homepage_uri: https://github.com/listminut/use_cases
|
179
194
|
source_code_uri: https://github.com/listminut/use_cases
|
180
195
|
changelog_uri: https://github.com/listminut/use_cases/CHANGELOG.md
|
181
|
-
post_install_message:
|
196
|
+
post_install_message:
|
182
197
|
rdoc_options: []
|
183
198
|
require_paths:
|
184
199
|
- lib
|
@@ -194,7 +209,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
194
209
|
version: '0'
|
195
210
|
requirements: []
|
196
211
|
rubygems_version: 3.1.6
|
197
|
-
signing_key:
|
212
|
+
signing_key:
|
198
213
|
specification_version: 4
|
199
214
|
summary: Use Cases
|
200
215
|
test_files: []
|