ruby_event_store 0.44.0 → 1.2.1

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: 368744aa127e8d45d1e6237561ffb22279452f5e71212e1bda86988ee2726c3a
4
- data.tar.gz: 7dfbd1a66c649a6ecc90f08432047ff93aa7376eaec66ab774a5a347d574135a
3
+ metadata.gz: d0c79f8dae2279ab828fb59a201d367d5cda8d4734a2013e3a0e619fc57de3c9
4
+ data.tar.gz: 4fee68b6561a59730c7cc5cadf000653fa216c88729326ee15e0040ce6ab0322
5
5
  SHA512:
6
- metadata.gz: 88167b0f2ac9b3e7148b3772b39e1193eaed384af89c12761790b1a43d34d66677c1d91dba6926fe0d5d773dd446e3a0b8e6bbe0642dffbb1b7d081435400a93
7
- data.tar.gz: 4eb32bd4ffe7abc50611b0dcb24d778f423d68322b7e9a0dee52680a3dddcc6bfeae1a70a4e744dce071357e9d3ebd85648afb4ba70dfe8eb96c0cc45d34b73e
6
+ metadata.gz: c901d6cbf77e77b7e58de6af3ad2f74836cd85aee7b800a09357ea3b8661db57cfbab6497261fbe7399348efa230f36a11f15ebbbae267baa7d71e1b1b988994
7
+ data.tar.gz: bc368139eeeedfba76e52ecbaff4487a9d5c73b3f2bd313fe3bccd4afd298ceb0c6ad08cf10b14a0fad163fe51dc161fbe79c8d815dfcd47f8ede17a34f1df30
data/Gemfile CHANGED
@@ -6,5 +6,5 @@ gemspec
6
6
  eval_gemfile File.expand_path('../support/bundler/Gemfile.shared', __dir__)
7
7
 
8
8
  gem 'protobuf_nested_struct'
9
- gem 'google-protobuf', '~> 3.7.0'
9
+ gem 'google-protobuf', '~> 3.12.2', '>= 3.12.2'
10
10
  gem 'activesupport', '~> 5.0'
data/Makefile CHANGED
@@ -5,6 +5,7 @@ IGNORE = RubyEventStore::InMemoryRepository\#append_with_synchronize \
5
5
  RubyEventStore::Client::Within\#add_thread_subscribers \
6
6
  RubyEventStore::Client::Within\#add_thread_global_subscribers \
7
7
  RubyEventStore::Client::Within\#call \
8
+ RubyEventStore::Client\#default_correlation_id_generator \
8
9
  RubyEventStore::Mappers::InMemoryEncryptionKeyRepository\#prepare_encrypt \
9
10
  RubyEventStore::Mappers::EncryptionKey\#prepare_encrypt \
10
11
  RubyEventStore::Mappers::EncryptionKey\#prepare_decrypt \
@@ -10,9 +10,10 @@ module RubyEventStore
10
10
 
11
11
  def each
12
12
  return to_enum unless block_given?
13
+
13
14
  0.step(total_limit - 1, batch_size) do |batch_offset|
14
- batch_limit = [batch_size, total_limit - batch_offset].min
15
- result = reader.call(batch_offset, batch_limit)
15
+ batch_limit = [batch_size, total_limit - batch_offset].min
16
+ result = reader.call(batch_offset, batch_limit)
16
17
 
17
18
  break if result.empty?
18
19
  yield result
@@ -29,6 +30,6 @@ module RubyEventStore
29
30
 
30
31
  private
31
32
 
32
- attr_accessor :batch_size, :total_limit, :reader
33
+ attr_reader :batch_size, :total_limit, :reader
33
34
  end
34
35
  end
@@ -4,17 +4,18 @@ require 'concurrent'
4
4
 
5
5
  module RubyEventStore
6
6
  class Client
