ruby_event_store 2.1.0 → 2.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (46) hide show
  1. checksums.yaml +4 -4
  2. data/lib/ruby_event_store/batch_enumerator.rb +3 -3
  3. data/lib/ruby_event_store/broker.rb +5 -4
  4. data/lib/ruby_event_store/client.rb +81 -48
  5. data/lib/ruby_event_store/composed_dispatcher.rb +1 -3
  6. data/lib/ruby_event_store/correlated_commands.rb +4 -15
  7. data/lib/ruby_event_store/errors.rb +11 -10
  8. data/lib/ruby_event_store/event.rb +9 -14
  9. data/lib/ruby_event_store/expected_version.rb +3 -7
  10. data/lib/ruby_event_store/in_memory_repository.rb +100 -37
  11. data/lib/ruby_event_store/instrumented_dispatcher.rb +11 -2
  12. data/lib/ruby_event_store/instrumented_repository.rb +13 -8
  13. data/lib/ruby_event_store/link_by_metadata.rb +4 -21
  14. data/lib/ruby_event_store/mappers/default.rb +6 -4
  15. data/lib/ruby_event_store/mappers/encryption_key.rb +7 -16
  16. data/lib/ruby_event_store/mappers/encryption_mapper.rb +6 -6
  17. data/lib/ruby_event_store/mappers/forgotten_data.rb +1 -1
  18. data/lib/ruby_event_store/mappers/in_memory_encryption_key_repository.rb +1 -1
  19. data/lib/ruby_event_store/mappers/null_mapper.rb +0 -1
  20. data/lib/ruby_event_store/mappers/pipeline.rb +3 -10
  21. data/lib/ruby_event_store/mappers/pipeline_mapper.rb +1 -0
  22. data/lib/ruby_event_store/mappers/transformation/domain_event.rb +22 -12
  23. data/lib/ruby_event_store/mappers/transformation/encryption.rb +21 -25
  24. data/lib/ruby_event_store/mappers/transformation/event_class_remapper.rb +6 -5
  25. data/lib/ruby_event_store/mappers/transformation/stringify_metadata_keys.rb +6 -5
  26. data/lib/ruby_event_store/mappers/transformation/symbolize_metadata_keys.rb +6 -5
  27. data/lib/ruby_event_store/mappers/transformation/upcast.rb +2 -6
  28. data/lib/ruby_event_store/metadata.rb +46 -17
  29. data/lib/ruby_event_store/projection.rb +12 -20
  30. data/lib/ruby_event_store/record.rb +14 -26
  31. data/lib/ruby_event_store/serialized_record.rb +14 -26
  32. data/lib/ruby_event_store/serializers/yaml.rb +17 -0
  33. data/lib/ruby_event_store/spec/broker_lint.rb +38 -28
  34. data/lib/ruby_event_store/spec/event_lint.rb +10 -10
  35. data/lib/ruby_event_store/spec/event_repository_lint.rb +746 -730
  36. data/lib/ruby_event_store/spec/mapper_lint.rb +2 -2
  37. data/lib/ruby_event_store/spec/subscriptions_lint.rb +58 -68
  38. data/lib/ruby_event_store/specification.rb +20 -16
  39. data/lib/ruby_event_store/specification_reader.rb +2 -3
  40. data/lib/ruby_event_store/specification_result.rb +52 -46
  41. data/lib/ruby_event_store/stream.rb +3 -7
  42. data/lib/ruby_event_store/subscriptions.rb +17 -17
  43. data/lib/ruby_event_store/transform_keys.rb +1 -1
  44. data/lib/ruby_event_store/version.rb +1 -1
  45. data/lib/ruby_event_store.rb +44 -43
  46. 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: record.event_id,
19
+ event_id: record.event_id,
19
20
  event_type: record.event_type,
20
- data: record.data,
21
- metadata: TransformKeys.stringify(record.metadata),
22
- timestamp: record.timestamp,
23
- valid_at: record.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: record.event_id,
19
+ event_id: record.event_id,
19
20
  event_type: record.event_type,
20
- data: record.data,
21
- metadata: TransformKeys.symbolize(record.metadata),
22
- timestamp: record.timestamp,
23
- valid_at: record.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 = lambda { |r| r }
13
+ identity = lambda { |r| r }
14
14
  new_record = @upcast_map.fetch(record.event_type, identity)[record]
15
- if new_record.equal?(record)
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 'date'
4
- require 'time'
5
- require 'forwardable'
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 Forwardable
10
+ extend Forwardable
11
11
 
