use_cases 1.1.0 → 1.1.1

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: 7bcffb088175f9ee545ae73905c1f3238839e7d3242501296b90349c821db0ed
4
- data.tar.gz: 91cec0de97c7a2f92738f8121cf502621f046742526972b1ae091df168dd4b07
3
+ metadata.gz: c61b0fc85c1ed9ffdee1bc0f03b6991a7fcd9b64bb502e5b6859e5e124865068
4
+ data.tar.gz: b99383f71920f2c376e2bb197e4a7be3140630b36dcd33b3169bc15582adc5ac
5
5
  SHA512:
6
- metadata.gz: d59c2125f78aea4cf498715b921628ad0c652488840ac6e79cc7b9b2fe33f804b2330eff0b5e9931c910c21f9de4393d055f3fd2fe45d61d6a484935ff7a2482
7
- data.tar.gz: 20576bb2c209513f5e169b7723bdbe445648ba0121ed36bae8a86a846b408a7a205b7f65f41a376ddcea0b44a163431a3a6e9aeef53a64fff94a848ec3a03114
6
+ metadata.gz: 93f9d4b5b4f7492ac49d142b51336b6837c3ad8ff54706a1fa363bd851bd6f7d366e6131bb5e8399ef32de8e38608c07f33c8794ab7cb5fd571e6450b8f866f6
7
+ data.tar.gz: ea72716e2909d65ec10904df231262ba6104cab8e564eb99129f1ba2adfaf2a43b1e93b5ab7c1285aa3e72f76d52b9440e65ce2c7a5a903ae191685f4bee3a39
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- use_cases (1.1.0)
4
+ use_cases (1.1.1)
5
5
  activesupport
6
6
  dry-events
7
7
  dry-matcher
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ module UseCases
4
+ module Events
5
+ class EventRegistry
6
+ def self.register(event_id)
7
+ event_ids << event_id
8
+ listener_name = ["on", event_id].join("_").gsub(".", "_")
9
+ UseCases.publisher.register_event(event_id)
10
+
11
+ UseCases.subscribers.each do |subscriber|
12
+ next if !subscriber.respond_to?(listener_name) || UseCases.publisher.subscribed?(subscriber.method(listener_name))
13
+
14
+ UseCases.publisher.subscribe(subscriber)
15
+ end
16
+ end
17
+
18
+ def self.event_ids
19
+ @event_ids ||= []
20
+ end
21
+ end
22
+ end
23
+ end
@@ -1,12 +1,14 @@
1
+ # frozen_string_literal: true
1
2
 
2
3
  return unless defined? ActiveJob
3
4
 
4
5
  module UseCases
5
6
  module Events
6
7
  class PublishJob < ActiveJob::Base
7
- def perform(publish_key, payload)
8
- publish_key += ".async"
9
- UseCases.publisher.publish(publish_key, payload)
8
+ def perform(event_id, payload)
9
+ event_id += ".async"
10
+ Events::EventRegistry.register(event_id)
11
+ UseCases.publisher.publish(event_id, payload)
10
12
  end
11
13
  end
12
14
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "dry/events/publisher"
2
4
 
3
5
  module UseCases
@@ -16,7 +18,7 @@ module UseCases
16
18
 
17
19
  def publish(event_name, payload)
18
20
  super
19
- PublishJob.perform_later(event_name, payload) if defined?(PublishJob)
21
+ PublishJob.perform_later(event_name, payload) if defined?(PublishJob) && !event_name.to_s.end_with?(".async")
20
22
  end
21
23
  end
22
24
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module UseCases
2
4
  module Events
3
5
  module Subscriber
@@ -6,8 +8,8 @@ module UseCases
6
8
  end
7
9
 
8
10
  def should_subscribe_to?(event_name)
9
- event_handler_name = "on_#{event_name.gsub('.', '_')}"
10
-
11
+ event_handler_name = "on_#{event_name.gsub(".", "_")}"
12
+
11
13
  respond_to?(event_handler_name.to_sym)
12
14
  end
13
15
  end
@@ -17,10 +17,10 @@ module UseCases
17
17
  failure: :unauthorized,
18
18
  failure_message: "Not Authorized",
19
19
  merge_input_as: :resource
20
- }
20
+ }.freeze
21
21
 
22
22
  def authorize(name, options = {})
23
- options = DEFAULT_OPTIONS.merge(options)
23
+ options = DEFAULT_OPTIONS.merge(options)
24
24
 
25
25
  check name, options
26
26
  end
@@ -3,6 +3,7 @@
3
3
  require "use_cases/events/publisher"
4
4
  require "use_cases/events/subscriber"
5
5
  require "use_cases/events/publish_job"
6
+ require "use_cases/events/event_registry"
6
7
 
7
8
  module UseCases
8
9
  module ModuleOptins
@@ -15,7 +16,10 @@ module UseCases
15
16
  module StepPatch
16
17
  def initialize(*)
17
18
  super
18
- finalize_subscriptions!
19
+ %w[success failure].map do |event_type|
20
+ event_id = [options[:publish], event_type].join(".")
21
+ Events::EventRegistry.register(event_id)
22
+ end
19
23
  end
20
24
 
21
25
  def call(*args)
@@ -33,26 +37,6 @@ module UseCases
33
37
  UseCases.publisher.publish(key, payload)
34
38
  end
35
39
 
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
54
- end
55
-
56
40
  private
57
41
 
58
42
  def extract_payload(step_result, args)
@@ -16,7 +16,7 @@ module UseCases
16
16
  validated: Validated,
17
17
  prepared: Prepared,
18
18
  publishing: Publishing
19
- }
19
+ }.freeze
20
20
 
21
21
  def [](*options)
22
22
  modules = [self]
@@ -29,7 +29,7 @@ RSpec::Matchers.define(:be_failure_with_payload) do |expected_result|
29
29
  else
30
30
  "the use case was expected to fail but it succeeded with #{test_subject.success.inspect}"
31
31
  end
32
- end
32
+ end
33
33
  end
34
34
 
35
35
  RSpec::Matchers.define(:be_failure_with) do |*expected_failure|
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module UseCases
4
- VERSION = "1.1.0"
4
+ VERSION = "1.1.1"
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: use_cases
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0
4
+ version: 1.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ring Twice
@@ -160,6 +160,7 @@ files:
160
160
  - lib/use_case.rb
161
161
  - lib/use_cases.rb
162
162
  - lib/use_cases/dsl.rb
163
+ - lib/use_cases/events/event_registry.rb
163
164
  - lib/use_cases/events/publish_job.rb
164
165
  - lib/use_cases/events/publisher.rb
165
166
  - lib/use_cases/events/subscriber.rb