sandthorn 1.0.0 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -70,6 +70,6 @@ describe 'when using complex types in events' do
70
70
  aggr = IAmComplex.aggregate_build @events
71
71
  aggr.set_foo_bar_on_hello "morgan"
72
72
  builded = IAmComplex.aggregate_build aggr.aggregate_events
73
- expect(builded.hello.foo_bar).to eql "morgan"
73
+ expect(builded.hello.foo_bar).to eq("morgan")
74
74
  end
75
75
  end
@@ -45,16 +45,16 @@ module Sandthorn
45
45
  end
46
46
 
47
47
  it "should set instance variable in aggregate" do
48
- expect(ConstructorEventsSpec.find(aggregate_id).name).to eql "create_name"
48
+ expect(ConstructorEventsSpec.find(aggregate_id).name).to eq("create_name")
49
49
  end
50
50
 
51
51
  it "should have created an created_event" do
52
- expect(Sandthorn.find(aggregate_id, ConstructorEventsSpec).first[:event_name]).to eql "created_event"
52
+ expect(Sandthorn.find(aggregate_id, ConstructorEventsSpec).first[:event_name]).to eq("created_event")
53
53
  end
54
54
 
55
55
  it "should have set the attribute_delta name" do
56
- expect(Sandthorn.find(aggregate_id, ConstructorEventsSpec).first[:event_data][:attribute_deltas].last[:attribute_name]).to eql "name"
57
- expect(Sandthorn.find(aggregate_id, ConstructorEventsSpec).first[:event_data][:attribute_deltas].last[:new_value]).to eql "create_name"
56
+ expect(Sandthorn.find(aggregate_id, ConstructorEventsSpec).first[:event_data]).to have_key(:name)
57
+ expect(Sandthorn.find(aggregate_id, ConstructorEventsSpec).first[:event_data][:name][:new_value]).to eq("create_name")
58
58
  end
59
59
  end
60
- end
60
+ end
@@ -44,14 +44,14 @@ describe "when the initialize-method changes" do
44
44
  it "should have an set the array attribute to [] on new" do
45
45
  add_default_attributes
46
46
  aggregate = DefaultAttributes.new
47
- expect(aggregate.array).to eql []
47
+ expect(aggregate.array).to eq([])
48
48
  end
49
49
 
50
50
  it "should have set the array attribute to [] on rebuilt when attribute is intruduced after `new`" do
51
51
  aggregate = DefaultAttributes.new
52
52
  add_default_attributes
53
53
  rebuilt_aggregate = DefaultAttributes.aggregate_build(aggregate.aggregate_events)
54
- expect(rebuilt_aggregate.array).to eql []
54
+ expect(rebuilt_aggregate.array).to eq([])
55
55
  end
56
56
 
57
57
  it "should set the array attribute to ['banana'] on rebuilt" do
@@ -59,7 +59,7 @@ describe "when the initialize-method changes" do
59
59
  aggregate = DefaultAttributes.new
60
60
  aggregate.add_item 'banana'
61
61
  rebuilt_aggregate = DefaultAttributes.aggregate_build(aggregate.aggregate_events)
62
- expect(rebuilt_aggregate.array).to eql ['banana']
62
+ expect(rebuilt_aggregate.array).to eq(['banana'])
63
63
  end
64
64
 
65
65
  end
@@ -18,8 +18,8 @@ describe "when the initialize-method changes" do
18
18
  events = aggregate.aggregate_events
19
19
  change_init
20
20
  with_change = InitChange.new
21
- expect(with_change.foo).to eql :foo
21
+ expect(with_change.foo).to eq(:foo)
22
22
  replayed = InitChange.aggregate_build(events)
23
- expect(replayed.foo).to eql :bar
23
+ expect(replayed.foo).to eq(:bar)
24
24
  end
25
25
  end
@@ -46,15 +46,19 @@ module Sandthorn
46
46
  end
47
47
 