12
12
  def initialize(h = self)
13
13
  @h = {}
14
- h.each do |k, v|
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 = [:<, :<=, :>, :>=, :assoc, :clear, :compact, :compact!,
35
- :delete, :delete_if, :dig, :each_key, :each_pair,
36
- :each_value, :empty?, :fetch, :fetch_values,
37
- :flatten, :has_key?, :has_value?,
38
- :keep_if, :key, :key?, :keys, :length,
39
- :rassoc, :reject!, :select!, :shift, :size, :slice,
40
- :to_proc, :transform_keys, :transform_values,
41
- :value?, :values, :values_at]
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 = 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 do |event|
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
- if streams.any?
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
- if streams.any?
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('Start must be an array with event ids') unless valid_starting_point?(start)
76
- streams.zip(start_events(start)).reduce(initial_state) do |state, (stream_name, start_event_id)|
77
- read_scope(event_store, stream_name, count, start_event_id).reduce(state, &method(:transition))
78
- end
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('Start must be valid event id') unless valid_starting_point?(start)
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 = event_id
9
- @data = data
10
- @metadata = metadata
8
+ @event_id = event_id
9
+ @data = data
10
+ @metadata = metadata
11
11
  @event_type = event_type
12
- @timestamp = timestamp
13
- @valid_at = 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.event_id.eql?(event_id) &&
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: event_id,
45
+ event_id: event_id,
58
46
  event_type: event_type,
59
- data: serializer.dump(data),
60
- metadata: serializer.dump(metadata),
61
- timestamp: timestamp.iso8601(TIMESTAMP_PRECISION),
62
- valid_at: valid_at.iso8601(TIMESTAMP_PRECISION),
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 = event_id
9
- @data = data
10
- @metadata = metadata
8
+ @event_id = event_id
9
+ @data = data
10
+ @metadata = metadata
11
11
  @event_type = event_type
12
- @timestamp = timestamp
13
- @valid_at = 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.event_id.eql?(event_id) &&
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: event_id,
43
+ event_id: event_id,
56
44
  event_type: event_type,
57
- data: serializer.load(data),
58
- metadata: serializer.load(metadata),
59
- timestamp: Time.iso8601(timestamp),
60
- valid_at: Time.iso8601(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: 'EventType') }
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('EventType').and_return([])
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('EventType').and_return([handler])
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('EventType').and_return([HandlerClass])
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('EventType').and_return([handler, HandlerClass])
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 'raise error when no subscriber' do
35
- expect { broker.add_subscription(nil, [])}.to raise_error(RubyEventStore::SubscriberNotExist, "subscriber must be first argument or block")
36
- expect { broker.add_global_subscription(nil)}.to raise_error(RubyEventStore::SubscriberNotExist), "subscriber must be first argument or block"
37
- expect { broker.add_thread_subscription(nil, []).call}.to raise_error(RubyEventStore::SubscriberNotExist), "subscriber must be first argument or block"
38
- expect { broker.add_thread_global_subscription(nil).call}.to raise_error(RubyEventStore::SubscriberNotExist), "subscriber must be first argument or block"
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 'raise error when wrong subscriber' do
47
+ specify "raise error when wrong subscriber" do
42
48
  allow(dispatcher).to receive(:verify).and_return(false)
43
- expect do
44
- broker.add_subscription(HandlerClass, [])
45
- end.to raise_error(RubyEventStore::InvalidHandler, /Handler HandlerClass is invalid for dispatcher .*Dispatcher/)
46
- expect do
47
- broker.add_global_subscription(HandlerClass)
48
- end.to raise_error(RubyEventStore::InvalidHandler, /is invalid for dispatcher/)
49
- expect do
50
- broker.add_thread_subscription(HandlerClass, [])
51
- end.to raise_error(RubyEventStore::InvalidHandler, /is invalid for dispatcher/)
52
- expect do
53
- broker.add_thread_global_subscription(HandlerClass)
54
- end.to raise_error(RubyEventStore::InvalidHandler, /is invalid for dispatcher/)
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, ['EventType'])
60
- broker.add_subscription(handler, ['EventType'])
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, ['EventType'])
72
- broker.add_thread_subscription(handler, ['EventType'])
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 'allows initialization' do
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 'provides event_id as string' do
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 'provides message_id as string' do
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 'message_id is the same as event_id' do
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 'exposes given event_id to string' do
26
- event = event_class.new(event_id: 1234567890)
27
- expect(event.event_id).to eq '1234567890'
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 'provides event type as string' do
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