ruby_event_store 2.1.0 → 2.4.0
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 +4 -4
- data/lib/ruby_event_store/batch_enumerator.rb +3 -3
- data/lib/ruby_event_store/broker.rb +5 -4
- data/lib/ruby_event_store/client.rb +81 -48
- data/lib/ruby_event_store/composed_dispatcher.rb +1 -3
- data/lib/ruby_event_store/correlated_commands.rb +4 -15
- data/lib/ruby_event_store/errors.rb +11 -10
- data/lib/ruby_event_store/event.rb +9 -14
- data/lib/ruby_event_store/expected_version.rb +3 -7
- data/lib/ruby_event_store/in_memory_repository.rb +100 -37
- data/lib/ruby_event_store/instrumented_dispatcher.rb +11 -2
- data/lib/ruby_event_store/instrumented_repository.rb +13 -8
- data/lib/ruby_event_store/link_by_metadata.rb +4 -21
- data/lib/ruby_event_store/mappers/default.rb +6 -4
- data/lib/ruby_event_store/mappers/encryption_key.rb +7 -16
- data/lib/ruby_event_store/mappers/encryption_mapper.rb +6 -6
- data/lib/ruby_event_store/mappers/forgotten_data.rb +1 -1
- data/lib/ruby_event_store/mappers/in_memory_encryption_key_repository.rb +1 -1
- data/lib/ruby_event_store/mappers/null_mapper.rb +0 -1
- data/lib/ruby_event_store/mappers/pipeline.rb +3 -10
- data/lib/ruby_event_store/mappers/pipeline_mapper.rb +1 -0
- data/lib/ruby_event_store/mappers/transformation/domain_event.rb +22 -12
- data/lib/ruby_event_store/mappers/transformation/encryption.rb +21 -25
- data/lib/ruby_event_store/mappers/transformation/event_class_remapper.rb +6 -5
- data/lib/ruby_event_store/mappers/transformation/stringify_metadata_keys.rb +6 -5
- data/lib/ruby_event_store/mappers/transformation/symbolize_metadata_keys.rb +6 -5
- data/lib/ruby_event_store/mappers/transformation/upcast.rb +2 -6
- data/lib/ruby_event_store/metadata.rb +46 -17
- data/lib/ruby_event_store/projection.rb +12 -20
- data/lib/ruby_event_store/record.rb +14 -26
- data/lib/ruby_event_store/serialized_record.rb +14 -26
- data/lib/ruby_event_store/serializers/yaml.rb +17 -0
- data/lib/ruby_event_store/spec/broker_lint.rb +38 -28
- data/lib/ruby_event_store/spec/event_lint.rb +10 -10
- data/lib/ruby_event_store/spec/event_repository_lint.rb +746 -730
- data/lib/ruby_event_store/spec/mapper_lint.rb +2 -2
- data/lib/ruby_event_store/spec/subscriptions_lint.rb +58 -68
- data/lib/ruby_event_store/specification.rb +20 -16
- data/lib/ruby_event_store/specification_reader.rb +2 -3
- data/lib/ruby_event_store/specification_result.rb +52 -46
- data/lib/ruby_event_store/stream.rb +3 -7
- data/lib/ruby_event_store/subscriptions.rb +17 -17
- data/lib/ruby_event_store/transform_keys.rb +1 -1
- data/lib/ruby_event_store/version.rb +1 -1
- data/lib/ruby_event_store.rb +44 -43
- metadata +6 -4
@@ -13,14 +13,15 @@ module RubyEventStore
|
|
13
13
|
end
|
14
14
|
|
15
15
|
private
|
16
|
+
|
16
17
|
def stringify(record)
|
17
18
|
Record.new(
|
18
|
-
event_id:
|
19
|
+
event_id: record.event_id,
|
19
20
|
event_type: record.event_type,
|
20
|
-
data:
|
21
|
-
metadata:
|
22
|
-
timestamp:
|
23
|
-
valid_at:
|
21
|
+
data: record.data,
|
22
|
+
metadata: TransformKeys.stringify(record.metadata),
|
23
|
+
timestamp: record.timestamp,
|
24
|
+
valid_at: record.valid_at
|
24
25
|
)
|
25
26
|
end
|
26
27
|
end
|
@@ -13,14 +13,15 @@ module RubyEventStore
|
|
13
13
|
end
|
14
14
|
|
15
15
|
private
|
16
|
+
|
16
17
|
def symbolize(record)
|
17
18
|
Record.new(
|
18
|
-
event_id:
|
19
|
+
event_id: record.event_id,
|
19
20
|
event_type: record.event_type,
|
20
|
-
data:
|
21
|
-
metadata:
|
22
|
-
timestamp:
|
23
|
-
valid_at:
|
21
|
+
data: record.data,
|
22
|
+
metadata: TransformKeys.symbolize(record.metadata),
|
23
|
+
timestamp: record.timestamp,
|
24
|
+
valid_at: record.valid_at
|
24
25
|
)
|
25
26
|
end
|
26
27
|
end
|
@@ -10,13 +10,9 @@ module RubyEventStore
|
|
10
10
|
end
|
11
11
|
|
12
12
|
def call(record)
|
13
|
-
identity
|
13
|
+
identity = lambda { |r| r }
|
14
14
|
new_record = @upcast_map.fetch(record.event_type, identity)[record]
|
15
|
-
|
16
|
-
record
|
17
|
-
else
|
18
|
-
call(new_record)
|
19
|
-
end
|
15
|
+
new_record.equal?(record) ? record : call(new_record)
|
20
16
|
end
|
21
17
|
end
|
22
18
|
|
@@ -1,19 +1,17 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require
|
4
|
-
require
|
5
|
-
require
|
3
|
+
require "date"
|
4
|
+
require "time"
|
5
|
+
require "forwardable"
|
6
6
|
|
7
7
|
module RubyEventStore
|
8
8
|
class Metadata
|
9
9
|
include Enumerable
|
10
|
-
extend
|
10
|
+
extend Forwardable
|
11
11
|
|
12
12
|
def initialize(h = self)
|
13
13
|
@h = {}
|
14
|
-
h.each
|
15
|
-
self[k] = (v)
|
16
|
-
end
|
14
|
+
h.each { |k, v| self[k] = (v) }
|
17
15
|
end
|
18
16
|
|
19
17
|
def [](key)
|
@@ -22,23 +20,54 @@ module RubyEventStore
|
|
22
20
|
end
|
23
21
|
|
24
22
|
def []=(key, val)
|
25
|
-
raise ArgumentError unless allowed_types.any?{|klass| klass === val }
|
23
|
+
raise ArgumentError unless allowed_types.any? { |klass| klass === val }
|
26
24
|
raise ArgumentError unless Symbol === key
|
27
|
-
@h[key]=val
|
25
|
+
@h[key] = val
|
28
26
|
end
|
29
27
|
|
30
28
|
def each(&block)
|
31
29
|
@h.each(&block)
|
32
30
|
end
|
33
31
|
|
34
|
-
SAFE_HASH_METHODS = [
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
32
|
+
SAFE_HASH_METHODS = %i[
|
33
|
+
<
|
34
|
+
<=
|
35
|
+
>
|
36
|
+
>=
|
37
|
+
assoc
|
38
|
+
clear
|
39
|
+
compact
|
40
|
+
compact!
|
41
|
+
delete
|
42
|
+
delete_if
|
43
|
+
dig
|
44
|
+
each_key
|
45
|
+
each_pair
|
46
|
+
each_value
|
47
|
+
empty?
|
48
|
+
fetch
|
49
|
+
fetch_values
|
50
|
+
flatten
|
51
|
+
has_key?
|
52
|
+
has_value?
|
53
|
+
keep_if
|
54
|
+
key
|
55
|
+
key?
|
56
|
+
keys
|
57
|
+
length
|
58
|
+
rassoc
|
59
|
+
reject!
|
60
|
+
select!
|
61
|
+
shift
|
62
|
+
size
|
63
|
+
slice
|
64
|
+
to_proc
|
65
|
+
transform_keys
|
66
|
+
transform_values
|
67
|
+
value?
|
68
|
+
values
|
69
|
+
values_at
|
70
|
+
]
|
42
71
|
|
43
72
|
delegate SAFE_HASH_METHODS => :@h
|
44
73
|
|
@@ -15,9 +15,9 @@ module RubyEventStore
|
|
15
15
|
end
|
16
16
|
|
17
17
|
def initialize(streams: [])
|
18
|
-
@streams
|
18
|
+
@streams = streams
|
19
19
|
@handlers = {}
|
20
|
-
@init
|
20
|
+
@init = -> { {} }
|
21
21
|
end
|
22
22
|
|
23
23
|
attr_reader :streams, :handlers
|
@@ -28,9 +28,7 @@ module RubyEventStore
|
|
28
28
|
end
|
29
29
|
|
30
30
|
def when(events, handler)
|
31
|
-
Array(events).each
|
32
|
-
handlers[event.to_s] = handler
|
33
|
-
end
|
31
|
+
Array(events).each { |event| handlers[event.to_s] = handler }
|
34
32
|
|
35
33
|
self
|
36
34
|
end
|
@@ -53,33 +51,27 @@ module RubyEventStore
|
|
53
51
|
|
54
52
|
def run(event_store, start: nil, count: PAGE_SIZE)
|
55
53
|
return initial_state if handled_events.empty?
|
56
|
-
|
57
|
-
reduce_from_streams(event_store, start, count)
|
58
|
-
else
|
59
|
-
reduce_from_all_streams(event_store, start, count)
|
60
|
-
end
|
54
|
+
streams.any? ? reduce_from_streams(event_store, start, count) : reduce_from_all_streams(event_store, start, count)
|
61
55
|
end
|
62
56
|
|
63
57
|
private
|
64
58
|
|
65
59
|
def valid_starting_point?(start)
|
66
60
|
return true unless start
|
67
|
-
|
68
|
-
(start.instance_of?(Array) && start.size === streams.size)
|
69
|
-
else
|
70
|
-
start.instance_of?(String)
|
71
|
-
end
|
61
|
+
streams.any? ? (start.instance_of?(Array) && start.size === streams.size) : start.instance_of?(String)
|
72
62
|
end
|
73
63
|
|
74
64
|
def reduce_from_streams(event_store, start, count)
|
75
|
-
raise ArgumentError.new(
|
76
|
-
streams
|
77
|
-
|
78
|
-
|
65
|
+
raise ArgumentError.new("Start must be an array with event ids") unless valid_starting_point?(start)
|
66
|
+
streams
|
67
|
+
.zip(start_events(start))
|
68
|
+
.reduce(initial_state) do |state, (stream_name, start_event_id)|
|
69
|
+
read_scope(event_store, stream_name, count, start_event_id).reduce(state, &method(:transition))
|
70
|
+
end
|
79
71
|
end
|
80
72
|
|
81
73
|
def reduce_from_all_streams(event_store, start, count)
|
82
|
-
raise ArgumentError.new(
|
74
|
+
raise ArgumentError.new("Start must be valid event id") unless valid_starting_point?(start)
|
83
75
|
read_scope(event_store, nil, count, start).reduce(initial_state, &method(:transition))
|
84
76
|
end
|
85
77
|
|
@@ -5,12 +5,12 @@ module RubyEventStore
|
|
5
5
|
StringsRequired = Class.new(StandardError)
|
6
6
|
def initialize(event_id:, data:, metadata:, event_type:, timestamp:, valid_at:)
|
7
7
|
raise StringsRequired unless [event_id, event_type].all? { |v| v.instance_of?(String) }
|
8
|
-
@event_id
|
9
|
-
@data
|
10
|
-
@metadata
|
8
|
+
@event_id = event_id
|
9
|
+
@data = data
|
10
|
+
@metadata = metadata
|
11
11
|
@event_type = event_type
|
12
|
-
@timestamp
|
13
|
-
@valid_at
|
12
|
+
@timestamp = timestamp
|
13
|
+
@valid_at = valid_at
|
14
14
|
@serialized_records = {}
|
15
15
|
freeze
|
16
16
|
end
|
@@ -19,24 +19,12 @@ module RubyEventStore
|
|
19
19
|
|
20
20
|
BIG_VALUE = 0b110011100100000010010010110011101011110101010101001100111110011
|
21
21
|
def hash
|
22
|
-
[
|
23
|
-
self.class,
|
24
|
-
event_id,
|
25
|
-
data,
|
26
|
-
metadata,
|
27
|
-
event_type,
|
28
|
-
timestamp,
|
29
|
-
valid_at,
|
30
|
-
].hash ^ BIG_VALUE
|
22
|
+
[self.class, event_id, data, metadata, event_type, timestamp, valid_at].hash ^ BIG_VALUE
|
31
23
|
end
|
32
24
|
|
33
25
|
def ==(other)
|
34
|
-
other.instance_of?(self.class) &&
|
35
|
-
other.
|
36
|
-
other.data.eql?(data) &&
|
37
|
-
other.metadata.eql?(metadata) &&
|
38
|
-
other.event_type.eql?(event_type) &&
|
39
|
-
other.timestamp.eql?(timestamp) &&
|
26
|
+
other.instance_of?(self.class) && other.event_id.eql?(event_id) && other.data.eql?(data) &&
|
27
|
+
other.metadata.eql?(metadata) && other.event_type.eql?(event_type) && other.timestamp.eql?(timestamp) &&
|
40
28
|
other.valid_at.eql?(valid_at)
|
41
29
|
end
|
42
30
|
|
@@ -47,19 +35,19 @@ module RubyEventStore
|
|
47
35
|
metadata: metadata,
|
48
36
|
event_type: event_type,
|
49
37
|
timestamp: timestamp,
|
50
|
-
valid_at: valid_at
|
38
|
+
valid_at: valid_at
|
51
39
|
}
|
52
40
|
end
|
53
41
|
|
54
42
|
def serialize(serializer)
|
55
43
|
@serialized_records[serializer] ||=
|
56
44
|
SerializedRecord.new(
|
57
|
-
event_id:
|
45
|
+
event_id: event_id,
|
58
46
|
event_type: event_type,
|
59
|
-
data:
|
60
|
-
metadata:
|
61
|
-
timestamp:
|
62
|
-
valid_at:
|
47
|
+
data: serializer.dump(data),
|
48
|
+
metadata: serializer.dump(metadata),
|
49
|
+
timestamp: timestamp.iso8601(TIMESTAMP_PRECISION),
|
50
|
+
valid_at: valid_at.iso8601(TIMESTAMP_PRECISION)
|
63
51
|
)
|
64
52
|
end
|
65
53
|
|
@@ -5,12 +5,12 @@ module RubyEventStore
|
|
5
5
|
StringsRequired = Class.new(StandardError)
|
6
6
|
def initialize(event_id:, data:, metadata:, event_type:, timestamp:, valid_at:)
|
7
7
|
raise StringsRequired unless [event_id, event_type].all? { |v| v.instance_of?(String) }
|
8
|
-
@event_id
|
9
|
-
@data
|
10
|
-
@metadata
|
8
|
+
@event_id = event_id
|
9
|
+
@data = data
|
10
|
+
@metadata = metadata
|
11
11
|
@event_type = event_type
|
12
|
-
@timestamp
|
13
|
-
@valid_at
|
12
|
+
@timestamp = timestamp
|
13
|
+
@valid_at = valid_at
|
14
14
|
freeze
|
15
15
|
end
|
16
16
|
|
@@ -18,24 +18,12 @@ module RubyEventStore
|
|
18
18
|
|
19
19
|
BIG_VALUE = 0b110011100100000010010010110011101011110101010101001100111110111
|
20
20
|
def hash
|
21
|
-
[
|
22
|
-
self.class,
|
23
|
-
event_id,
|
24
|
-
data,
|
25
|
-
metadata,
|
26
|
-
event_type,
|
27
|
-
timestamp,
|
28
|
-
valid_at,
|
29
|
-
].hash ^ BIG_VALUE
|
21
|
+
[self.class, event_id, data, metadata, event_type, timestamp, valid_at].hash ^ BIG_VALUE
|
30
22
|
end
|
31
23
|
|
32
24
|
def ==(other)
|
33
|
-
other.instance_of?(self.class) &&
|
34
|
-
other.
|
35
|
-
other.data.eql?(data) &&
|
36
|
-
other.metadata.eql?(metadata) &&
|
37
|
-
other.event_type.eql?(event_type) &&
|
38
|
-
other.timestamp.eql?(timestamp) &&
|
25
|
+
other.instance_of?(self.class) && other.event_id.eql?(event_id) && other.data.eql?(data) &&
|
26
|
+
other.metadata.eql?(metadata) && other.event_type.eql?(event_type) && other.timestamp.eql?(timestamp) &&
|
39
27
|
other.valid_at.eql?(valid_at)
|
40
28
|
end
|
41
29
|
|
@@ -46,18 +34,18 @@ module RubyEventStore
|
|
46
34
|
metadata: metadata,
|
47
35
|
event_type: event_type,
|
48
36
|
timestamp: timestamp,
|
49
|
-
valid_at: valid_at
|
37
|
+
valid_at: valid_at
|
50
38
|
}
|
51
39
|
end
|
52
40
|
|
53
41
|
def deserialize(serializer)
|
54
42
|
Record.new(
|
55
|
-
event_id:
|
43
|
+
event_id: event_id,
|
56
44
|
event_type: event_type,
|
57
|
-
data:
|
58
|
-
metadata:
|
59
|
-
timestamp:
|
60
|
-
valid_at:
|
45
|
+
data: serializer.load(data),
|
46
|
+
metadata: serializer.load(metadata),
|
47
|
+
timestamp: Time.iso8601(timestamp),
|
48
|
+
valid_at: Time.iso8601(valid_at)
|
61
49
|
)
|
62
50
|
end
|
63
51
|
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "yaml"
|
4
|
+
|
5
|
+
module RubyEventStore
|
6
|
+
module Serializers
|
7
|
+
class YAML
|
8
|
+
def self.dump(value)
|
9
|
+
::YAML.dump(value)
|
10
|
+
end
|
11
|
+
|
12
|
+
def self.load(serialized)
|
13
|
+
::YAML.respond_to?(:unsafe_load) ? ::YAML.unsafe_load(serialized) : ::YAML.load(serialized)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -1,63 +1,73 @@
|
|
1
1
|
RSpec.shared_examples :broker do |broker_klass|
|
2
|
-
let(:event) { instance_double(::RubyEventStore::Event, event_type:
|
3
|
-
let(:record) { instance_double(::RubyEventStore::Record)
|
2
|
+
let(:event) { instance_double(::RubyEventStore::Event, event_type: "EventType") }
|
3
|
+
let(:record) { instance_double(::RubyEventStore::Record) }
|
4
4
|
let(:handler) { HandlerClass.new }
|
5
5
|
let(:subscriptions) { ::RubyEventStore::Subscriptions.new }
|
6
6
|
let(:dispatcher) { ::RubyEventStore::Dispatcher.new }
|
7
7
|
let(:broker) { broker_klass.new(subscriptions: subscriptions, dispatcher: dispatcher) }
|
8
8
|
|
9
9
|
specify "no dispatch when no subscriptions" do
|
10
|
-
expect(subscriptions).to receive(:all_for).with(
|
10
|
+
expect(subscriptions).to receive(:all_for).with("EventType").and_return([])
|
11
11
|
expect(dispatcher).not_to receive(:call)
|
12
12
|
broker.call(event, record)
|
13
13
|
end
|
14
14
|
|
15
15
|
specify "calls subscription" do
|
16
|
-
expect(subscriptions).to receive(:all_for).with(
|
16
|
+
expect(subscriptions).to receive(:all_for).with("EventType").and_return([handler])
|
17
17
|
expect(dispatcher).to receive(:call).with(handler, event, record)
|
18
18
|
broker.call(event, record)
|
19
19
|
end
|
20
20
|
|
21
21
|
specify "calls subscribed class" do
|
22
|
-
expect(subscriptions).to receive(:all_for).with(
|
22
|
+
expect(subscriptions).to receive(:all_for).with("EventType").and_return([HandlerClass])
|
23
23
|
expect(dispatcher).to receive(:call).with(HandlerClass, event, record)
|
24
24
|
broker.call(event, record)
|
25
25
|
end
|
26
26
|
|
27
27
|
specify "calls all subscriptions" do
|
28
|
-
expect(subscriptions).to receive(:all_for).with(
|
28
|
+
expect(subscriptions).to receive(:all_for).with("EventType").and_return([handler, HandlerClass])
|
29
29
|
expect(dispatcher).to receive(:call).with(handler, event, record)
|
30
30
|
expect(dispatcher).to receive(:call).with(HandlerClass, event, record)
|
31
31
|
broker.call(event, record)
|
32
32
|
end
|
33
33
|
|
34
|
-
specify
|
35
|
-
expect { broker.add_subscription(nil, [])}.to raise_error(
|
36
|
-
|
37
|
-
|
38
|
-
|
34
|
+
specify "raise error when no subscriber" do
|
35
|
+
expect { broker.add_subscription(nil, []) }.to raise_error(
|
36
|
+
RubyEventStore::SubscriberNotExist,
|
37
|
+
"subscriber must be first argument or block"
|
38
|
+
)
|
39
|
+
expect { broker.add_global_subscription(nil) }.to raise_error(RubyEventStore::SubscriberNotExist),
|
40
|
+
"subscriber must be first argument or block"
|
41
|
+
expect { broker.add_thread_subscription(nil, []).call }.to raise_error(RubyEventStore::SubscriberNotExist),
|
42
|
+
"subscriber must be first argument or block"
|
43
|
+
expect { broker.add_thread_global_subscription(nil).call }.to raise_error(RubyEventStore::SubscriberNotExist),
|
44
|
+
"subscriber must be first argument or block"
|
39
45
|
end
|
40
46
|
|
41
|
-
specify
|
47
|
+
specify "raise error when wrong subscriber" do
|
42
48
|
allow(dispatcher).to receive(:verify).and_return(false)
|
43
|
-
expect
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
49
|
+
expect { broker.add_subscription(HandlerClass, []) }.to raise_error(
|
50
|
+
RubyEventStore::InvalidHandler,
|
51
|
+
/Handler HandlerClass is invalid for dispatcher .*Dispatcher/
|
52
|
+
)
|
53
|
+
expect { broker.add_global_subscription(HandlerClass) }.to raise_error(
|
54
|
+
RubyEventStore::InvalidHandler,
|
55
|
+
/is invalid for dispatcher/
|
56
|
+
)
|
57
|
+
expect { broker.add_thread_subscription(HandlerClass, []) }.to raise_error(
|
58
|
+
RubyEventStore::InvalidHandler,
|
59
|
+
/is invalid for dispatcher/
|
60
|
+
)
|
61
|
+
expect { broker.add_thread_global_subscription(HandlerClass) }.to raise_error(
|
62
|
+
RubyEventStore::InvalidHandler,
|
63
|
+
/is invalid for dispatcher/
|
64
|
+
)
|
55
65
|
end
|
56
66
|
|
57
67
|
specify "verify and add - local subscriptions" do
|
58
68
|
expect(dispatcher).to receive(:verify).with(handler).and_return(true)
|
59
|
-
expect(subscriptions).to receive(:add_subscription).with(handler, [
|
60
|
-
broker.add_subscription(handler, [
|
69
|
+
expect(subscriptions).to receive(:add_subscription).with(handler, ["EventType"])
|
70
|
+
broker.add_subscription(handler, ["EventType"])
|
61
71
|
end
|
62
72
|
|
63
73
|
specify "verify and add - global subscriptions" do
|
@@ -68,8 +78,8 @@ RSpec.shared_examples :broker do |broker_klass|
|
|
68
78
|
|
69
79
|
specify "verify and add - thread local subscriptions" do
|
70
80
|
expect(dispatcher).to receive(:verify).with(handler).and_return(true)
|
71
|
-
expect(subscriptions).to receive(:add_thread_subscription).with(handler, [
|
72
|
-
broker.add_thread_subscription(handler, [
|
81
|
+
expect(subscriptions).to receive(:add_thread_subscription).with(handler, ["EventType"])
|
82
|
+
broker.add_thread_subscription(handler, ["EventType"])
|
73
83
|
end
|
74
84
|
|
75
85
|
specify "verify and add - thread global subscriptions" do
|
@@ -1,36 +1,36 @@
|
|
1
1
|
RSpec.shared_examples :event do |event_class, data, metadata|
|
2
|
-
it
|
2
|
+
it "allows initialization" do
|
3
3
|
expect {
|
4
4
|
event_class.new(event_id: Object.new, data: data || Object.new, metadata: metadata || {})
|
5
5
|
}.not_to raise_error
|
6
6
|
end
|
7
7
|
|
8
|
-
it
|
8
|
+
it "provides event_id as string" do
|
9
9
|
event = event_class.new
|
10
10
|
expect(event.event_id).to be_an_instance_of(String)
|
11
|
-
expect(event.event_id).not_to eq
|
11
|
+
expect(event.event_id).not_to eq ""
|
12
12
|
expect(event.event_id).not_to eq nil
|
13
13
|
end
|
14
14
|
|
15
|
-
it
|
15
|
+
it "provides message_id as string" do
|
16
16
|
event = event_class.new
|
17
17
|
expect(event.message_id).to be_an_instance_of(String)
|
18
18
|
end
|
19
19
|
|
20
|
-
it
|
20
|
+
it "message_id is the same as event_id" do
|
21
21
|
event = event_class.new
|
22
22
|
expect(event.event_id).to eq event.message_id
|
23
23
|
end
|
24
24
|
|
25
|
-
it
|
26
|
-
event = event_class.new(event_id:
|
27
|
-
expect(event.event_id).to eq
|
25
|
+
it "exposes given event_id to string" do
|
26
|
+
event = event_class.new(event_id: 1_234_567_890)
|
27
|
+
expect(event.event_id).to eq "1234567890"
|
28
28
|
end
|
29
29
|
|
30
|
-
it
|
30
|
+
it "provides event type as string" do
|
31
31
|
event = event_class.new
|
32
32
|
expect(event.event_type).to be_an_instance_of(String)
|
33
|
-
expect(event.event_type).not_to eq
|
33
|
+
expect(event.event_type).not_to eq ""
|
34
34
|
expect(event.event_type).not_to eq nil
|
35
35
|
end
|
36
36
|
|