ruby_event_store 0.42.0 → 1.1.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: 3f806b875525e8f268335372c58de01b45bf52e975cefe1a4359ff71eed9b137
4
- data.tar.gz: d7263a8da692d83db60d2568cd83d6e540d75d90f78c308a5617bb95472ec289
3
+ metadata.gz: 6c14775d70ee44777790b8b916ceee3b7801439494711a701aabb5a8904e8270
4
+ data.tar.gz: 9c11cdd6cc8a13a8e16749928acb174c1cc11ca5a5e56aae2d9338fbbb42f842
5
5
  SHA512:
6
- metadata.gz: ff355e361ebed03d0a0d1cf462213a6692540c8c3476ee1b5d08337be9e6bf2092e70a37161e8571ce59ce73b9c57ccb3c653dd1cd2914b6e1d8cb34ff88126e
7
- data.tar.gz: cd0031d809fa10271038a4233c36a4634d53527f8814212c32f990e3d2dfc1e8d264da0f03321e9fe448af357bd6677ff74ab76bd3844a3a7aed6c232cb891b9
6
+ metadata.gz: 15c4530f8da5f71f6e411296a7e228ccea5dc0a3b836cfa90d7ba6c9f1462881d85963d1f68e0995f7b86bf27f9ae4981a551e3fbd1aa8b5213238488144ecba
7
+ data.tar.gz: d925c31f958e72529c43fe4a006e74a0140b37bbddd667e1ac19cebca66963c59903a1aac136f1b080b2977b2019bb5e79c21bf9ab6bca5aa23c9f1db45293a8
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'
@@ -36,6 +36,7 @@ require 'ruby_event_store/mappers/default'
36
36
  require 'ruby_event_store/mappers/forgotten_data'
37
37
  require 'ruby_event_store/mappers/encryption_mapper'
38
38
  require 'ruby_event_store/mappers/instrumented_mapper'
39
+ require 'ruby_event_store/mappers/json_mapper'
39
40
  require 'ruby_event_store/mappers/null_mapper'
40
41
  require 'ruby_event_store/mappers/protobuf'
41
42
  require 'ruby_event_store/batch_enumerator'
@@ -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
@@ -8,7 +8,7 @@ module RubyEventStore
8
8
  end
9
9
 
10
10
  def call(event, serialized_event)
11
- subscribers = subscriptions.all_for(event.type)
11
+ subscribers = subscriptions.all_for(event.event_type)
12
12
  subscribers.each do |subscriber|
13
13
  dispatcher.call(subscriber, event, serialized_event)
14
14
  end
@@ -30,24 +30,10 @@ module RubyEventStore
30
30
 
31
31
  # Type of event. Used when matching with subscribed handlers.
32
32
  # @return [String]
33
- def type
33
+ def event_type
34
34
  self.class.name
35
35
  end
36
36
 
37
- # Returns a hash representation of the event.
38
- #
39
- # Metadata is converted to hash as well
40
- #
41
- # @return [Hash] with :event_id, :metadata, :data, :type keys
42
- def to_h
43
- {
44
- event_id: event_id,
45
- metadata: metadata.to_h,
46
- data: data,
47
- type: type,
48
- }
49
- end
50
-
51
37
  # Timestamp from metadata
52
38
  #
53
39
  # @return [Time, nil]
@@ -140,4 +126,4 @@ module RubyEventStore
140
126
 
141
127
  alias_method :eql?, :==
142
128
  end
143
- end
129
+ end
@@ -13,7 +13,7 @@ module RubyEventStore
13
13
  return unless event.metadata.has_key?(@key)
14
14
 
15
15
  @event_store.link(
16
- [event.message_id],
16
+ [event.event_id],
17
17
  stream_name: "#{@prefix}#{event.metadata.fetch(@key)}"
18
18
  )
19
19
  end
@@ -48,10 +48,10 @@ module RubyEventStore
48
48
 
49
49
  def call(event)