48
48
  it "should add one_event last on the aggregate" do
49
- expect(last_event[:event_name]).to eql "one_event"
49
+ expect(last_event[:event_name]).to eq("one_event")
50
50
  end
51
51
 
52
- it "should have staeless data in deltas in event" do
53
- expect(last_event[:event_data][:attribute_deltas]).to eql ([{:attribute_name=>"first", :old_value => nil, :new_value => "first"}, { :attribute_name => "other", :old_value => nil, :new_value => [1, 2, 3]}])
52
+ it "should add aggregate_id to events" do
53
+ expect(last_event[:aggregate_id]).to eq(subject.aggregate_id)
54
+ end
55
+
56
+ it "should have stateless data in deltas in event" do
57
+ expect(last_event[:event_data]).to eq({:first => {:old_value => nil, :new_value => "first"}, :other => {:old_value => nil, :new_value => [1, 2, 3]}})
54
58
  end
55
59
 
56
60
  it "should have same name attribute after reload" do
57
- expect(subject.name).to eql(reloaded_subject.name)
61
+ expect(subject.name).to eq(reloaded_subject.name)
58
62
  end
59
63
  end
60
64
 
@@ -75,11 +79,11 @@ module Sandthorn
75
79
  end
76
80
 
77
81
  it "should have correct aggregate_id in event" do
78
- expect(events.first[:aggregate_id]).to eql aggregate_id
82
+ expect(events.first[:aggregate_id]).to eq(aggregate_id)
79
83
  end
80
84
 
81
85
  it "should have event name one_event" do
82
- expect(events.first[:event_name]).to eql "one_event"
86
+ expect(events.first[:event_name]).to eq("one_event")
83
87
  end
84
88
  end
85
89
 
@@ -101,7 +105,7 @@ module Sandthorn
101
105
  end
102
106
 
103
107
  it "should override the name via the stateless event" do
104
- expect(subject.name).not_to eql(reloaded_subject.name)
108
+ expect(subject.name).not_to eq(reloaded_subject.name)
105
109
  end
106
110
  end
107
111
  end
@@ -40,7 +40,7 @@ describe "using a traced change" do
40
40
  simple.aggregate_trace "123" do |traced|
41
41
  traced.go
42
42
  end
43
- expect(simple.events_with_trace_info.last[:event_metadata]).to eql("123")
43
+ expect(simple.events_with_trace_info.last[:event_metadata]).to eq("123")
44
44
  end
45
45
  end
46
46
  context "when not tracing" do
@@ -62,7 +62,7 @@ describe "using a traced change" do
62
62
  s.charge_suspect_of_crime! "Theft"
63
63
  end
64
64
  event = suspect.events_with_trace_info.last
65
- expect(event[:event_metadata]).to eql "Ture Sventon"
65
+ expect(event[:event_metadata]).to eq("Ture Sventon")
66
66
  end
67
67
 
68
68
  it "should record optional other tracing information" do
@@ -71,7 +71,7 @@ describe "using a traced change" do
71
71
  s.charge_suspect_of_crime! "Murder"
72
72
  end
73
73
  event = suspect.events_with_trace_info.last
74
- expect(event[:event_metadata]).to eql trace_info
74
+ expect(event[:event_metadata]).to eq(trace_info)
75
75
  end
76
76
  end
77
77
  context "when initializing a new aggregate in a traced context" do
@@ -79,7 +79,7 @@ describe "using a traced change" do
79
79
  UsualSuspect.aggregate_trace "Ture Sventon" do
80
80
  suspect = UsualSuspect.new("Sonny").extend Sandthorn::EventInspector
81
81
  event = suspect.events_with_trace_info.first
82
- expect(event[:event_metadata]).to eql "Ture Sventon"
82
+ expect(event[:event_metadata]).to eq("Ture Sventon")
83
83
  end
84
84
  end
85
85
  it "should record tracing for all events in the trace block" do
