sandthorn 0.6.0 → 0.7.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: f39fd41916e13c8d9af482497da9774295644984
4
- data.tar.gz: b3ae469f87f318a99d27f34049513cf35cae754d
3
+ metadata.gz: 692bd55290b3092568fa5d7ed3d18be9f4d8e581
4
+ data.tar.gz: 41f6b41d080e0b6b2304412a25a435a7c9979021
5
5
  SHA512:
6
- metadata.gz: 2c3d769b134a6421cfe4164190726c9ce1448f06962ee24aee7aec32f14fc1cf7c4c6e5c2a6160c62a0c316f482e8d72709463c2ac3f0298e7584ab02f604011
7
- data.tar.gz: d54a6d161c31dd38ff4bd03217035d35d2f445419d83c59caca649828b32543eaf9714ed8832b56f4262315fad95992936b778bdda52f602254103611067b6c2
6
+ metadata.gz: 764d97697a9b452ba6acdc82b13006c6c6b1118b481908c8a8e17c5b4acd3286009030e0ea5c74d584514cad2ee9f848d4ea8566cff5d9590c6c7c0f345682b0
7
+ data.tar.gz: c3a218cc83d50f65a319200293f7110ed2be7788af640a58ac94efbe439b9da824f3ce1049264c149589e54f556ba273e44d9e95a2a10bf81849267dce71693a
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- sandthorn (0.6.0)
4
+ sandthorn (0.7.0)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
@@ -22,7 +22,7 @@ GEM
22
22
  mime-types (2.4.3)
23
23
  multi_json (1.10.1)
24
24
  netrc (0.8.0)
25
- pg (0.17.1)
25
+ pg (0.18.1)
26
26
  pry (0.10.1)
27
27
  coderay (~> 1.1.0)
28
28
  method_source (~> 0.8.1)
@@ -46,10 +46,10 @@ GEM
46
46
  rspec-mocks (3.1.3)
47
47
  rspec-support (~> 3.1.0)
48
48
  rspec-support (3.1.2)
49
- sandthorn_driver_sequel (1.1.0)
49
+ sandthorn_driver_sequel (2.0.0)
50
50
  pg
51
- sequel
52
- sequel (4.15.0)
51
+ sequel (~> 4.17)
52
+ sequel (4.20.0)
53
53
  simplecov (0.9.1)
54
54
  docile (~> 1.1.0)
55
55
  multi_json (~> 1.0)
@@ -77,5 +77,5 @@ DEPENDENCIES
77
77
  rake
78
78
  rspec (~> 3.0)
79
79
  sandthorn!
80
- sandthorn_driver_sequel (~> 1.1)
80
+ sandthorn_driver_sequel (~> 2.0)
81
81
  sqlite3
data/lib/sandthorn.rb CHANGED
@@ -1,5 +1,6 @@
1
1
  require "sandthorn/version"
2
2
  require "sandthorn/errors"
3
+ require "sandthorn/event"
3
4
  require "sandthorn/aggregate_root"
4
5
  require "sandthorn/event_stores"
5
6
  require 'yaml'
@@ -45,38 +46,42 @@ module Sandthorn
45
46
  SecureRandom.uuid
46
47
  end
47
48
 
48
- def get_aggregate_events aggregate_id, aggregate_type
49
- event_store_for(aggregate_type).get_aggregate_events aggregate_id, aggregate_type
49
+ def get_aggregate_events aggregate_type, aggregate_id
50
+ event_store_for(aggregate_type).get_aggregate_events aggregate_id
50
51
  end
51
52
 
52
- def save_events aggregate_events, originating_aggregate_version, aggregate_id, aggregate_type
53
- event_store_for(aggregate_type).save_events aggregate_events, originating_aggregate_version, aggregate_id, *aggregate_type
53
+ def save_events aggregate_events, aggregate_id, aggregate_type
54
+ event_store_for(aggregate_type).save_events aggregate_events, aggregate_id, *aggregate_type
54
55
  end
55
56
 
56
57
  def get_aggregate aggregate_id, aggregate_type
57
- event_store_for(aggregate_type).get_aggregate aggregate_id, aggregate_type
58
+ event_store_for(aggregate_type).get_aggregate_events_from_snapshot aggregate_id
58
59
  end
