ruby_event_store 0.26.0 → 0.27.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: a57244de5351622091fa442885288c1775dc5ad0
4
- data.tar.gz: 2280e2361f7c8466484caa459822c28e213d1b4d
3
+ metadata.gz: 04babfc6a0fb84bd5d00bb43f7e1579648301aa7
4
+ data.tar.gz: dfb8f805ab5012b49489bd81a46e3e255c046895
5
5
  SHA512:
6
- metadata.gz: d64e4f0c8d49aa4161df43acddd7e16ff16ea9c7e193826a3817224035b27f9953ec943da86126b8cb94f9e41ac3fd5d4ab29d8058038d19be3a0c4fd8e94523
7
- data.tar.gz: e3cc5306c6ae098ed5d3544000a1a1aa87ae672a9c9a66510e64141ad813ae8b28123b8b24cf69125e0393c446a17aca7c077a5c4098849405e02607379d7c33
6
+ metadata.gz: 9c5e2f7f5cc890c57c9aea3a9c037ee4772127b6f8517034a405fd5ba8396c83b3a5a56ccf9cb5e2e2af2588eca7ab60571f854496215a1958aaf2222a6a4d47
7
+ data.tar.gz: 92a1da7e1792f0eb907f67f4cf1cf43ebfad5cffcf9cc46f6f18d6c3cc9aacac28de577be7cc8103504e7c5745367011b0274bbe3ddca60f6a0ab16ae8343ed5
data/Gemfile CHANGED
@@ -1,2 +1,3 @@
1
1
  source 'https://rubygems.org'
2
2
  gemspec
3
+ gem 'pry'
data/Makefile CHANGED
@@ -6,6 +6,8 @@ IGNORE = RubyEventStore.const_missing \
6
6
  RubyEventStore::InMemoryRepository\#normalize_to_array \
7
7
  RubyEventStore::Client\#normalize_to_array \
8
8
  RubyEventStore::Client::Within\#normalize_to_array \
9
+ RubyEventStore::Client::Within\#add_thread_subscribers \
10
+ RubyEventStore::Client::Within\#add_thread_global_subscribers \
9
11
  RubyEventStore::SerializedRecord \
10
12
  RubyEventStore::Projection\#read_events_from_stream \
11
13
  RubyEventStore::Projection\#read_events_from_all_streams
@@ -152,18 +152,26 @@ module RubyEventStore
152
152
  end
153
153
 
154
154
  def call
155
- unsubs = @global_subscribers.map do |s|
156
- @event_broker.add_thread_global_subscriber(s)
157
- end
158
- unsubs += @subscribers.map do |handler, types|
159
- @event_broker.add_thread_subscriber(handler, types)
160
- end
155
+ unsubs = add_thread_global_subscribers
156
+ unsubs += add_thread_subscribers
161
157
  @block.call
162
158
  ensure
163
159
  unsubs.each(&:call)
164
160
  end
165
161
 
166
162
  private
163
+
164
+ def add_thread_subscribers
165
+ @subscribers.map do |handler, types|
166
+ @event_broker.add_thread_subscriber(handler, types)
167
+ end
168
+ end
169
+
170
+ def add_thread_global_subscribers
171
+ @global_subscribers.map do |s|
172
+ @event_broker.add_thread_global_subscriber(s)
173
+ end
174
+ end
167
175
 
168
176
  def normalize_to_array(objs)
169
177
  return *objs
@@ -182,11 +190,12 @@ module RubyEventStore
182
190
  end
183
191
 
184
192
  def enrich_event_metadata(event)
185
- metadata = event.metadata
193
+ metadata = {}
186
194
  metadata[:timestamp] ||= @clock.()
187
195
  metadata.merge!(@metadata_proc.call || {}) if @metadata_proc
188
-
189
- # event.class.new(event_id: event.event_id, metadata: metadata, data: event.data)
196
+ metadata.each do |key, value|
197
+ @repository.add_metadata(event, key, value)
198
+ end
190
199
  end
191
200
 
192
201
  class Page
@@ -3,10 +3,12 @@ require 'thread'
3
3
 
4
4
  module RubyEventStore
5
5
  class InMemoryRepository
6
- def initialize
6
+
7
+ def initialize(mapper: Mappers::Default.new)
7
8
  @all = Array.new
8
9
  @streams = Hash.new
9
10
  @mutex = Mutex.new
11
+ @mapper = mapper
10
12
  end
11
13
 
12
14
  def append_to_stream(events, stream_name, expected_version)
@@ -64,6 +66,10 @@ module RubyEventStore
64
66
  [Stream.new("all")] + @streams.keys.map { |name| Stream.new(name) }
65
67
  end
66
68
 
69
+ def add_metadata(event, key, value)
70
+ @mapper.add_metadata(event, key, value)
71
+ end
72
+
67
73
  private
68
74
 
69
75
  def normalize_to_array(events)
@@ -1,5 +1,4 @@
1
1
  require 'yaml'
2
- require 'active_support'
3
2
 
4
3
  module RubyEventStore
5
4
  module Mappers
@@ -20,12 +19,17 @@ module RubyEventStore
20
19
 
21
20
  def serialized_record_to_event(record)
