use_cases 1.0.14 → 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: 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