59
60
 
60
- def save_snapshot aggregate_snapshot, aggregate_id, aggregate_type
61
- event_store_for(aggregate_type).save_snapshot aggregate_snapshot, aggregate_id, aggregate_type
61
+ def save_snapshot(
62
+ aggregate_type: missing_key(:aggregate_type),
63
+ aggregate_snapshot: missing_key(:aggregate_snapshot),
64
+ aggregate_id: missing_key(:aggregate_id)
65
+ )
66
+ event_store_for(aggregate_type).save_snapshot(aggregate_snapshot, aggregate_id)
62
67
  end
63
68
 
64
69
  def get_aggregate_list_by_type aggregate_type
65
- event_store_for(aggregate_type).get_aggregate_list_by_typename aggregate_type
70
+ event_store_for(aggregate_type).get_aggregate_ids(aggregate_type: aggregate_type)
66
71
  end
67
72
 
68
73
  def get_events event_store: :default, aggregate_types: [], take: 0, after_sequence_number: 0
69
74
  event_store = find_event_store(event_store)
70
75
  events = event_store.get_events aggregate_types: aggregate_types, take: take, after_sequence_number: after_sequence_number
71
- events.each do |event|
76
+ events.map do |event|
72
77
  event[:event_args] = deserialize event[:event_data]
73
78
  event.delete(:event_data)
79
+ Event.new(event)
74
80
  end
75
- events
76
81
  end
77
82
 
78
83
  def obsolete_snapshots type_names: [], min_event_distance: 0
79
- obsolete = event_stores.flat_map { |event_store| event_store.obsolete_snapshots(class_names: type_names, max_event_distance: min_event_distance) }
84
+ obsolete = event_stores.flat_map { |event_store| event_store.obsolete_snapshots(aggregate_types: type_names, max_event_distance: min_event_distance) }
80
85
  obsolete.map do |single_obsolete|
81
86
  type = Kernel.const_get single_obsolete[:aggregate_type]
82
87
  aggregate = type.aggregate_find(single_obsolete[:aggregate_id]).tap do |agg|
@@ -97,6 +102,10 @@ module Sandthorn
97
102
  end
98
103
  end
99
104
 
105
+ def missing_key(key)
106
+ raise ArgumentError, "missing keyword: #{key}"
107
+ end
108
+
100
109
  class Configuration
101
110
  extend Forwardable
102
111
 
@@ -27,7 +27,6 @@ module Sandthorn
27
27
  unless aggregate_events.empty?
28
28
  Sandthorn.save_events(
29
29
  aggregate_events,
30
- aggregate_originating_version,
31
30
  aggregate_id,
32
31
  self.class
33
32
  )
@@ -27,7 +27,7 @@ module Sandthorn
27
27
  end
28
28
  @aggregate_snapshot[:event_data] = Sandthorn.serialize @aggregate_snapshot[:event_args]
29
29
  @aggregate_snapshot[:event_args] = nil
30
- Sandthorn.save_snapshot @aggregate_snapshot, @aggregate_id, self.class
30
+ Sandthorn.save_snapshot(aggregate_snapshot: @aggregate_snapshot, aggregate_id: @aggregate_id, aggregate_type: self.class)
31
31
  @aggregate_snapshot = nil
32
32
  end
33
33
  private
@@ -44,7 +44,7 @@ module Sandthorn
44
44
  .serialize aggregate_snapshot[:event_args]
45
45
 
46
46
  @aggregate_snapshot[:event_args] = nil
47
- Sandthorn.save_snapshot aggregate_snapshot, aggregate_id, self.class.name
47
+ Sandthorn.save_snapshot aggregate_snapshot, aggregate_id
48
48
  @aggregate_snapshot = nil
49
49
  end
50
50
  end