7
-
8
7
  def initialize(repository:,
9
8
  mapper: Mappers::Default.new,
10
9
  subscriptions: Subscriptions.new,
11
10
  dispatcher: Dispatcher.new,
12
- clock: ->{ Time.now.utc })
11
+ clock: default_clock,
12
+ correlation_id_generator: default_correlation_id_generator)
13
13
  @repository = repository
14
14
  @mapper = mapper
15
15
  @broker = Broker.new(subscriptions: subscriptions, dispatcher: dispatcher)
16
16
  @clock = clock
17
17
  @metadata = Concurrent::ThreadLocalVar.new
18
+ @correlation_id_generator = correlation_id_generator
18
19
  end
19
20
 
20
21
 
@@ -30,7 +31,7 @@ module RubyEventStore
30
31
  append_to_stream_serialized_events(serialized_events, stream_name: stream_name, expected_version: expected_version)
31
32
  enriched_events.zip(serialized_events) do |event, serialized_event|
32
33
  with_metadata(
33
- correlation_id: event.metadata[:correlation_id] || event.event_id,
34
+ correlation_id: event.metadata.fetch(:correlation_id),
34
35
  causation_id: event.event_id,
35
36
  ) do
36
37
  broker.(event, serialized_event)
@@ -293,7 +294,8 @@ module RubyEventStore
293
294
 
294
295
  def enrich_event_metadata(event)
295
296
  metadata.each { |key, value| event.metadata[key] ||= value }
296
- event.metadata[:timestamp] ||= clock.call
297
+ event.metadata[:timestamp] ||= clock.call
298
+ event.metadata[:correlation_id] ||= correlation_id_generator.call
297
299
  end
298
300
 
299
301
  def append_to_stream_serialized_events(serialized_events, stream_name:, expected_version:)
@@ -306,6 +308,14 @@ module RubyEventStore
306
308
  @metadata.value = value
307
309
  end
308
310
 
309
- attr_reader :repository, :mapper, :broker, :clock
311
+ def default_clock
312
+ ->{ Time.now.utc }
313
+ end
314
+
315
+ def default_correlation_id_generator
316
+ ->{ SecureRandom.uuid }
317
+ end
318
+
319
+ attr_reader :repository, :mapper, :broker, :clock, :correlation_id_generator
310
320
  end
311
321
  end
@@ -34,15 +34,6 @@ module RubyEventStore
34
34
  self.class.name
35
35
  end
36
36
 
37
- # Type of event. Used when matching with subscribed handlers.
38
- # @return [String]
39
- def type
40
- warn <<~EOW
41
- `type` has been deprecated. Use `event_type` instead.
42
- EOW
43
- event_type
44
- end
45
-
46
37
  # Timestamp from metadata
47
38
  #
48
39
  # @return [Time, nil]
@@ -51,7 +51,8 @@ module RubyEventStore
51
51
 
52
52
  def update_messages(messages)
53
53
  messages.each do |new_msg|
54
- location = global.index{|m| new_msg.event_id.eql?(m.event_id)} or raise EventNotFound.new(new_msg.event_id)
54
+ location = global.index{|m| new_msg.event_id.eql?(m.event_id)}
55
+ raise EventNotFound.new(new_msg.event_id) unless location
55
56
  global[location] = new_msg
56
57
  streams.values.each do |str|
57
58
  location = str.index{|m| new_msg.event_id.eql?(m.event_id)}
@@ -5,12 +5,6 @@ module RubyEventStore
5
5
  def event_type
6
6
  data.class.descriptor.name
7
7
  end
8
-
9
- def ==(other_event)
10
- other_event.instance_of?(self.class) &&
11
- other_event.event_id.eql?(event_id) &&
12
- other_event.data == data # https://github.com/google/protobuf/issues/4455
13
- end
14
8
  end
15
9
 
16
10
  module Mappers
@@ -69,7 +69,8 @@ module RubyEventStore
69
69
  acc[key] = encryption_metadata(data, value)
70
70
  when Proc
71
71
  key_identifier = value.call(data)