50
50
  @event_store.link(
51
- [event.message_id],
52
- stream_name: "#{@prefix}#{event.type}"
51
+ [event.event_id],
52
+ stream_name: "#{@prefix}#{event.event_type}"
53
53
  )
54
54
  end
55
55
  end
56
56
 
57
- end
57
+ end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RubyEventStore
4
+ module Mappers
5
+ class JSONMapper < PipelineMapper
6
+ def initialize(events_class_remapping: {})
7
+ super(Pipeline.new(
8
+ transformations: [
9
+ Transformation::EventClassRemapper.new(events_class_remapping),
10
+ Transformation::SymbolizeMetadataKeys.new,
11
+ ],
12
+ ))
13
+ end
14
+ end
15
+ end
16
+ end
@@ -2,15 +2,9 @@
2
2
 
3
3
  module RubyEventStore
4
4
  class Proto < RubyEventStore::Event
5
- def type
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
@@ -9,7 +9,7 @@ module RubyEventStore
9
9
  event_id: domain_event.event_id,
10
10
  metadata: domain_event.metadata.to_h,
11
11
  data: domain_event.data,
12
- event_type: domain_event.type
12
+ event_type: domain_event.event_type
13
13
  )
14
14
  end
15
15
 
@@ -82,14 +82,14 @@ module RubyEventStore
82
82
 
83
83
  def encrypt_data(data, meta)
84
84
  meta.reduce(data) do |acc, (key, value)|
85
- acc[key] = encrypt_attribute(acc, key, value)
85
+ acc[key] = encrypt_attribute(acc, key, value) if data.has_key?(key)
86
86
  acc
87
87
  end
88
88
  end
89
89
 
90
90
  def decrypt_data(data, meta)
91
91
  meta.reduce(data) do |acc, (key, value)|
92
- acc[key] = decrypt_attribute(data, key, value)
92
+ acc[key] = decrypt_attribute(data, key, value) if data.has_key?(key)
93
93
  acc
94
94
  end
95
95
  end
@@ -98,7 +98,7 @@ module RubyEventStore
98
98
  case meta
99
99
  when Leaf
100
100
  value = data.fetch(attribute)
101
- return unless value
101
+ return if value.nil?
102
102
 
103
103
  encryption_key = key_repository.key_of(meta.fetch(:identifier))
104
104
  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
 
@@ -15,8 +15,8 @@ module RubyEventStore
15
15
 
16
16
  def initialize(streams: [])
17
17
  @streams = streams
18
- @handlers = Hash.new { ->(_, _) {} }
19
- @init = -> { Hash.new }
18
+ @handlers = {}
19
+ @init = -> { {} }
20
20
  end
21
21
 
22
22
  attr_reader :streams, :handlers
@@ -43,7 +43,7 @@ module RubyEventStore
43
43
  end
44
44
 
45
45
  def call(event)
46
- handlers.fetch(event.type).(current_state, event)
46
+ handlers.fetch(event.event_type).(current_state, event)
47
47
  end
48
48
 
49
49
  def handled_events
@@ -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
@@ -83,6 +84,7 @@ module RubyEventStore
83
84
 
84
85
  def read_scope(event_store, stream, count, start)
85
86
  scope = event_store.read.in_batches(count)
87
+ scope = scope.of_type(handled_events)
86
88
  scope = scope.stream(stream) if stream
87
89
  scope = scope.from(start) if start
88
90
  scope
@@ -93,7 +95,7 @@ module RubyEventStore
93
95
  end
94
96
 
95
97
  def transition(state, event)
96
- handlers[event.type].(state, event)
98
+ handlers.fetch(event.event_type).call(state, event)
97
99
  state
98
100
  end
99
101
  end
@@ -1,5 +1,5 @@
1
1
  RSpec.shared_examples :broker do |broker_klass|