@@ -88,7 +88,7 @@ describe "using a traced change" do
88
88
  suspect = UsualSuspect.new("Sonny").extend Sandthorn::EventInspector
89
89
  suspect.charge_suspect_of_crime! "Hit and run"
90
90
  event = suspect.events_with_trace_info.last
91
- expect(event[:event_metadata]).to eql trace_info
91
+ expect(event[:event_metadata]).to eq(trace_info)
92
92
  end
93
93
  end
94
94
  it "should record tracing for all events in the trace block" do
@@ -97,7 +97,7 @@ describe "using a traced change" do
97
97
  suspect = UsualSuspect.new("Conny").extend Sandthorn::EventInspector
98
98
  suspect.charge_suspect_of_crime! "Desception"
99
99
  event = suspect.events_with_trace_info.last
100
- expect(event[:event_metadata]).to eql trace_info
100
+ expect(event[:event_metadata]).to eq(trace_info)
101
101
  end
102
102
  end
103
103
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sandthorn
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Lars Krantz
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2017-05-31 00:00:00.000000000 Z
13
+ date: 2018-05-25 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: bundler
@@ -194,7 +194,6 @@ files:
194
194
  - lib/sandthorn/aggregate_root_snapshot.rb
195
195
  - lib/sandthorn/bounded_context.rb
196
196
  - lib/sandthorn/errors.rb
197
- - lib/sandthorn/event.rb
198
197
  - lib/sandthorn/event_inspector.rb
199
198
  - lib/sandthorn/event_stores.rb
200
199
  - lib/sandthorn/version.rb
@@ -202,23 +201,19 @@ files:
202
201
  - spec/aggregate_delta_spec.rb
203
202
  - spec/aggregate_events_spec.rb
204
203
  - spec/aggregate_root_spec.rb
205
- - spec/aggregate_snapshot_spec.rb
206
204
  - spec/benchmark_spec.rb
207
205
  - spec/bounded_context_spec.rb
208
206
  - spec/complex_aggregate_spec.rb
209
207
  - spec/constructor_events_spec.rb
210
208
  - spec/db/sequel_driver.sqlite3_old
211
209
  - spec/default_attributes_spec.rb
212
- - spec/different_driver_spec.rb
213
- - spec/event_inspector_spec.rb
214
- - spec/event_spec.rb
215
210
  - spec/event_stores_spec.rb
216
211
  - spec/initialize_signature_change_spec.rb
217
212
  - spec/spec_helper.rb
218
213
  - spec/stateless_events_spec.rb
219
214
  - spec/support/custom_matchers.rb
220
215
  - spec/tracing_spec.rb
221
- homepage: ''
216
+ homepage: https://github.com/Sandthorn/sandthorn
222
217
  licenses:
223
218
  - MIT
224
219
  metadata: {}
@@ -238,7 +233,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
238
233
  version: '0'
239
234
  requirements: []
240
235
  rubyforge_project:
241
- rubygems_version: 2.6.11
236
+ rubygems_version: 2.7.6
242
237
  signing_key:
243
238
  specification_version: 4
244
239
  summary: Event sourcing gem
@@ -246,16 +241,12 @@ test_files:
246
241
  - spec/aggregate_delta_spec.rb
247
242
  - spec/aggregate_events_spec.rb
248
243
  - spec/aggregate_root_spec.rb
249
- - spec/aggregate_snapshot_spec.rb
250
244
  - spec/benchmark_spec.rb
251
245
  - spec/bounded_context_spec.rb
252
246
  - spec/complex_aggregate_spec.rb
253
247
  - spec/constructor_events_spec.rb
254
248
  - spec/db/sequel_driver.sqlite3_old
255
249
  - spec/default_attributes_spec.rb
256
- - spec/different_driver_spec.rb
257
- - spec/event_inspector_spec.rb
258
- - spec/event_spec.rb
259
250
  - spec/event_stores_spec.rb
260
251
  - spec/initialize_signature_change_spec.rb
