pubsub_on_rails 0.0.3 → 0.0.4

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