use_cases 1.0.11 → 1.1.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: 2f810a00826d0e18fb1defbddb6a54055f4b77b43141a943d48d8a56273b7bf9
4
- data.tar.gz: b6f1724c28186e1e8f4ca3b0b79807d4db534903b5f0ee5ace23363b180b8fc2
3
+ metadata.gz: 7bcffb088175f9ee545ae73905c1f3238839e7d3242501296b90349c821db0ed
4
+ data.tar.gz: 91cec0de97c7a2f92738f8121cf502621f046742526972b1ae091df168dd4b07
5
5
  SHA512:
6
- metadata.gz: 8973b6cc8d4b89d16af39f010af3a8bf8cd9aea88f9c5c3679356955fc566ee1596711eed422beb9bd928364645640689ec03efd4e8cde11ec7b9d5c3e5c1357
7
- data.tar.gz: b7c595a0645bf0b8938aa09f99d9fe8167b34c0ca6d9c6e9dfa4ed652a9c8341dfcf216fe70c222ad2321fb094f4667417a6bf1efb7cc1c8c2f2b79b8fe5c0a4
6
+ metadata.gz: d59c2125f78aea4cf498715b921628ad0c652488840ac6e79cc7b9b2fe33f804b2330eff0b5e9931c910c21f9de4393d055f3fd2fe45d61d6a484935ff7a2482
7
+ data.tar.gz: 20576bb2c209513f5e169b7723bdbe445648ba0121ed36bae8a86a846b408a7a205b7f65f41a376ddcea0b44a163431a3a6e9aeef53a64fff94a848ec3a03114
data/CHANGELOG.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  ## [1.0.1] - 2021-12-19
4
4
 
5
- - Async published events are now suffixed by `".aync"`
5
+ - Async published events are now suffixed by `".async"`
6
6
 
7
7
  ## [1.0.0] - 2021-12-19
8
8
 
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- use_cases (1.0.10)
4
+ use_cases (1.1.0)
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.25
130
+ 2.2.32
@@ -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.register_and_publish_event(publish_key, payload)
9
+ UseCases.publisher.publish(publish_key, payload)
10
10
  end
11
11
  end
12
12
  end
@@ -5,45 +5,18 @@ module UseCases
5
5
  class Publisher
6
6
  include Dry::Events::Publisher[:use_cases]
7
7
 
8
- def self.register_and_publish_event(event_name, payload)
9
- register_events(event_name)
10
-
11
- new.tap do |publisher|
12
- publisher.subscribe_to_event(event_name)
13
- publisher.publish(event_name, payload)
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)
8
+ # This is a hack waiting for this https://github.com/dry-rb/dry-events/pull/15 to be merged
9
+ def subscribed?(listener)
10
+ __bus__.listeners.values.any? do |value|
11
+ value.any? do |block, _|
12
+ block.owner == listener.owner && block.name == listener.name
13
+ end
42
14
  end
43
15
  end
44
16
 
45
- def available_subscribers
46
- UseCases::Events::Subscriber.descendants.map(&:new) + UseCases.subscribers
17
+ def publish(event_name, payload)
18
+ super
19
+ PublishJob.perform_later(event_name, payload) if defined?(PublishJob)
47
20
  end
48
21
  end
49
22
  end
@@ -1,12 +1,14 @@
1
- require "active_support/core_ext/class/subclasses"
2
-
3
1
  module UseCases
4
2
  module Events
5
- class Subscriber
6
- def subscribed_to?(event_name)
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,15 @@ module UseCases
9
9
  module Publishing
10
10
  def self.included(base)
11
11
  super
12
- StepAdapters::Abstract.prepend StepCallPatch
12
+ StepAdapters::Abstract.prepend StepPatch
13
13
  end
14
14
 
15
- module StepCallPatch
15
+ module StepPatch
16
+ def initialize(*)
17
+ super
18
+ finalize_subscriptions!
19
+ end
20
+
16
21
  def call(*args)
17
22
  super(*args).tap do |result|
18
23
  publish_step_result(result, args)
@@ -25,7 +30,27 @@ module UseCases
25
30
  key = extract_event_key(step_result)
26
31
  payload = extract_payload(step_result, args)
27
32
 
28
- UseCases.publisher.register_and_publish_event(key, payload)
33
+ UseCases.publisher.publish(key, payload)
34
+ end
35
+
36
+
37
+ def finalize_subscriptions!
38
+ event_ids.each do |event_id|
39
+ listener_name = ['on', event_id].join('_').gsub('.', '_')
40
+ UseCases.publisher.register_event(event_id)
41
+
42
+ UseCases.subscribers.each do |subscriber|
43
+ next if !subscriber.respond_to?(listener_name) || UseCases.publisher.subscribed?(subscriber.method(listener_name))
44
+
45
+ UseCases.publisher.subscribe(subscriber)
46
+ end
47
+ end
48
+ end
49
+
50
+ def event_ids
51
+ %w[success failure success.async failure.async].map do |event_type|
52
+ [options[:publish], event_type].join('.')
53
+ end
29
54
  end
30
55
 
31
56
  private
@@ -85,11 +85,11 @@ module UseCases
85
85
  end
86
86
 
87
87
  def external?
88
- with_option.present?
88
+ !with_option.nil?
89
89
  end
90
90
 
91
91
  def selects_external_args?
92
- pass_option.present?
92
+ !pass_option.nil?
93
93
  end
94
94
 
95
95
  def callable_args_count
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module UseCases
4
- VERSION = "1.0.11"
4
+ VERSION = "1.1.0"
5
5
  end
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, ::UseCases::Events::Publisher, reader: true
19
- setting :subscribers, [], reader: true
18
+ setting :publisher, default: ::UseCases::Events::Publisher.new, reader: true
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.0.11
4
+ version: 1.1.0
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-01-29 00:00:00.000000000 Z
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
@@ -178,7 +192,7 @@ metadata:
178
192
  homepage_uri: https://github.com/listminut/use_cases
179
193
  source_code_uri: https://github.com/listminut/use_cases
180
194
  changelog_uri: https://github.com/listminut/use_cases/CHANGELOG.md
181
- post_install_message:
195
+ post_install_message:
182
196
  rdoc_options: []
183
197
  require_paths:
184
198
  - lib
@@ -193,8 +207,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
193
207
  - !ruby/object:Gem::Version
194
208
  version: '0'
195
209
  requirements: []
196
- rubygems_version: 3.0.3.1
197
- signing_key:
210
+ rubygems_version: 3.1.6
211
+ signing_key:
198
212
  specification_version: 4
199
213
  summary: Use Cases
200
214
  test_files: []