@@ -0,0 +1,60 @@
1
+ require 'delegate'
2
+
3
+ module Sandthorn
4
+ class Event < SimpleDelegator
5
+ ATTRS = %i(
6
+ aggregate_id
7
+ aggregate_type
8
+ aggregate_version
9
+ timestamp
10
+ event_name
11
+ event_args
12
+ method_args
13
+ trace
14
+ )
15
+
16
+ ATTRS.each do |attr|
17
+ define_method(attr) do
18
+ self[attr]
19
+ end
20
+ end
21
+
22
+ def new_values
23
+ @changed_attributes ||= build_new_values
24
+ end
25
+
26
+ def attribute_deltas
27
+ @attribute_deltas ||= build_deltas
28
+ end
29
+
30
+ private
31
+
32
+ def build_deltas
33
+ raw_deltas.map { |delta| AttributeDelta.new(delta) }
34
+ end
35
+
36
+ def build_new_values
37
+ attribute_deltas.each_with_object({}) do |delta, changed|
38
+ changed[delta.attribute_name.to_sym] = delta.new_value
39
+ end
40
+ end
41
+
42
+ def raw_deltas
43
+ fetch(:event_args, {}).fetch(:attribute_deltas, [])
44
+ end
45
+
46
+ class AttributeDelta < SimpleDelegator
47
+ ATTRS = %i(
48
+ attribute_name
49
+ old_value
50
+ new_value
51
+ )
52
+
53
+ ATTRS.each do |attr|
54
+ define_method(attr) do
55
+ self[attr]
56
+ end
57
+ end
58
+ end
59
+ end
60
+ end
@@ -46,7 +46,7 @@ module Sandthorn
46
46
  end
47
47
 
48
48
  def events_with_trace_info
49
- saved = Sandthorn.get_aggregate_events self.aggregate_id, self.class
49
+ saved = Sandthorn.get_aggregate_events(self.class, aggregate_id)
50
50
  unsaved = self.aggregate_events
51
51
  all = saved
52
52
  .concat(unsaved)
@@ -1,3 +1,3 @@
1
1
  module Sandthorn
2
- VERSION = "0.6.0"
2
+ VERSION = "0.7.0"
3
3
  end
data/sandthorn.gemspec CHANGED
@@ -6,8 +6,8 @@ require 'sandthorn/version'
6
6
  Gem::Specification.new do |spec|
7
7
  spec.name = "sandthorn"
8
8
  spec.version = Sandthorn::VERSION
9
- spec.authors = ["Lars Krantz", "Morgan Hallgren"]
10
- spec.email = ["lars.krantz@alaz.se", "morgan.hallgren@gmail.com"]
9
+ spec.authors = ["Lars Krantz", "Morgan Hallgren", "Jesper Josefsson"]
10
+ spec.email = ["lars.krantz@alaz.se", "morgan.hallgren@gmail.com", "jesper.josefsson@gmail.com"]
11
11
  spec.description = %q{Event sourcing gem}
12
12
  spec.summary = %q{Event sourcing gem}
13
13
  spec.homepage = ""
@@ -29,5 +29,5 @@ Gem::Specification.new do |spec|
29
29
  spec.add_development_dependency "autotest-standalone"
30
30
  spec.add_development_dependency "sqlite3"
31
31
  spec.add_development_dependency "coveralls"
32
- spec.add_development_dependency "sandthorn_driver_sequel", "~> 1.1"
32
+ spec.add_development_dependency "sandthorn_driver_sequel", "~> 2.0"
33
33
  end
