ruby_event_store 0.26.0 → 0.27.0

Sign up to get free protection for your applications and to get access to all the features.
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