use_cases 1.1.0 → 1.1.1

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: 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