@@ -0,0 +1,99 @@
1
+ require 'spec_helper'
2
+
3
+ module Sandthorn
4
+ describe Event do
5
+ let(:event_data) do
6
+ JSON.parse(
7
+ '{"aggregate_type":"SandthornProduct",
8
+ "aggregate_version":1,
9
+ "aggregate_id":"62d88e96-c551-4157-a837-1674e3f2698d",
10
+ "sequence_number":114,
11
+ "event_name":"new",
12
+ "timestamp":"2014-08-16 20:02:05 UTC",
13
+ "event_args":{"method_name":"new",
14
+ "method_args":[{"name":"Hahah",
15
+ "price":"50",
16
+ "stock_status":"outofstock"}],
17
+ "attribute_deltas":[{"attribute_name":"name",
18
+ "old_value":null,
19
+ "new_value":"Hahah"},
20
+ {"attribute_name":"price",
21
+ "old_value":null,
22
+ "new_value":50},
23
+ {"attribute_name":"stock_status",
24
+ "old_value":null,
25
+ "new_value":"outofstock"},
26
+ {"attribute_name":"active",
27
+ "old_value":null,
28
+ "new_value":true},
29
+ {"attribute_name":"on_sale",
30
+ "old_value":null,
31
+ "new_value":false},
32
+ {"attribute_name":"aggregate_id",
33
+ "old_value":null,
34
+ "new_value":"62d88e96-c551-4157-a837-1674e3f2698d"}]}}', symbolize_names: true)
35
+ end
36
+
37
+ let(:subject) { Event.new(event_data) }
38
+ describe "primitive attributes" do
39
+ attrs = %i(
40
+ aggregate_id
41
+ aggregate_type
42
+ aggregate_version
43
+ timestamp
44
+ event_name
45
+ event_args
46
+ method_args
47
+ trace
48
+ )
49
+
50
+ attrs.each do |attr|
51
+ it "has an accessor for #{attr}" do
52
+ expect(subject.send(attr)).to eq(subject[attr])
53
+ end
54
+ end
55
+ end
56
+
57
+ describe "#new_values" do
58
+ context "when given the value of an attribute that has changed" do
59
+ it "returns the new value" do
60
+ expect(subject.new_values[:name]).to eq("Hahah")
61
+ end
62
+ end
63
+
64
+ context "when given a non-existing attribute name" do
65
+ it "returns nil" do
66
+ expect(subject.new_values[:foo]).to be_nil
67
+ end
68
+ end
69
+ end
70
+
71
+ describe "#attributes_deltas" do
72
+ it "returns something enumerable" do
73
+ expect(subject.attribute_deltas).to respond_to(:each)
74
+ end
75
+
76
+ describe "a delta" do
77
+ let(:wrapped_delta) { subject.attribute_deltas.first }
78
+ let(:raw_delta) { subject[:event_args][:attribute_deltas].first }
79
+ describe "#attribute_name" do
80
+ it "has the same value as the raw hash" do
81
+ expect(wrapped_delta.attribute_name).to eq(raw_delta[:attribute_name])
82
+ end
83
+ end
84
+
85
+ describe "#new_value" do
86
+ it "has the same value as the raw hash" do
87
+ expect(wrapped_delta.new_value).to eq(raw_delta[:new_value])
88
+ end
89
+ end
90
+
91
+ describe "#old_value" do
92
+ it "has the same value as the raw hash" do
93
+ expect(wrapped_delta.old_value).to eq(raw_delta[:old_value])
94
+ end
95
+ end
96
+ end
97
+ end
98
+ end
99
+ end
@@ -52,4 +52,12 @@ describe Sandthorn do
52
52
  end
53
53
  end
54
54
  end
55
+
56
+ describe "::save_snapshot" do
57
+ context "when a keyword is missing" do
58
+ it "raises an ArgumentError" do
59
+ expect { Sandthorn.save_snapshot }.to raise_error(ArgumentError)
60
+ end
61
+ end
62
+ end
55
63
  end
metadata CHANGED
@@ -1,184 +1,186 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sandthorn
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.0
4
+ version: 0.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Lars Krantz
8
8
  - Morgan Hallgren
9
+ - Jesper Josefsson
9
10
  autorequire:
10
11
  bindir: bin
11
12
  cert_chain: []
12
- date: 2015-03-04 00:00:00.000000000 Z
13
+ date: 2015-03-11 00:00:00.000000000 Z
13
14
  dependencies:
14
15
  - !ruby/object:Gem::Dependency
15
16
  name: bundler
16
17
  requirement: !ruby/object:Gem::Requirement
17
18
  requirements:
18
- - - "~>"
19
+ - - ~>
19
20
  - !ruby/object:Gem::Version
20
21
  version: '1.3'
21
22
  type: :development
22
23
  prerelease: false
23
24
  version_requirements: !ruby/object:Gem::Requirement
24
25
  requirements:
25
- - - "~>"
26
+ - - ~>
26
27
  - !ruby/object:Gem::Version
27
28
  version: '1.3'
28
29
  - !ruby/object:Gem::Dependency
29
30
  name: rake
30
31
  requirement: !ruby/object:Gem::Requirement
31
32
  requirements:
32
- - - ">="
33
+ - - '>='
33
34
  - !ruby/object:Gem::Version
34
35
  version: '0'
