use_cases 1.0.14 → 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: b84488a184d56b5fe1b8004f2e6d25d8f154e8b80ed53f8760f4e11e5982941e
4
- data.tar.gz: 50dda6b47dab05b90411716a7a9e4c711fd4d576a536052aadbc7e754fd7236b
3
+ metadata.gz: 7bcffb088175f9ee545ae73905c1f3238839e7d3242501296b90349c821db0ed
4
+ data.tar.gz: 91cec0de97c7a2f92738f8121cf502621f046742526972b1ae091df168dd4b07
5
5
  SHA512:
6
- metadata.gz: 578d00c24ac18937195f5b202f7bb1e7d3b1973f6fdcc6468043ea514d84b404883dfaa6ed5156617d8aed104cd8554cca7f6b30b48528f454c0fe8f82730e80
7
- data.tar.gz: 3df0f08a78ba070b85a7e68eb6a91b51d0bc3da69490d9601b0fc3ad3532fbdf17c9a817384b63eafd7d117667bc75e7fa558d2920e79120059324fa76765688
6
+ metadata.gz: d59c2125f78aea4cf498715b921628ad0c652488840ac6e79cc7b9b2fe33f804b2330eff0b5e9931c910c21f9de4393d055f3fd2fe45d61d6a484935ff7a2482
7
+ data.tar.gz: 20576bb2c209513f5e169b7723bdbe445648ba0121ed36bae8a86a846b408a7a205b7f65f41a376ddcea0b44a163431a3a6e9aeef53a64fff94a848ec3a03114
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- use_cases (1.0.12)
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.28
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.subscribe_and_publish_event(publish_key, payload)
9
+ UseCases.publisher.publish(publish_key, payload)
10
10
  end
11
11
  end
12
12
  end
@@ -5,46 +5,18 @@ module UseCases
5
5
  class Publisher
6
6
  include Dry::Events::Publisher[:use_cases]
7
7
 
8
- def subscribe_and_publish_event(event_name, payload)
9
- subscribe_to_event(event_name)
10
- publish(event_name, payload)
11
- end
12
-
13
- private
14
-
15
- def publish_async(event_name, payload)
16
- UseCases::Events::PublishJob.perform_later(event_name, payload)
17
- end
18
-
19
- def event_should_be_published_asynchronously?(event_name)
20
- defined? UseCases::Events::PublishJob && !event_name.end_with?(".async")
21
- end
22
-
23
- def subscribe_to_event(event_name)
24
- subscribers_for(event_name).each(&method(:subscribe))
25
- end
26
-
27
- def subscribers_for(event_name)
28
- available_subscribers.select do |subscriber|
29
- subscriber.should_subscribe_to?(event_name) && !subscribed?(subscriber)
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
30
14
  end
31
15
  end
32
16
 
33
- def subscribe(listener)
34
- subcribers << listener
17
+ def publish(event_name, payload)
35
18
  super
36
- end
37
-
38
- def subscribed?(listener)
39
- subcribers.include?(listener)
40
- end
41
-
42
- def subcribers
43
- @subcribers ||= []
44
- end
45
-
46
- def available_subscribers
47
- UseCases.subscribers
19
+ PublishJob.perform_later(event_name, payload) if defined?(PublishJob)
48
20
  end
49
21
  end
50
22
  end
@@ -13,27 +13,9 @@ module UseCases
13
13
  end
14
14
 
15
15
  module StepPatch
16
- def initialize(*args)
16
+ def initialize(*)
17
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
- ]
18
+ finalize_subscriptions!
37
19
  end
38
20
 
39
21
  def call(*args)
@@ -48,7 +30,27 @@ module UseCases
48
30
  key = extract_event_key(step_result)
49
31
  payload = extract_payload(step_result, args)
50
32
 
51
- UseCases.publisher.subscribe_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
52
54
  end
53
55
 
54
56
  private
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module UseCases
4
- VERSION = "1.0.14"
4
+ VERSION = "1.1.0"
5
5
  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.14
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ring Twice
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-02-08 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