22
21
  event_type = @events_class_remapping.fetch(record.event_type) { record.event_type }
23
- ActiveSupport::Inflector.constantize(event_type).new(
22
+ Object.const_get(event_type).new(
24
23
  event_id: record.event_id,
25
24
  metadata: @serializer.load(record.metadata),
26
25
  data: @serializer.load(record.data)
27
26
  )
28
27
  end
28
+
29
+ def add_metadata(event, key, value)
30
+ event.metadata[key.to_sym] = value
31
+ end
32
+
29
33
  end
30
34
  end
31
35
  end
@@ -0,0 +1,35 @@
1
+ module RubyEventStore
2
+ module Mappers
3
+ class Protobuf
4
+ def initialize(event_id_getter: :event_id, events_class_remapping: {})
5
+ @event_id_getter = event_id_getter
6
+ @events_class_remapping = events_class_remapping
7
+ end
8
+
9
+ def event_to_serialized_record(domain_event)
10
+ SerializedRecord.new(
11
+ event_id: domain_event.public_send(event_id_getter),
12
+ metadata: "",
13
+ data: domain_event.class.encode(domain_event),
14
+ event_type: domain_event.class.name
15
+ )
16
+ end
17
+
18
+ def serialized_record_to_event(record)
19
+ event_type = events_class_remapping.fetch(record.event_type) { record.event_type }
20
+ Object.const_get(event_type).decode(record.data)
21
+ end
22
+
23
+ def add_metadata(event, key, value)
24
+ setter = "#{key}="
25
+ if event.respond_to?(setter)
26
+ event.public_send(setter, value)
27
+ end
28
+ end
29
+
30
+ private
31
+
32
+ attr_reader :event_id_getter, :events_class_remapping
33
+ end
34
+ end
35
+ end
@@ -925,4 +925,7 @@ RSpec.shared_examples :event_repository do |repository_class|
925
925
  end
926
926
  end
927
927
 
928
+ specify 'add_metadata' do
929
+ expect(repository).to respond_to(:add_metadata)
930
+ end
928
931
  end
@@ -1,3 +1,3 @@
1
1
  module RubyEventStore
2
- VERSION = "0.26.0"
2
+ VERSION = "0.27.0"
3
3
  end
@@ -10,4 +10,5 @@ require 'ruby_event_store/stream'
10
10
  require 'ruby_event_store/deprecations'
11
11
  require 'ruby_event_store/serialized_record'
12
12
  require 'ruby_event_store/mappers/default'
13
+ require 'ruby_event_store/mappers/protobuf'
13
14
  require 'ruby_event_store/version'
@@ -20,10 +20,10 @@ Gem::Specification.new do |spec|
20
20
  spec.require_paths = ['lib']
21
21
 
22
22
 
23
- spec.add_dependency 'activesupport'
24
23
  spec.add_dependency 'concurrent-ruby', '~> 1.0'
25
24
  spec.add_development_dependency 'bundler', '~> 1.15'
26
25
  spec.add_development_dependency 'rake', '~> 10.0'
27
26
  spec.add_development_dependency 'rspec', '~> 3.6'
28
27
  spec.add_development_dependency 'mutant-rspec', '~> 0.8.14'
28
+ spec.add_development_dependency 'google-protobuf', '~> 3.5.1.2'
29
29
  end
metadata CHANGED
@@ -1,29 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby_event_store
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.26.0
4
+ version: 0.27.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Arkency
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-03-06 00:00:00.000000000 Z
11
+ date: 2018-03-26 00:00:00.000000000 Z
12
12
  dependencies:
13
- - !ruby/object:Gem::Dependency
14
- name: activesupport
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - ">="
18
- - !ruby/object:Gem::Version
19
- version: '0'
20
- type: :runtime
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - ">="
25
- - !ruby/object:Gem::Version
26
- version: '0'
27
13
  - !ruby/object:Gem::Dependency
28
14
  name: concurrent-ruby
29
15
  requirement: !ruby/object:Gem::Requirement
@@ -94,6 +80,20 @@ dependencies:
94
80
  - - "~>"
95
81
  - !ruby/object:Gem::Version
96
82
  version: 0.8.14
83
+ - !ruby/object:Gem::Dependency
84
+ name: google-protobuf
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: 3.5.1.2
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: 3.5.1.2
97
97
  description: Implementation of Event Store in Ruby
98
98
  email:
99
99
  - dev@arkency.com
@@ -113,6 +113,7 @@ files:
113
113
  - lib/ruby_event_store/event.rb
114
114
  - lib/ruby_event_store/in_memory_repository.rb
115
115
  - lib/ruby_event_store/mappers/default.rb
116
+ - lib/ruby_event_store/mappers/protobuf.rb
116
117
  - lib/ruby_event_store/projection.rb
117
118
  - lib/ruby_event_store/pub_sub/broker.rb
118
119
  - lib/ruby_event_store/pub_sub/dispatcher.rb
@@ -143,7 +144,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
143
144
  version: '0'
144
145
  requirements: []
145
146
  rubyforge_project:
146
- rubygems_version: 2.6.13
147
+ rubygems_version: 2.6.14
147
148
  signing_key:
148
149
  specification_version: 4
149
150
  summary: Event Store in Ruby