sandthorn 0.1.0 → 0.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 +4 -4
- data/Gemfile.lock +1 -1
- data/lib/sandthorn/aggregate_root_base.rb +24 -25
- data/lib/sandthorn/aggregate_root_dirty_hashy.rb +13 -1
- data/lib/sandthorn/version.rb +1 -1
- data/spec/aggregate_root_spec.rb +30 -0
- data/spec/event_inspector_spec.rb +139 -139
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 570d52af1a092035a72a6db14afb0c43ec61ae48
|
4
|
+
data.tar.gz: 39f92e0f586d6af40ec7d1b0c9eacdf7c08827ae
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 95e7d6c19f1c50f01a4a63d0fec9378205956c29b9fb2be22fded7e5fb9c219dde8edfae25b5a3c7f620b01610157b7deb6f2531b79932b66912f7605105a776
|
7
|
+
data.tar.gz: b8e4d2e12afb2ea861b6e1136b9f3d263ed5fac7cd700a50969a3ecc556e3599e2200dbde479d99dda264fea753039719509d0f60a76489e98fee771ae7505b2
|
data/Gemfile.lock
CHANGED
@@ -31,11 +31,11 @@ module Sandthorn
|
|
31
31
|
end
|
32
32
|
|
33
33
|
def commit *args
|
34
|
-
increase_current_aggregate_version!
|
35
|
-
method_name = caller_locations(1,1)[0].label.gsub("block in ", "")
|
36
34
|
aggregate_attribute_deltas = get_delta
|
37
35
|
|
38
36
|
unless aggregate_attribute_deltas.empty?
|
37
|
+
method_name = caller_locations(1,1)[0].label.gsub("block in ", "")
|
38
|
+
increase_current_aggregate_version!
|
39
39
|
data = {:method_name => method_name, :method_args => args, :attribute_deltas => aggregate_attribute_deltas}
|
40
40
|
data.merge!({trace: @aggregate_trace_information}) unless @aggregate_trace_information.nil? || @aggregate_trace_information.empty?
|
41
41
|
@aggregate_events << ({:aggregate_version => @aggregate_current_event_version, :event_name => method_name, :event_args => data})
|
@@ -45,22 +45,22 @@ module Sandthorn
|
|
45
45
|
|
46
46
|
alias :record_event :commit
|
47
47
|
|
48
|
-
def aggregate_trace args
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
end
|
48
|
+
# def aggregate_trace args
|
49
|
+
# @aggregate_trace_information = args
|
50
|
+
# yield self
|
51
|
+
# @aggregate_trace_information = nil
|
52
|
+
# end
|
53
53
|
|
54
54
|
module ClassMethods
|
55
55
|
|
56
|
-
@@aggregate_trace_information = nil
|
57
|
-
def aggregate_trace args
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
end
|
56
|
+
# @@aggregate_trace_information = nil
|
57
|
+
# def aggregate_trace args
|
58
|
+
# @@aggregate_trace_information = args
|
59
|
+
# @aggregate_trace_information = args
|
60
|
+
# yield self
|
61
|
+
# @@aggregate_trace_information = nil
|
62
|
+
# @aggregate_trace_information = nil
|
63
|
+
# end
|
64
64
|
|
65
65
|
def all
|
66
66
|
aggregate_id_list = Sandthorn.get_aggregate_list_by_typename(self.name)
|
@@ -84,13 +84,14 @@ module Sandthorn
|
|
84
84
|
def new *args
|
85
85
|
aggregate = super
|
86
86
|
aggregate.aggregate_base_initialize
|
87
|
+
aggr = aggregate
|
87
88
|
|
88
|
-
aggregate.aggregate_trace @@aggregate_trace_information do |aggr|
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
end
|
89
|
+
#aggregate.aggregate_trace @@aggregate_trace_information do |aggr|
|
90
|
+
aggregate.aggregate_initialize
|
91
|
+
aggregate.send :set_aggregate_id, Sandthorn.generate_aggregate_id
|
92
|
+
aggregate.send :commit, *args
|
93
|
+
aggregate
|
94
|
+
#end
|
94
95
|
end
|
95
96
|
|
96
97
|
def aggregate_build events
|
@@ -137,6 +138,7 @@ module Sandthorn
|
|
137
138
|
aggregate.send :set_orginating_aggregate_version!, current_aggregate_version
|
138
139
|
aggregate.send :set_current_aggregate_version!, current_aggregate_version
|
139
140
|
aggregate.send :set_instance_variables!, attributes
|
141
|
+
aggregate.send :aggregate_initialize
|
140
142
|
aggregate
|
141
143
|
end
|
142
144
|
end
|
@@ -150,9 +152,7 @@ module Sandthorn
|
|
150
152
|
end
|
151
153
|
|
152
154
|
def extract_relevant_aggregate_instance_variables
|
153
|
-
instance_variables.select
|
154
|
-
i.to_s != "@hashy" && (!i.to_s.start_with?("@aggregate_") || i.to_s == "@aggregate_id")
|
155
|
-
end
|
155
|
+
instance_variables.select { |i| i.to_s=="@aggregate_id" || !i.to_s.start_with?("@aggregate_") }
|
156
156
|
end
|
157
157
|
|
158
158
|
def set_orginating_aggregate_version! aggregate_version
|
@@ -169,7 +169,6 @@ module Sandthorn
|
|
169
169
|
|
170
170
|
def clear_aggregate_events
|
171
171
|
@aggregate_events = []
|
172
|
-
@aggregate_attribute_deltas = []
|
173
172
|
end
|
174
173
|
|
175
174
|
def aggregate_clear_current_event_version!
|
@@ -10,18 +10,30 @@ module Sandthorn
|
|
10
10
|
base.extend(Sandthorn::AggregateRoot::Base::ClassMethods)
|
11
11
|
end
|
12
12
|
|
13
|
-
def aggregate_initialize
|
13
|
+
def aggregate_initialize *args
|
14
14
|
@hashy = ::DirtyHashy.new
|
15
15
|
end
|
16
16
|
|
17
|
+
def set_instance_variables! attribute
|
18
|
+
super attribute
|
19
|
+
|
20
|
+
extract_relevant_aggregate_instance_variables.each do |var|
|
21
|
+
next if var.to_s == "@hashy"
|
22
|
+
@hashy[var.to_s.delete("@")] = self.instance_variable_get("#{var}")
|
23
|
+
end
|
24
|
+
@hashy.clean_up!
|
25
|
+
end
|
26
|
+
|
17
27
|
def get_delta
|
18
28
|
extract_relevant_aggregate_instance_variables.each do |var|
|
29
|
+
next if var.to_s == "@hashy"
|
19
30
|
@hashy[var.to_s.delete("@")] = self.instance_variable_get("#{var}")
|
20
31
|
end
|
21
32
|
aggregate_attribute_deltas = []
|
22
33
|
@hashy.changes.each do |attribute|
|
23
34
|
aggregate_attribute_deltas << { :attribute_name => attribute[0], :old_value => attribute[1][0], :new_value => attribute[1][1]}
|
24
35
|
end
|
36
|
+
@hashy.clean_up!
|
25
37
|
aggregate_attribute_deltas
|
26
38
|
end
|
27
39
|
|
data/lib/sandthorn/version.rb
CHANGED
data/spec/aggregate_root_spec.rb
CHANGED
@@ -136,6 +136,36 @@ module Sandthorn
|
|
136
136
|
expect{DirtyClass.find("666")}.to raise_error
|
137
137
|
end
|
138
138
|
end
|
139
|
+
|
140
|
+
|
141
|
+
end
|
142
|
+
|
143
|
+
describe "event data" do
|
144
|
+
|
145
|
+
let(:dirty_obejct) {
|
146
|
+
o = DirtyClass.new :name => "old_value"
|
147
|
+
o
|
148
|
+
}
|
149
|
+
|
150
|
+
context "old_value should be set" do
|
151
|
+
|
152
|
+
it "should set the old_value on the event" do
|
153
|
+
dirty_obejct.change_name "new_name"
|
154
|
+
expect(dirty_obejct.aggregate_events.last[:event_args][:attribute_deltas].first[:old_value]).to eql "old_value"
|
155
|
+
end
|
156
|
+
|
157
|
+
it "should not change aggregate_id" do
|
158
|
+
dirty_obejct.change_name "new_name"
|
159
|
+
expect(dirty_obejct.aggregate_events.last[:event_args][:attribute_deltas].last[:attribute_name]).not_to eql "aggregate_id"
|
160
|
+
end
|
161
|
+
|
162
|
+
it "should not change sex attribute" do
|
163
|
+
dirty_obejct.change_name "new_name"
|
164
|
+
dirty_obejct.aggregate_events.each do |event|
|
165
|
+
expect(event[:event_name]).not_to eql "change_sex"
|
166
|
+
end
|
167
|
+
end
|
168
|
+
end
|
139
169
|
end
|
140
170
|
end
|
141
171
|
end
|
@@ -1,152 +1,152 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
require 'sandthorn/event_inspector'
|
3
|
-
require 'sandthorn/aggregate_root_dirty_hashy'
|
1
|
+
# require 'spec_helper'
|
2
|
+
# require 'sandthorn/event_inspector'
|
3
|
+
# require 'sandthorn/aggregate_root_dirty_hashy'
|
4
4
|
|
5
|
-
class InspectorAggregate
|
6
|
-
|
5
|
+
# class InspectorAggregate
|
6
|
+
# include Sandthorn::AggregateRoot::DirtyHashy
|
7
7
|
|
8
|
-
|
8
|
+
# attr_reader :foo_bar
|
9
9
|
|
10
|
-
|
11
|
-
|
12
|
-
|
10
|
+
# def initialize args = {}
|
11
|
+
# @foo_bar = args.fetch(:foo_bar, nil)
|
12
|
+
# end
|
13
13
|
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
end
|
14
|
+
# def this_is_an_event args = nil
|
15
|
+
# record_event args
|
16
|
+
# end
|
17
|
+
# def another_event
|
18
|
+
# record_event
|
19
|
+
# end
|
20
|
+
# def new_damaged_item_was_added hello
|
21
|
+
# record_event hello
|
22
|
+
# end
|
23
|
+
# end
|
24
24
|
|
25
|
-
module Sandthorn
|
26
|
-
|
27
|
-
|
25
|
+
# module Sandthorn
|
26
|
+
# describe EventInspector do
|
27
|
+
# let(:aggregate) {InspectorAggregate.new.extend EventInspector}
|
28
28
|
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
29
|
+
# context "when using extract_trace_info from an event" do
|
30
|
+
# let(:trace_info) {{user_id: "foo", ip: "bar"}}
|
31
|
+
# let(:subject) do
|
32
|
+
# aggregate.aggregate_trace trace_info do |traced|
|
33
|
+
# traced.this_is_an_event
|
34
|
+
# end
|
35
|
+
# aggregate
|
36
|
+
# end
|
37
|
+
# context "and unsaved aggregate" do
|
38
|
+
# it "should extract exact traceinfo from event" do
|
39
|
+
# all_trace = subject.events_with_trace_info
|
40
|
+
# all_trace.last[:trace].should eql trace_info
|
41
|
+
# end
|
42
|
+
# end
|
43
|
+
# context "and saved aggregate" do
|
44
|
+
# it "should extract exact traceinfo from event" do
|
45
|
+
# subject.save
|
46
|
+
# all_trace = subject.events_with_trace_info
|
47
|
+
# all_trace.last[:trace].should eql trace_info
|
48
|
+
# end
|
49
|
+
# end
|
50
|
+
# end
|
51
|
+
# context "when inspecting non saved events" do
|
52
|
+
# context "with no tracing information" do
|
53
|
+
# let(:subject) { aggregate.this_is_an_event;aggregate }
|
54
54
|
|
55
|
-
|
56
|
-
|
57
|
-
|
55
|
+
# it "should have the new event" do
|
56
|
+
# subject.has_event?(:new).should be_true
|
57
|
+
# end
|
58
58
|
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
59
|
+
# it "should report true on has_unsaved_event? :this_is_an_event" do
|
60
|
+
# subject.has_unsaved_event?(:this_is_an_event).should be_true
|
61
|
+
# end
|
62
|
+
# it "should report false on has_unsaved_event? :no_event_here" do
|
63
|
+
# subject.has_unsaved_event?(:no_event_here).should be_false
|
64
|
+
# end
|
65
|
+
# end
|
66
|
+
# context "with tracing information" do
|
67
|
+
# let(:subject) do
|
68
|
+
# aggregate.aggregate_trace user_id: 123, ip: "1234" do |traced|
|
69
|
+
# traced.this_is_an_event "my name"
|
70
|
+
# end
|
71
|
+
# aggregate
|
72
|
+
# end
|
73
73
|
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
74
|
+
# it "should report true on has_unsaved_event? :this_is_an_event" do
|
75
|
+
# subject.has_unsaved_event?(:this_is_an_event, trace: {user_id: 123, ip: "1234"}).should be_true
|
76
|
+
# end
|
77
|
+
# it "should report false on has_unsaved_event? :no_event_here" do
|
78
|
+
# subject.has_unsaved_event?(:this_is_an_event, trace: {user_id: 321}).should be_false
|
79
|
+
# subject.has_unsaved_event?(:this_is_an_event, trace: {another_user_id: 123}).should be_false
|
80
|
+
# end
|
81
|
+
# end
|
82
|
+
# end
|
83
|
+
# context "when inspecting saved events" do
|
84
|
+
# context "with no tracing information" do
|
85
|
+
# let(:subject) { aggregate.this_is_an_event;aggregate.save;aggregate }
|
86
86
|
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
87
|
+
# it "should report true on has_unsaved_event? :this_is_an_event" do
|
88
|
+
# subject.has_saved_event?(:this_is_an_event).should be_true
|
89
|
+
# end
|
90
|
+
# it "should report false on has_unsaved_event? :no_event_here" do
|
91
|
+
# subject.has_saved_event?(:no_event_here).should be_false
|
92
|
+
# end
|
93
|
+
# end
|
94
|
+
# context "with tracing information" do
|
95
|
+
# let(:subject) do
|
96
|
+
# aggregate.aggregate_trace user_id: 123, ip: "1234" do |traced|
|
97
|
+
# traced.this_is_an_event "my name"
|
98
|
+
# end
|
99
|
+
# aggregate.save
|
100
|
+
# aggregate
|
101
|
+
# end
|
102
102
|
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
103
|
+
# it "should report true on has_unsaved_event? :this_is_an_event" do
|
104
|
+
# subject.has_saved_event?(:this_is_an_event, trace: {user_id: 123, ip: "1234"}).should be_true
|
105
|
+
# end
|
106
|
+
# it "should report false on has_unsaved_event? :no_event_here" do
|
107
|
+
# subject.has_saved_event?(:this_is_an_event, trace: {user_id: 321}).should be_false
|
108
|
+
# subject.has_saved_event?(:this_is_an_event, trace: {another_user_id: 123}).should be_false
|
109
|
+
# end
|
110
|
+
# it "should be able to check complex trace" do
|
111
|
+
# subject.aggregate_trace client_ip: "10", user_id: "123" do |trace|
|
112
|
+
# trace.new_damaged_item_was_added "foobar"
|
113
|
+
# trace.save
|
114
|
+
# end
|
115
|
+
# subject.has_saved_event?(:new_damaged_item_was_added, trace: {user_id: "123", client_ip: "10"})
|
116
|
+
# end
|
117
|
+
# end
|
118
|
+
# end
|
119
|
+
# context "when inspecting any events" do
|
120
|
+
# context "with no tracing information" do
|
121
|
+
# let(:subject) { aggregate.this_is_an_event;aggregate.save;aggregate.another_event;aggregate }
|
122
122
|
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
123
|
+
# it "should report true on has_unsaved_event? :this_is_an_event" do
|
124
|
+
# subject.has_event?(:this_is_an_event).should be_true
|
125
|
+
# subject.has_event?(:another_event).should be_true
|
126
|
+
# end
|
127
|
+
# it "should report false on has_unsaved_event? :no_event_here" do
|
128
|
+
# subject.has_event?(:no_event_here).should be_false
|
129
|
+
# end
|
130
|
+
# end
|
131
|
+
# context "with tracing information" do
|
132
|
+
# let(:subject) do
|
133
|
+
# aggregate.aggregate_trace user_id: 123, ip: "1234" do |traced|
|
134
|
+
# traced.this_is_an_event "my name"
|
135
|
+
# traced.save
|
136
|
+
# traced.another_event
|
137
|
+
# end
|
138
|
+
# aggregate
|
139
|
+
# end
|
140
140
|
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
end
|
141
|
+
# it "should report true on has_unsaved_event? :this_is_an_event" do
|
142
|
+
# subject.has_event?(:this_is_an_event, trace: {user_id: 123, ip: "1234"}).should be_true
|
143
|
+
# subject.has_event?(:another_event, trace: {user_id: 123, ip: "1234"}).should be_true
|
144
|
+
# end
|
145
|
+
# it "should report false on has_unsaved_event? :no_event_here" do
|
146
|
+
# subject.has_event?(:this_is_an_event, trace: {user_id: 321}).should be_false
|
147
|
+
# subject.has_event?(:another_event, trace: {ip: "123"}).should be_false
|
148
|
+
# end
|
149
|
+
# end
|
150
|
+
# end
|
151
|
+
# end
|
152
|
+
# 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: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Lars Krantz
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2014-
|
12
|
+
date: 2014-04-02 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bundler
|