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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e41f6c5b8670e047cafdd85d068a66aa0efac27700f2c179d5d893ee1593c466
4
- data.tar.gz: 629cef02e18325528d6155a34356b80e48acaf31520ef45fddb4937e058c3ad2
3
+ metadata.gz: 3cec89e8a4f4ecdabae86c99156447d8b39ffd5de5e918130b21ccae18f045a7
4
+ data.tar.gz: e36cd9587aab933815775ee1181360ccea4a24e58e82c3a4a073a99bb565ff31
5
5
  SHA512:
6
- metadata.gz: 2b5fdb9fd7bd52211b9194abd49fa2247b9b814e26f763f25f0c9f3ee995dff527977a19e7192576565a563af19dbf3cfeccae833fbd74f4fba74fa4589f46a3
7
- data.tar.gz: 7d51d14db15b08764a1bbf3dc6ccede0806085e532e42273e436f1c91029f911282c3da31495b978a7dc87d5ba569fa33bc077b1b15673d7df795c9bf53ed781
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.register_and_publish_event(publish_key, payload)
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 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
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
- return unless defined? UseCases::Events::PublishJob
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 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
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.subscribed_to?(event_name)
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::Events::Subscriber.descendants.map(&:new) + UseCases.subscribers
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
- 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,33 @@ 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(*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.register_and_publish_event(key, payload)
51
+ UseCases.publisher.subscribe_and_publish_event(key, payload)
29
52
  end
30
53
 
31
54
  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.12"
4
+ VERSION = "1.0.13"
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, 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.12
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-01-31 00:00:00.000000000 Z
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: []