pubsub_on_rails 0.0.3 → 0.0.4

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: ca61dfe4442efd1defd880b3db9de0c449c5b55c10cf2c045ff2be3a59e58692
4
- data.tar.gz: 57e6ddb3263960b29ae6e0da06a9c2eca09bd9234f3792c1f89c285bd193ebc6
3
+ metadata.gz: 7f285a8be979c22d37fc46060646ae68ff3b9176bc5e43fb5c3265d7b9a2eb6e
4
+ data.tar.gz: deae0a2842990fc94f1bca1c0165316f276cff5857c20ddf5b85a8a26f6ae7b3
5
5
  SHA512:
6
- metadata.gz: b6966821349c3d927111032e33fcfabc23e7521403580e31a696a37871149c697e7de9e5bcbda3e97c21353f9665184a06223e76c03e0ad649bf5cf04e77ba52
7
- data.tar.gz: 4673474d93f0254c2f5322edb3a415a69b5bda884c07a4247e47af64929bf8bff3ffb063c4bab92f115148c94f6afc74068456499bb1f42e48e6ccbaccdac953
6
+ metadata.gz: dbdf45be04159ac6a2ccb604b08882b3b59a7a59780a780dac362c2b6b4ad4c2ace158a363c12d5866db7cb9c430110ee580bcc1cb3fe6ab31109a6bb3d01076
7
+ data.tar.gz: 6ff6fb18052b6121aeb0b18e48a4d67eb972e8dd79b16263e78b4e914adacfe9c6920ccad5260432ba80cae61e64e51ccf217683de63e7bf6273b360312b401d
data/README.md CHANGED
@@ -436,3 +436,4 @@ Ordering::OrderCreatedEvent.new(order_id: 1, total_amount: 25, line_items: []).b
436
436
  # TODO
437
437
 
438
438
  - Dynamic event classes
439
+ - TYPES declaration
@@ -2,7 +2,9 @@ module PubSub
2
2
  module Domain
3
3
  def method_missing(event_or_method_name, *event_data)
4
4
  if handler_name(event_or_method_name)
5
- const_get(handler_name(event_or_method_name)).new(*event_data).call!
5
+ event_payload = event_data.extract_options!
6
+ EventTrace.load_from(event_payload.delete(:event_uid))
7
+ const_get(handler_name(event_or_method_name)).new(event_payload).call!
6
8
  else
7
9
  super
8
10
  end
@@ -1,15 +1,28 @@
1
+ require 'pub_sub/pure_event'
2
+
1
3
  module PubSub
2
- class DomainEvent < Dry::Struct
3
- include Wisper::Publisher
4
+ class DomainEvent < PureEvent
5
+ attribute :event_trace_id, Types::Strict::String.default {
6
+ EventTrace.trace_id ||= SecureRandom.hex(8)
7
+ }
8
+ attribute :event_id, Types::Strict::String.default {
9
+ SecureRandom.hex(8)
10
+ }
11
+ attribute :trigger_id, Types::Strict::String.default {
12
+ EventTrace.last_event_id || 'ORIGIN'
13
+ }
4
14
 
5
- def broadcast!
6
- broadcast(event_name, attributes)
15
+ def initialize(*args)
16
+ super(*args)
17
+ EventTrace.last_event_id = event_id
7
18
  end
8
19
 
9
20
  private
10
21
 
11
- def event_name
12
- self.class.name.underscore.sub('/', '__').chomp('_event')
22
+ def attributes_to_broadcast
23
+ super.
24
+ except(:event_trace_id, :event_id, :trigger_id).
25
+ merge(event_uid: "#{event_trace_id}-#{trigger_id}-#{event_id}")
13
26
  end
14
27
  end
15
28
  end
@@ -0,0 +1,5 @@
1
+ require 'dry-struct'
2
+
3
+ module Types
4
+ include Dry::Types.module
5
+ end
@@ -0,0 +1,18 @@
1
+ module PubSub
2
+ class EventTrace < ActiveSupport::CurrentAttributes
3
+ EVENT_TRACE_UID_REGEX = /^(?<trace_id>\w+)-(?<trigger_id>\w+)-(?<event_id>\w+)$/
4
+ private_constant :EVENT_TRACE_UID_REGEX
5
+
6
+ attribute :trace_id
7
+ attribute :last_event_id
8
+
9
+ def self.load_from(event_trace_uid)
10
+ match_data = event_trace_uid.match(EVENT_TRACE_UID_REGEX)
11
+
12
+ if match_data
13
+ self.trace_id = match_data['trace_id']
14
+ self.last_event_id = match_data['event_id']
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,19 @@
1
+ module PubSub
2
+ class PureEvent < Dry::Struct
3
+ include Wisper::Publisher
4
+
5
+ def broadcast!
6
+ broadcast(event_name, attributes_to_broadcast)
7
+ end
8
+
9
+ private
10
+
11
+ def attributes_to_broadcast
12
+ attributes
13
+ end
14
+
15
+ def event_name
16
+ self.class.name.underscore.sub('/', '__').chomp('_event')
17
+ end
18
+ end
19
+ end
@@ -1,3 +1,3 @@
1
1
  module PubSub
2
- VERSION = '0.0.3'
2
+ VERSION = '0.0.4'
3
3
  end
@@ -1,9 +1,11 @@
1
1
  require 'wisper'
2
2
  require 'wisper/sidekiq'
3
3
 
4
+ require 'pub_sub/dry'
4
5
  require 'pub_sub'
5
6
  require 'pub_sub/emit'
6
7
  require 'pub_sub/subscriptions'
8
+ require 'pub_sub/event_trace'
7
9
  require 'pub_sub/domain'
8
10
  require 'pub_sub/domain_event'
9
11
  require 'pub_sub/domain_event_handler'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pubsub_on_rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Stevo
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-05-07 00:00:00.000000000 Z
11
+ date: 2019-05-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: dry-struct
@@ -81,11 +81,14 @@ files:
81
81
  - lib/pub_sub/domain.rb
82
82
  - lib/pub_sub/domain_event.rb
83
83
  - lib/pub_sub/domain_event_handler.rb
84
+ - lib/pub_sub/dry.rb
84
85
  - lib/pub_sub/emit.rb
85
86
  - lib/pub_sub/event_class_factory.rb
86
87
  - lib/pub_sub/event_emission.rb
88
+ - lib/pub_sub/event_trace.rb
87
89
  - lib/pub_sub/linter.rb
88
90
  - lib/pub_sub/payload_attribute.rb
91
+ - lib/pub_sub/pure_event.rb
89
92
  - lib/pub_sub/subscriptions.rb
90
93
  - lib/pub_sub/testing.rb
91
94
  - lib/pub_sub/testing/event_data_helper.rb