35
36
  type: :development
36
37
  prerelease: false
37
38
  version_requirements: !ruby/object:Gem::Requirement
38
39
  requirements:
39
- - - ">="
40
+ - - '>='
40
41
  - !ruby/object:Gem::Version
41
42
  version: '0'
42
43
  - !ruby/object:Gem::Dependency
43
44
  name: rspec
44
45
  requirement: !ruby/object:Gem::Requirement
45
46
  requirements:
46
- - - "~>"
47
+ - - ~>
47
48
  - !ruby/object:Gem::Version
48
49
  version: '3.0'
49
50
  type: :development
50
51
  prerelease: false
51
52
  version_requirements: !ruby/object:Gem::Requirement
52
53
  requirements:
53
- - - "~>"
54
+ - - ~>
54
55
  - !ruby/object:Gem::Version
55
56
  version: '3.0'
56
57
  - !ruby/object:Gem::Dependency
57
58
  name: gem-release
58
59
  requirement: !ruby/object:Gem::Requirement
59
60
  requirements:
60
- - - ">="
61
+ - - '>='
61
62
  - !ruby/object:Gem::Version
62
63
  version: '0'
63
64
  type: :development
64
65
  prerelease: false
65
66
  version_requirements: !ruby/object:Gem::Requirement
66
67
  requirements:
67
- - - ">="
68
+ - - '>='
68
69
  - !ruby/object:Gem::Version
69
70
  version: '0'
70
71
  - !ruby/object:Gem::Dependency
71
72
  name: pry
72
73
  requirement: !ruby/object:Gem::Requirement
73
74
  requirements:
74
- - - ">="
75
+ - - '>='
75
76
  - !ruby/object:Gem::Version
76
77
  version: '0'
77
78
  type: :development
78
79
  prerelease: false
79
80
  version_requirements: !ruby/object:Gem::Requirement
80
81
  requirements:
81
- - - ">="
82
+ - - '>='
82
83
  - !ruby/object:Gem::Version
83
84
  version: '0'
84
85
  - !ruby/object:Gem::Dependency
85
86
  name: pry-doc
86
87
  requirement: !ruby/object:Gem::Requirement
87
88
  requirements:
88
- - - ">="
89
+ - - '>='
89
90
  - !ruby/object:Gem::Version
90
91
  version: '0'
91
92
  type: :development
92
93
  prerelease: false
93
94
  version_requirements: !ruby/object:Gem::Requirement
94
95
  requirements:
95
- - - ">="
96
+ - - '>='
96
97
  - !ruby/object:Gem::Version
97
98
  version: '0'
98
99
  - !ruby/object:Gem::Dependency
99
100
  name: awesome_print
100
101
  requirement: !ruby/object:Gem::Requirement
101
102
  requirements:
102
- - - ">="
103
+ - - '>='
103
104
  - !ruby/object:Gem::Version
104
105
  version: '0'
105
106
  type: :development
106
107
  prerelease: false
107
108
  version_requirements: !ruby/object:Gem::Requirement
108
109
  requirements:
109
- - - ">="
110
+ - - '>='
110
111
  - !ruby/object:Gem::Version
111
112
  version: '0'
112
113
  - !ruby/object:Gem::Dependency
113
114
  name: autotest-standalone
114
115
  requirement: !ruby/object:Gem::Requirement
115
116
  requirements:
116
- - - ">="
117
+ - - '>='
117
118
  - !ruby/object:Gem::Version
118
119
  version: '0'
119
120
  type: :development
120
121
  prerelease: false
121
122
  version_requirements: !ruby/object:Gem::Requirement
122
123
  requirements:
123
- - - ">="
124
+ - - '>='
124
125
  - !ruby/object:Gem::Version
125
126
  version: '0'
126
127
  - !ruby/object:Gem::Dependency
127
128
  name: sqlite3
128
129
  requirement: !ruby/object:Gem::Requirement
129
130
  requirements:
130
- - - ">="
131
+ - - '>='
131
132
  - !ruby/object:Gem::Version
132
133
  version: '0'
133
134
  type: :development
134
135
  prerelease: false
135
136
  version_requirements: !ruby/object:Gem::Requirement
136
137
  requirements:
137
- - - ">="
138
+ - - '>='
138
139
  - !ruby/object:Gem::Version
139
140
  version: '0'
140
141
  - !ruby/object:Gem::Dependency
141
142
  name: coveralls
142
143
  requirement: !ruby/object:Gem::Requirement
143
144
  requirements:
144
- - - ">="
145
+ - - '>='
145
146
  - !ruby/object:Gem::Version
146
147
  version: '0'
147
148
  type: :development
148
149
  prerelease: false
149
150
  version_requirements: !ruby/object:Gem::Requirement
150
151
  requirements:
151
- - - ">="
152
+ - - '>='
152
153
  - !ruby/object:Gem::Version
153
154
  version: '0'
154
155
  - !ruby/object:Gem::Dependency
155
156
  name: sandthorn_driver_sequel
156
157
  requirement: !ruby/object:Gem::Requirement
157
158
  requirements:
158
- - - "~>"
159
+ - - ~>
159
160
  - !ruby/object:Gem::Version
160
- version: '1.1'
161
+ version: '2.0'
161
162
  type: :development
162
163
  prerelease: false
163
164
  version_requirements: !ruby/object:Gem::Requirement
164
165
  requirements:
165
- - - "~>"
166
+ - - ~>
166
167
  - !ruby/object:Gem::Version
167
- version: '1.1'
168
+ version: '2.0'
168
169
  description: Event sourcing gem
169
170
  email:
170
171
  - lars.krantz@alaz.se
171
172
  - morgan.hallgren@gmail.com
173
+ - jesper.josefsson@gmail.com
172
174
  executables: []
173
175
  extensions: []
174
176
  extra_rdoc_files: []
175
177
  files:
176
- - ".autotest"
177
- - ".gitignore"
178
- - ".rspec"
179
- - ".ruby-gemset"
180
- - ".ruby-version"
181
- - ".travis.yml"
178
+ - .autotest
179
+ - .gitignore
180
+ - .rspec
181
+ - .ruby-gemset
182
+ - .ruby-version
183
+ - .travis.yml
182
184
  - Gemfile
183
185
  - Gemfile.lock
184
186
  - Gemfile.lock.old
@@ -192,6 +194,7 @@ files:
192
194
  - lib/sandthorn/aggregate_root_marshal.rb
193
195
  - lib/sandthorn/aggregate_root_snapshot.rb
194
196
  - lib/sandthorn/errors.rb
197
+ - lib/sandthorn/event.rb
195
198
  - lib/sandthorn/event_inspector.rb
196
199
  - lib/sandthorn/event_stores.rb
197
200
  - lib/sandthorn/version.rb
@@ -204,6 +207,7 @@ files:
204
207
  - spec/db/sequel_driver.sqlite3_old
205
208
  - spec/different_driver_spec.rb
206
209
  - spec/event_inspector_spec.rb
210
+ - spec/event_spec.rb
207
211
  - spec/event_stores_spec.rb
208
212
  - spec/get_events_spec.rb
209
213
  - spec/initialize_signature_change_spec.rb
@@ -221,17 +225,17 @@ require_paths:
221
225
  - lib
222
226
  required_ruby_version: !ruby/object:Gem::Requirement
223
227
  requirements:
224
- - - ">="
228
+ - - '>='
225
229
  - !ruby/object:Gem::Version
226
230
  version: '2.0'
227
231
  required_rubygems_version: !ruby/object:Gem::Requirement
228
232
  requirements:
229
- - - ">="
233
+ - - '>='
230
234
  - !ruby/object:Gem::Version
231
235
  version: '0'
232
236
  requirements: []
233
237
  rubyforge_project:
234
- rubygems_version: 2.4.3
238
+ rubygems_version: 2.2.2
235
239
  signing_key:
236
240
  specification_version: 4
237
241
  summary: Event sourcing gem
@@ -244,6 +248,7 @@ test_files:
244
248
  - spec/db/sequel_driver.sqlite3_old
245
249
  - spec/different_driver_spec.rb
246
250
  - spec/event_inspector_spec.rb
251
+ - spec/event_spec.rb
247
252
  - spec/event_stores_spec.rb
248
253
  - spec/get_events_spec.rb
249
254
  - spec/initialize_signature_change_spec.rb