use_cases 1.0.11 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
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: []