261
252
  - spec/spec_helper.rb
@@ -1,61 +0,0 @@
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_data
12
- event_metadata
13
- method_args
14
- trace
15
- )
16
-
17
- ATTRS.each do |attr|
18
- define_method(attr) do
19
- self[attr]
20
- end
21
- end
22
-
23
- def new_values
24
- @changed_attributes ||= build_new_values
25
- end
26
-
27
- def attribute_deltas
28
- @attribute_deltas ||= build_deltas
29
- end
30
-
31
- private
32
-
33
- def build_deltas
34
- raw_deltas.map { |delta| AttributeDelta.new(delta) }
35
- end
36
-
37
- def build_new_values
38
- attribute_deltas.each_with_object({}) do |delta, changed|
39
- changed[delta.attribute_name.to_sym] = delta.new_value
40
- end
41
- end
42
-
43
- def raw_deltas
44
- fetch(:event_data, {}).fetch(:attribute_deltas, [])
45
- end
46
-
47
- class AttributeDelta < SimpleDelegator
48
- ATTRS = %i(
49
- attribute_name
50
- old_value
51
- new_value
52
- )
53
-
54
- ATTRS.each do |attr|
55
- define_method(attr) do
56
- self[attr]
57
- end
58
- end
59
- end
60
- end
61
- end
@@ -1,263 +0,0 @@
1
- # require 'spec_helper'
2
- # require 'sandthorn/aggregate_root_snapshot'
3
- # require 'date'
4
-
5
-
6
- # module BankAccountInterestCommands
7
- # def calculate_interest! until_date = DateTime.now
8
- # # skipping all safety-checks..
9
- # # and this is of course horribly wrong financially speaking.. whatever
10
- # pay_out_unpaid_interest!
11
- # interest_calculation_time = until_date - @last_interest_calculation
12
- # days_with_interest = interest_calculation_time.to_i
13
- # unpaid_interest = @balance * @current_interest_info[:interest_rate] * days_with_interest / 365.2425
14
- # added_unpaid_interest_event unpaid_interest,until_date
15
- # end
16
-
17
- # def pay_out_unpaid_interest!
18
- # paid_out_unpaid_interest_balance_event @unpaid_interest_balance
19
- # end
20
-
21
- # def change_interest! new_interest_rate, interest_valid_from
22
- # calculate_interest!
23
- # changed_interest_rate_event new_interest_rate,interest_valid_from
24
- # end
25
- # end
26
- # module BankAccountWithdrawalCommands
27
- # def withdraw_from_atm! amount, atm_id
28
- # withdrew_amount_from_atm_event amount, atm_id
29
- # end
30
-
31
- # def withdraw_from_cashier! amount, cashier_id
32
- # withdrew_amount_from_cashier_event amount, cashier_id
33
- # charged_cashier_withdrawal_fee_event 50
34
- # end
35
- # end
36
-
37
- # module BankAccountVisaCardPurchasesCommands
38
- # def charge_card! amount, merchant_id
39
- # visa = VisaCardTransactionGateway.new
40
- # transaction_id = visa.charge_card "3030-3333-4252-2535", merchant_id, amount
41
- # paid_with_visa_card_event amount, transaction_id
42
- # end
43
-
44
- # end
45
-
46
- # class VisaCardTransactionGateway
47
- # def initialize
48
- # @visa_connector = "foo_bar"
49
- # end
50
- # def charge_card visa_card_number, merchant_id, amount
51
- # transaction_id = SecureRandom.uuid
52
- # end
53
- # end
54
-
55
- # module BankAccountDepositCommmands
56
- # def deposit_at_bank_office! amount, cashier_id
57
- # deposited_to_cashier_event amount, cashier_id
58
- # end
59
-
60
- # def transfer_money_from_another_account! amount, from_account_number
61
- # incoming_transfer_event amount,from_account_number
62
- # end
63
- # end
64
-
65
- # class BankAccount
66
- # include Sandthorn::AggregateRoot
67
-
68
- # attr_reader :balance
69
- # attr_reader :account_number
70
- # attr_reader :current_interest_info
71
- # attr_reader :account_creation_date
72
- # attr_reader :unpaid_interest_balance
73
- # attr_reader :last_interest_calculation
74
-
75
- # def initialize *args
76
- # account_number = args[0]
77
- # interest_rate = args[1]
78
- # creation_date = args[2]
79
-
80
- # @current_interest_info = {}
81
- # @current_interest_info[:interest_rate] = interest_rate
82
- # @current_interest_info[:interest_valid_from] = creation_date
83
- # @balance = 0
84
- # @unpaid_interest_balance = 0
85
- # @account_creation_date = creation_date
86
- # @last_interest_calculation = creation_date
87
- # end
88
-
89
- # def changed_interest_rate_event new_interest_rate, interest_valid_from
90
- # @current_interest_info[:interest_rate] = new_interest_rate
91
- # @current_interest_info[:interest_valid_from] = interest_valid_from
92
- # record_event
93
- # end
94
-
95
- # def added_unpaid_interest_event interest_amount, calculated_until
96
- # @unpaid_interest_balance += interest_amount
97
- # @last_interest_calculation = calculated_until
98
- # record_event
99
- # end
100
-
101
- # def paid_out_unpaid_interest_balance_event interest_amount
102
- # @unpaid_interest_balance -= interest_amount
103
- # @balance += interest_amount
104
- # record_event
105
- # end
106
-
107
- # def withdrew_amount_from_atm_event amount, atm_id
108
- # @balance -= amount
109
- # record_event
110
- # end
111
-
112
- # def withdrew_amount_from_cashier_event amount, cashier_id
113
- # @balance -= amount
114
- # record_event
115
- # end
116
-
117
- # def paid_with_visa_card_event amount, visa_card_transaction_id
118
- # @balance -= amount
119
- # record_event
120
- # end
121
-
122
- # def charged_cashier_withdrawal_fee_event amount
123
- # @balance -= amount
124
- # record_event
125
- # end
126
-
127
- # def deposited_to_cashier_event amount, cashier_id
128
- # @balance = self.balance + amount
129
- # record_event
130
- # end
131
-
132
- # def incoming_transfer_event amount, from_account_number
133
- # current_balance = self.balance
134
- # @balance = amount + current_balance
135
- # record_event
136
- # end
137
-
138
- # end
139
-
140
- # def a_test_account
141
- # a = BankAccount.new "91503010111",0.031415, Date.new(2011,10,12)
142
- # a.extend BankAccountDepositCommmands
143
- # a.transfer_money_from_another_account! 90000, "FOOBAR"
144
- # a.deposit_at_bank_office! 10000, "Lars Idorn"
145
-
146
- # a.extend BankAccountVisaCardPurchasesCommands
147
- # a.charge_card! 1000, "Starbucks Coffee"
148
-
149
- # a.extend BankAccountInterestCommands
150
- # a.calculate_interest!
151
- # return a
152
- # end
153
-
154
- # #Tests part
155
- # describe "when doing aggregate_find on an aggregate with a snapshot" do
156
- # let(:aggregate) do
157
- # a = a_test_account
158
- # a.save
159
- # a.extend Sandthorn::AggregateRootSnapshot
160
- # a.aggregate_snapshot!
161
- # a.save_snapshot
162
- # a.charge_card! 9000, "Apple"
163
- # a.save
164
- # a
165
- # end
166
- # it "should be loaded with correct version" do
167
- # org = aggregate
168
- # loaded = BankAccount.find org.aggregate_id
169
- # expect(loaded.balance).to eql org.balance
170
- # end
171
- # end
172
-
173
- # describe 'when generating state on an aggregate root' do
174
-
175
- # before(:each) do
176
- # @original_account = a_test_account
177
- # events = @original_account.aggregate_events
178
- # @account = BankAccount.aggregate_build events
179
- # @account.extend Sandthorn::AggregateRootSnapshot
180
- # @account.aggregate_snapshot!
181
- # end
182
-
183
- # it 'account should have properties set' do
184
- # expect(@account.balance).to eql 99000
185
- # expect(@account.unpaid_interest_balance).to be > 1000
186
- # end
187
-
188
-
189
- # it 'should be able to load up from snapshot' do
190
-
191
- # events = [aggregate: @account]
192
- # loaded = BankAccount.aggregate_build events
193
-
194
- # expect(loaded.balance).to eql(@original_account.balance)
195
- # expect(loaded.account_number).to eql(@original_account.account_number)
196
- # expect(loaded.current_interest_info).to eql(@original_account.current_interest_info)
197
- # expect(loaded.account_creation_date).to eql(@original_account.account_creation_date)
198
- # expect(loaded.unpaid_interest_balance).to eql(@original_account.unpaid_interest_balance)
199
- # expect(loaded.last_interest_calculation).to eql(@original_account.last_interest_calculation)
200
- # expect(loaded.aggregate_id).to eql(@original_account.aggregate_id)
201
- # expect(loaded.aggregate_originating_version).to eql(@account.aggregate_originating_version)
202
-
203
- # end
204
-
205
- # end
206
-
207
- # describe Sandthorn::AggregateRootSnapshot do
208
- # let(:subject) { a_test_account.save.extend Sandthorn::AggregateRootSnapshot }
209
- # context "when using :snapshot - method" do
210
- # it "should return self" do
211
- # expect(subject.snapshot).to eql subject
212
- # end
213
- # it "should raise SnapshotError if aggregate has unsaved events" do
214
- # subject.paid_with_visa_card_event 2000, ""
215
- # expect{subject.snapshot}.to raise_error Sandthorn::Errors::SnapshotError
216
- # end
217
- # end
218
- # end
219
-
220
-
221
- # describe 'when saving to repository' do
222
- # let(:account) {a_test_account.extend Sandthorn::AggregateRootSnapshot}
223
-
224
- # it 'should not raise an error if snapshot was created' do
225
- # account.save
226
- # account.aggregate_snapshot!
227
- # expect(lambda {account.save_snapshot}).not_to raise_error
228
- # end
229
- # it 'should set aggregate_snapshot to nil' do
230
- # account.save
231
- # account.aggregate_snapshot!
232
- # account.save_snapshot
233
- # expect(account.aggregate_snapshot).to eql(nil)
234
- # end
235
-
236
- # it 'should raise error if trying to create snapshot before events are saved on object' do
237
- # expect(lambda {account.aggregate_snapshot!}).to raise_error Sandthorn::Errors::SnapshotError
238
- # end
239
-
240
- # it 'should not raise an error if trying to create snapshot on object when events are saved' do
241
- # account.save
242
- # expect( lambda {account.aggregate_snapshot!}).not_to raise_error
243
- # end
244
-
245
- # it 'should get snapshot on account find when a snapshot is saved' do
246
-
247
- # account.save
248
- # account.aggregate_snapshot!
249
- # account.save_snapshot
250
-
251
- # loaded = BankAccount.find account.aggregate_id
252
-
253
- # expect(loaded.balance).to eql(account.balance)
254
- # expect(loaded.account_number).to eql(account.account_number)
255
- # expect(loaded.current_interest_info).to eql(account.current_interest_info)
256
- # expect(loaded.account_creation_date).to eql(account.account_creation_date)
257
- # expect(loaded.unpaid_interest_balance).to eql(account.unpaid_interest_balance)
258
- # expect(loaded.last_interest_calculation).to eql(account.last_interest_calculation)
259
- # expect(loaded.aggregate_id).to eql(account.aggregate_id)
260
- # expect(loaded.aggregate_originating_version).to eql(account.aggregate_originating_version)
261
-
262
- # end
263
- # end