72
- encryption_key = key_repository.key_of(key_identifier) or raise MissingEncryptionKey.new(key_identifier)
72
+ encryption_key = key_repository.key_of(key_identifier)
73
+ raise MissingEncryptionKey.new(key_identifier) unless encryption_key
73
74
  acc[key] = {
74
75
  cipher: encryption_key.cipher,
75
76
  iv: encryption_key.random_iv,
@@ -82,14 +83,14 @@ module RubyEventStore
82
83
 
83
84
  def encrypt_data(data, meta)
84
85
  meta.reduce(data) do |acc, (key, value)|
85
- acc[key] = encrypt_attribute(acc, key, value)
86
+ acc[key] = encrypt_attribute(acc, key, value) if data.has_key?(key)
86
87
  acc
87
88
  end
88
89
  end
89
90
 
90
91
  def decrypt_data(data, meta)
91
92
  meta.reduce(data) do |acc, (key, value)|
92
- acc[key] = decrypt_attribute(data, key, value)
93
+ acc[key] = decrypt_attribute(data, key, value) if data.has_key?(key)
93
94
  acc
94
95
  end
95
96
  end
@@ -98,7 +99,7 @@ module RubyEventStore
98
99
  case meta
99
100
  when Leaf
100
101
  value = data.fetch(attribute)
101
- return unless value
102
+ return if value.nil?
102
103
 
103
104
  encryption_key = key_repository.key_of(meta.fetch(:identifier))
104
105
  encryption_key.encrypt(serializer.dump(value), meta.fetch(:iv))
@@ -9,8 +9,7 @@ module RubyEventStore
9
9
  end
10
10
 
11
11
  def dump(item)
12
- stringify = StringifyMetadataKeys.new
13
- metadata = ProtobufNestedStruct::HashMapStringValue.dump(stringify.dump(item).metadata)
12
+ metadata = ProtobufNestedStruct::HashMapStringValue.dump(item.metadata)
14
13
  item.merge(metadata: metadata)
15
14
  end
16
15
 
@@ -51,6 +51,7 @@ module RubyEventStore
51
51
  end
52
52
 
53
53
  def run(event_store, start: nil, count: PAGE_SIZE)
54
+ return initial_state if handled_events.empty?
54
55
  if streams.any?
55
56
  reduce_from_streams(event_store, start, count)
56
57
  else
@@ -1,9 +1,7 @@
1
- RSpec.shared_examples :event do |event_class|
1
+ RSpec.shared_examples :event do |event_class, data, metadata|
2
2
  it 'allows initialization' do
3
3
  expect {
4
- metadata = double(:metadata)
5
- allow(metadata).to receive(:to_h).and_return({})
6
- event_class.new(event_id: Object.new, data: Object.new, metadata: metadata)
4
+ event_class.new(event_id: Object.new, data: data || Object.new, metadata: metadata || {})
7
5
  }.not_to raise_error
8
6
  end
9
7
 
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module RubyEventStore
4
- VERSION = "0.44.0"
4
+ VERSION = "1.2.1"
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby_event_store
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.44.0
4
+ version: 1.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Arkency
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-04-28 00:00:00.000000000 Z
11
+ date: 2020-11-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: concurrent-ruby
@@ -105,7 +105,7 @@ metadata:
105
105
  changelog_uri: https://github.com/RailsEventStore/rails_event_store/releases
106
106
  source_code_uri: https://github.com/RailsEventStore/rails_event_store
107
107
  bug_tracker_uri: https://github.com/RailsEventStore/rails_event_store/issues
108
- post_install_message:
108
+ post_install_message:
109
109
  rdoc_options: []
110
110
  require_paths:
111
111
  - lib
@@ -120,8 +120,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
120
120
  - !ruby/object:Gem::Version
121
121
  version: '0'
122
122
  requirements: []
123
- rubygems_version: 3.0.3
124
- signing_key:
123
+ rubygems_version: 3.1.4
124
+ signing_key:
125
125
  specification_version: 4
126
126
  summary: Event Store in Ruby
127
127
  test_files: []