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 +4 -4
- data/Gemfile +1 -1
- data/Makefile +1 -0
- data/lib/ruby_event_store/batch_enumerator.rb +4 -3
- data/lib/ruby_event_store/client.rb +15 -5
- data/lib/ruby_event_store/event.rb +0 -9
- data/lib/ruby_event_store/in_memory_repository.rb +2 -1
- data/lib/ruby_event_store/mappers/protobuf.rb +0 -6
- data/lib/ruby_event_store/mappers/transformation/encryption.rb +5 -4
- data/lib/ruby_event_store/mappers/transformation/protobuf_nested_struct_metadata.rb +1 -2
- data/lib/ruby_event_store/projection.rb +1 -0
- data/lib/ruby_event_store/spec/event_lint.rb +2 -4
- data/lib/ruby_event_store/version.rb +1 -1
- metadata +6 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d0c79f8dae2279ab828fb59a201d367d5cda8d4734a2013e3a0e619fc57de3c9
|
4
|
+
data.tar.gz: 4fee68b6561a59730c7cc5cadf000653fa216c88729326ee15e0040ce6ab0322
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c901d6cbf77e77b7e58de6af3ad2f74836cd85aee7b800a09357ea3b8661db57cfbab6497261fbe7399348efa230f36a11f15ebbbae267baa7d71e1b1b988994
|
7
|
+
data.tar.gz: bc368139eeeedfba76e52ecbaff4487a9d5c73b3f2bd313fe3bccd4afd298ceb0c6ad08cf10b14a0fad163fe51dc161fbe79c8d815dfcd47f8ede17a34f1df30
|
data/Gemfile
CHANGED
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
|
15
|
-
result
|
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
|
-
|
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:
|
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
|
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]
|
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
|
-
|
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)}
|
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)
|
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
|
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
|
-
|
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
|
|
@@ -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
|
-
|
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
|
|
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:
|
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-
|
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.
|
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: []
|