2
- let(:event) { instance_double(::RubyEventStore::Event, type: 'EventType') }
2
+ let(:event) { instance_double(::RubyEventStore::Event, event_type: 'EventType') }
3
3
  let(:serialized_event) { instance_double(::RubyEventStore::SerializedRecord) }
4
4
  let(:handler) { HandlerClass.new }
5
5
  let(:subscriptions) { ::RubyEventStore::Subscriptions.new }
@@ -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
 
@@ -29,11 +27,11 @@ RSpec.shared_examples :event do |event_class|
29
27
  expect(event.event_id).to eq '1234567890'
30
28
  end
31
29
 
32
- it 'provides type as string' do
30
+ it 'provides event type as string' do
33
31
  event = event_class.new
34
- expect(event.type).to be_an_instance_of(String)
35
- expect(event.type).not_to eq ''
36
- expect(event.type).not_to eq nil
32
+ expect(event.event_type).to be_an_instance_of(String)
33
+ expect(event.event_type).not_to eq ''
34
+ expect(event.event_type).not_to eq nil
37
35
  end
38
36
 
39
37
  it "provides data" do
@@ -5,7 +5,7 @@ module RubyEventStore
5
5
 
6
6
  expect(record).to be_kind_of(SerializedRecord)
7
7
  expect(record.event_id).to eq(domain_event.event_id)
8
- expect(record.event_type).to eq(domain_event.type)
8
+ expect(record.event_type).to eq(domain_event.event_type)
9
9
  end
10
10
 
11
11
  specify "serialize and deserialize gives equal event" do
@@ -151,7 +151,7 @@ module RubyEventStore
151
151
  def dup
152
152
  new_attributes = attributes.dup
153
153
  yield new_attributes if block_given?
154
- SpecificationResult.new(new_attributes.to_h)
154
+ SpecificationResult.new(**new_attributes.to_h)
155
155
  end
156
156
 
157
157
  # Two specification attributess are equal if:
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module RubyEventStore
4
- VERSION = "0.42.0"
4
+ VERSION = "1.1.1"
5
5
  end
@@ -25,5 +25,5 @@ Gem::Specification.new do |spec|
25
25
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
26
26
  spec.require_paths = ['lib']
27
27
 
28
- spec.add_dependency 'concurrent-ruby', '~> 1.0'
28
+ spec.add_dependency 'concurrent-ruby', '~> 1.0', '>= 1.1.6'
29
29
  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.42.0
4
+ version: 1.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Arkency
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-09-30 00:00:00.000000000 Z
11
+ date: 2020-08-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: concurrent-ruby
@@ -17,6 +17,9 @@ dependencies:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
19
  version: '1.0'
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: 1.1.6
20
23
  type: :runtime
21
24
  prerelease: false
22
25
  version_requirements: !ruby/object:Gem::Requirement
@@ -24,6 +27,9 @@ dependencies:
24
27
  - - "~>"
25
28
  - !ruby/object:Gem::Version
26
29
  version: '1.0'
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: 1.1.6
27
33
  description: Implementation of Event Store in Ruby
28
34
  email:
29
35
  - dev@arkency.com
@@ -57,6 +63,7 @@ files:
57
63
  - lib/ruby_event_store/mappers/forgotten_data.rb
58
64
  - lib/ruby_event_store/mappers/in_memory_encryption_key_repository.rb
59
65
  - lib/ruby_event_store/mappers/instrumented_mapper.rb
66
+ - lib/ruby_event_store/mappers/json_mapper.rb
60
67
  - lib/ruby_event_store/mappers/null_mapper.rb
61
68
  - lib/ruby_event_store/mappers/pipeline.rb
62
69
  - lib/ruby_event_store/mappers/pipeline_mapper.rb
@@ -113,7 +120,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
113
120
  - !ruby/object:Gem::Version
114
121
  version: '0'
115
122
  requirements: []
116
- rubygems_version: 3.0.6
123
+ rubygems_version: 3.0.3
117
124
  signing_key:
118
125
  specification_version: 4
119
126
  summary: Event Store in Ruby