sandthorn 0.7.0 → 0.8.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: 692bd55290b3092568fa5d7ed3d18be9f4d8e581
4
- data.tar.gz: 41f6b41d080e0b6b2304412a25a435a7c9979021
3
+ metadata.gz: 1029a5956517741e56d4d6803c8a505b08a4c2f3
4
+ data.tar.gz: ecd66efba1d4f987cae937822730c1b407050acc
5
5
  SHA512:
6
- metadata.gz: 764d97697a9b452ba6acdc82b13006c6c6b1118b481908c8a8e17c5b4acd3286009030e0ea5c74d584514cad2ee9f848d4ea8566cff5d9590c6c7c0f345682b0
7
- data.tar.gz: c3a218cc83d50f65a319200293f7110ed2be7788af640a58ac94efbe439b9da824f3ce1049264c149589e54f556ba273e44d9e95a2a10bf81849267dce71693a
6
+ metadata.gz: 31df15e4008339c0281432f0e0fd1232fbfcfb4227a020ef5c7842fb80eb3ceb989de32ad34d05be2fe782889761b9a797f6cdb6128d4f2495142d2d79773905
7
+ data.tar.gz: f2b21aa607186f555900725b77de6d4e8fba666e441eae7a4ae7a1882e1feb61e413905f143a80fb4306ca2feedc6e572d82fd5c7716e2fa986a42d710b555db
data/Gemfile.lock CHANGED
@@ -1,27 +1,31 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- sandthorn (0.7.0)
4
+ sandthorn (0.8.0)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
8
8
  specs:
9
9
  autotest-standalone (4.5.11)
10
- awesome_print (1.2.0)
10
+ awesome_print (1.6.1)
11
11
  coderay (1.1.0)
12
- coveralls (0.7.1)
13
- multi_json (~> 1.3)
14
- rest-client
15
- simplecov (>= 0.7)
16
- term-ansicolor
17
- thor
12
+ coveralls (0.7.12)
13
+ multi_json (~> 1.10)
14
+ rest-client (>= 1.6.8, < 2)
15
+ simplecov (~> 0.9.1)
16
+ term-ansicolor (~> 1.3)
17
+ thor (~> 0.19.1)
18
18
  diff-lcs (1.2.5)
19
19
  docile (1.1.5)
20
+ domain_name (0.5.23)
21
+ unf (>= 0.0.5, < 1.0.0)
20
22
  gem-release (0.7.3)
23
+ http-cookie (1.0.2)
24
+ domain_name (~> 0.5)
21
25
  method_source (0.8.2)
22
26
  mime-types (2.4.3)
23
- multi_json (1.10.1)
24
- netrc (0.8.0)
27
+ multi_json (1.11.0)
28
+ netrc (0.10.3)
25
29
  pg (0.18.1)
26
30
  pry (0.10.1)
27
31
  coderay (~> 1.1.0)
@@ -30,38 +34,43 @@ GEM
30
34
  pry-doc (0.6.0)
31
35
  pry (~> 0.9)
32
36
  yard (~> 0.8)
33
- rake (10.3.2)
34
- rest-client (1.7.2)
37
+ rake (10.4.2)
38
+ rest-client (1.8.0)
39
+ http-cookie (>= 1.0.2, < 2.0)
35
40
  mime-types (>= 1.16, < 3.0)
36
41
  netrc (~> 0.7)
37
- rspec (3.1.0)
38
- rspec-core (~> 3.1.0)
39
- rspec-expectations (~> 3.1.0)
40
- rspec-mocks (~> 3.1.0)
41
- rspec-core (3.1.7)
42
- rspec-support (~> 3.1.0)
43
- rspec-expectations (3.1.2)
42
+ rspec (3.2.0)
43
+ rspec-core (~> 3.2.0)
44
+ rspec-expectations (~> 3.2.0)
45
+ rspec-mocks (~> 3.2.0)
46
+ rspec-core (3.2.2)
47
+ rspec-support (~> 3.2.0)
48
+ rspec-expectations (3.2.0)
44
49
  diff-lcs (>= 1.2.0, < 2.0)
45
- rspec-support (~> 3.1.0)
46
- rspec-mocks (3.1.3)
47
- rspec-support (~> 3.1.0)
48
- rspec-support (3.1.2)
50
+ rspec-support (~> 3.2.0)
51
+ rspec-mocks (3.2.1)
52
+ diff-lcs (>= 1.2.0, < 2.0)
53
+ rspec-support (~> 3.2.0)
54
+ rspec-support (3.2.2)
49
55
  sandthorn_driver_sequel (2.0.0)
50
56
  pg
51
57
  sequel (~> 4.17)
52
58
  sequel (4.20.0)
53
- simplecov (0.9.1)
59
+ simplecov (0.9.2)
54
60
  docile (~> 1.1.0)
55
61
  multi_json (~> 1.0)
56
- simplecov-html (~> 0.8.0)
57
- simplecov-html (0.8.0)
62
+ simplecov-html (~> 0.9.0)
63
+ simplecov-html (0.9.0)
58
64
  slop (3.6.0)
59
- sqlite3 (1.3.9)
65
+ sqlite3 (1.3.10)
60
66
  term-ansicolor (1.3.0)
61
67
  tins (~> 1.0)
62
68
  thor (0.19.1)
63
- tins (1.3.3)
64
- yard (0.8.7.4)
69
+ tins (1.3.5)
70
+ unf (0.1.4)
71
+ unf_ext
72
+ unf_ext (0.0.6)
73
+ yard (0.8.7.6)
65
74
 
66
75
  PLATFORMS
67
76
  ruby
data/README.md CHANGED
@@ -130,11 +130,12 @@ The driver is configured when your application launches. Here's an example of ho
130
130
  ```ruby
131
131
  url = "sqlite://spec/db/sequel_driver.sqlite3"
132
132
  driver = SandthornDriverSequel.driver_from_url(url: url)
133
- catch_all_config = [ { driver: driver } ]
134
- Sandthorn.configuration = catch_all_config
133
+ Sandthorn.configure do |conf|
134
+ conf.event_stores = { default: driver }
135
+ end
135
136
  ```
136
137
 
137
- First we specify the path to the sqlite3 database in the `url` variable. Secondly, the specific driver is instantiated with the `url`. Hence, the driver could be instantiated using a different configuration, for example, an address to a Postgres database. Finally, `Sandthorn.configure` accepts a keyword list with options. The only option which is required is `driver`.
138
+ First we specify the path to the sqlite3 database in the `url` variable. Secondly, the specific driver is instantiated with the `url`. Hence, the driver could be instantiated using a different configuration, for example, an address to a Postgres database. Finally, `Sandthorn.configure` accepts a keyword list with options. It´s here the driver is bound to Sandthorn via a context.
138
139
 
139
140
  The first time you use the Sequel driver it is necessary to install the database schema.
140
141
 
data/lib/sandthorn.rb CHANGED
@@ -10,7 +10,7 @@ module Sandthorn
10
10
  class << self
11
11
  extend Forwardable
12
12
 
13
- def_delegators :configuration, :event_stores
13
+ def_delegators :configuration, :event_stores, :serialize, :deserialize, :serialize_snapshot, :deserialize_snapshot
14
14
 
15
15
  def default_event_store
16
16
  event_stores.default_store
@@ -28,19 +28,7 @@ module Sandthorn
28
28
  @configuration ||= Configuration.new
29
29
  end
30
30
 
31
- def serialize data
32
- #Marshal.dump(data)
33
- YAML::dump(data)
34
- #Oj.dump(data)
35
- #MessagePack.pack(data, symbolize_keys: true)
36
- end
37
-
38
- def deserialize data
39
- #Marshal.load(data)
40
- YAML::load(data)
41
- #Oj.load(data)
42
- #MessagePack.unpack(data, symbolize_keys: true)
43
- end
31
+
44
32
 
45
33
  def generate_aggregate_id
46
34
  SecureRandom.uuid
@@ -122,6 +110,64 @@ module Sandthorn
122
110
  def event_store=(store)
123
111
  @event_stores = EventStores.new(store)
124
112
  end
113
+
114
+ def serializer=(block)
115
+ @serializer = block if block.is_a? Proc
116
+ end
117
+
118
+ def deserializer=(block)
119
+ @deserializer = block if block.is_a? Proc
120
+ end
121
+
122
+ def serializer
123
+ @serializer || default_serializer
124
+ end
125
+
126
+ def deserializer
127
+ @deserializer || default_deserializer
128
+ end
129
+
130
+ def default_serializer
131
+ -> (data) { YAML.dump(data) }
132
+ end
133
+
134
+ def default_deserializer
135
+ -> (data) { YAML.load(data) }
136
+ end
137
+
138
+ def serialize(data)
139
+ serializer.call(data)
140
+ end
141
+
142
+ def deserialize(data)
143
+ deserializer.call(data)
144
+ end
145
+
146
+ def snapshot_serializer=(block)
147
+ @snapshot_serializer = block if block.is_a? Proc
148
+ end
149
+
150
+ def snapshot_deserializer=(block)
151
+ @snapshot_deserializer = block if block.is_a? Proc
152
+ end
153
+
154
+ def snapshot_serializer
155
+ @snapshot_serializer || default_serializer
156
+ end
157
+
158
+ def snapshot_deserializer
159
+ @snapshot_deserializer || default_deserializer
160
+ end
161
+
162
+ def serialize_snapshot(data)
163
+ snapshot_serializer.call(data)
164
+ end
165
+
166
+ def deserialize_snapshot data
167
+ snapshot_deserializer.call(data)
168
+ end
169
+
170
+
125
171
  alias_method :event_stores=, :event_store=
126
172
  end
127
173
  end
@@ -108,10 +108,16 @@ module Sandthorn
108
108
  unless events && !events.empty?
109
109
  raise Sandthorn::Errors::AggregateNotFound
110
110
  end
111
+
112
+ if first_event_snapshot?(events)
113
+ transformed_snapshot_event = events.first.merge(event_args: Sandthorn.deserialize_snapshot(events.first[:event_data]))
114
+ events.shift
115
+ end
116
+
111
117
  transformed_events = events.map do |e|
112
118
  e.merge(event_args: Sandthorn.deserialize(e[:event_data]))
113
119
  end
114
- aggregate_build transformed_events
120
+ aggregate_build ([transformed_snapshot_event] + transformed_events).compact
115
121
  end
116
122
 
117
123
  def new *args
@@ -25,7 +25,7 @@ module Sandthorn
25
25
  unless aggregate_snapshot
26
26
  raise Errors::SnapshotError, "No snapshot has been created!"
27
27
  end
28
- @aggregate_snapshot[:event_data] = Sandthorn.serialize @aggregate_snapshot[:event_args]
28
+ @aggregate_snapshot[:event_data] = Sandthorn.serialize_snapshot @aggregate_snapshot[:event_args]
29
29
  @aggregate_snapshot[:event_args] = nil
30
30
  Sandthorn.save_snapshot(aggregate_snapshot: @aggregate_snapshot, aggregate_id: @aggregate_id, aggregate_type: self.class)
31
31
  @aggregate_snapshot = nil
@@ -41,7 +41,7 @@ module Sandthorn
41
41
  end
42
42
 
43
43
  @aggregate_snapshot[:event_data] = Sandthorn
44
- .serialize aggregate_snapshot[:event_args]
44
+ .serialize_snapshot aggregate_snapshot[:event_args]
45
45
 
46
46
  @aggregate_snapshot[:event_args] = nil
47
47
  Sandthorn.save_snapshot aggregate_snapshot, aggregate_id
@@ -1,3 +1,3 @@
1
1
  module Sandthorn
2
- VERSION = "0.7.0"
2
+ VERSION = "0.8.0"
3
3
  end
data/sandthorn.gemspec CHANGED
@@ -19,6 +19,7 @@ Gem::Specification.new do |spec|
19
19
  spec.require_paths = ["lib"]
20
20
  spec.required_ruby_version = '>= 2.0'
21
21
 
22
+
22
23
  spec.add_development_dependency "bundler", "~> 1.3"
23
24
  spec.add_development_dependency "rake"
24
25
  spec.add_development_dependency "rspec", "~> 3.0"
data/spec/spec_helper.rb CHANGED
@@ -40,6 +40,10 @@ def sqlite_store_setup
40
40
  driver = SandthornDriverSequel.driver_from_url(url: url)
41
41
  Sandthorn.configure do |c|
42
42
  c.event_store = driver
43
+ c.serializer = Proc.new { |data| YAML::dump(data) }
44
+ c.deserializer = Proc.new { |data| YAML::load(data) }
45
+ c.snapshot_serializer = Proc.new { |data| YAML::dump(data) }
46
+ c.snapshot_deserializer = Proc.new { |data| YAML::load(data) }
43
47
  end
44
48
  migrator = SandthornDriverSequel::Migration.new url: url
45
49
  SandthornDriverSequel.migrate_db url: url
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.7.0
4
+ version: 0.8.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Lars Krantz
@@ -10,160 +10,160 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2015-03-11 00:00:00.000000000 Z
13
+ date: 2015-05-06 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: bundler
17
17
  requirement: !ruby/object:Gem::Requirement
18
18
  requirements:
19
- - - ~>
19
+ - - "~>"
20
20
  - !ruby/object:Gem::Version
21
21
  version: '1.3'
22
22
  type: :development
23
23
  prerelease: false
24
24
  version_requirements: !ruby/object:Gem::Requirement
25
25
  requirements:
26
- - - ~>
26
+ - - "~>"
27
27
  - !ruby/object:Gem::Version
28
28
  version: '1.3'
29
29
  - !ruby/object:Gem::Dependency
30
30
  name: rake
31
31
  requirement: !ruby/object:Gem::Requirement
32
32
  requirements:
33
- - - '>='
33
+ - - ">="
34
34
  - !ruby/object:Gem::Version
35
35
  version: '0'
36
36
  type: :development
37
37
  prerelease: false
38
38
  version_requirements: !ruby/object:Gem::Requirement
39
39
  requirements:
40
- - - '>='
40
+ - - ">="
41
41
  - !ruby/object:Gem::Version
42
42
  version: '0'
43
43
  - !ruby/object:Gem::Dependency
44
44
  name: rspec
45
45
  requirement: !ruby/object:Gem::Requirement
46
46
  requirements:
47
- - - ~>
47
+ - - "~>"
48
48
  - !ruby/object:Gem::Version
49
49
  version: '3.0'
50
50
  type: :development
51
51
  prerelease: false
52
52
  version_requirements: !ruby/object:Gem::Requirement
53
53
  requirements:
54
- - - ~>
54
+ - - "~>"
55
55
  - !ruby/object:Gem::Version
56
56
  version: '3.0'
57
57
  - !ruby/object:Gem::Dependency
58
58
  name: gem-release
59
59
  requirement: !ruby/object:Gem::Requirement
60
60
  requirements:
61
- - - '>='
61
+ - - ">="
62
62
  - !ruby/object:Gem::Version
63
63
  version: '0'
64
64
  type: :development
65
65
  prerelease: false
66
66
  version_requirements: !ruby/object:Gem::Requirement
67
67
  requirements:
68
- - - '>='
68
+ - - ">="
69
69
  - !ruby/object:Gem::Version
70
70
  version: '0'
71
71
  - !ruby/object:Gem::Dependency
72
72
  name: pry
73
73
  requirement: !ruby/object:Gem::Requirement
74
74
  requirements:
75
- - - '>='
75
+ - - ">="
76
76
  - !ruby/object:Gem::Version
77
77
  version: '0'
78
78
  type: :development
79
79
  prerelease: false
80
80
  version_requirements: !ruby/object:Gem::Requirement
81
81
  requirements:
82
- - - '>='
82
+ - - ">="
83
83
  - !ruby/object:Gem::Version
84
84
  version: '0'
85
85
  - !ruby/object:Gem::Dependency
86
86
  name: pry-doc
87
87
  requirement: !ruby/object:Gem::Requirement
88
88
  requirements:
89
- - - '>='
89
+ - - ">="
90
90
  - !ruby/object:Gem::Version
91
91
  version: '0'
92
92
  type: :development
93
93
  prerelease: false
94
94
  version_requirements: !ruby/object:Gem::Requirement
95
95
  requirements:
96
- - - '>='
96
+ - - ">="
97
97
  - !ruby/object:Gem::Version
98
98
  version: '0'
99
99
  - !ruby/object:Gem::Dependency
100
100
  name: awesome_print
101
101
  requirement: !ruby/object:Gem::Requirement
102
102
  requirements:
103
- - - '>='
103
+ - - ">="
104
104
  - !ruby/object:Gem::Version
105
105
  version: '0'
106
106
  type: :development
107
107
  prerelease: false
108
108
  version_requirements: !ruby/object:Gem::Requirement
109
109
  requirements:
110
- - - '>='
110
+ - - ">="
111
111
  - !ruby/object:Gem::Version
112
112
  version: '0'
113
113
  - !ruby/object:Gem::Dependency
114
114
  name: autotest-standalone
115
115
  requirement: !ruby/object:Gem::Requirement
116
116
  requirements:
117
- - - '>='
117
+ - - ">="
118
118
  - !ruby/object:Gem::Version
119
119
  version: '0'
120
120
  type: :development
121
121
  prerelease: false
122
122
  version_requirements: !ruby/object:Gem::Requirement
123
123
  requirements:
124
- - - '>='
124
+ - - ">="
125
125
  - !ruby/object:Gem::Version
126
126
  version: '0'
127
127
  - !ruby/object:Gem::Dependency
128
128
  name: sqlite3
129
129
  requirement: !ruby/object:Gem::Requirement
130
130
  requirements:
131
- - - '>='
131
+ - - ">="
132
132
  - !ruby/object:Gem::Version
133
133
  version: '0'
134
134
  type: :development
135
135
  prerelease: false
136
136
  version_requirements: !ruby/object:Gem::Requirement
137
137
  requirements:
138
- - - '>='
138
+ - - ">="
139
139
  - !ruby/object:Gem::Version
140
140
  version: '0'
141
141
  - !ruby/object:Gem::Dependency
142
142
  name: coveralls
143
143
  requirement: !ruby/object:Gem::Requirement
144
144
  requirements:
145
- - - '>='
145
+ - - ">="
146
146
  - !ruby/object:Gem::Version
147
147
  version: '0'
148
148
  type: :development
149
149
  prerelease: false
150
150
  version_requirements: !ruby/object:Gem::Requirement
151
151
  requirements:
152
- - - '>='
152
+ - - ">="
153
153
  - !ruby/object:Gem::Version
154
154
  version: '0'
155
155
  - !ruby/object:Gem::Dependency
156
156
  name: sandthorn_driver_sequel
157
157
  requirement: !ruby/object:Gem::Requirement
158
158
  requirements:
159
- - - ~>
159
+ - - "~>"
160
160
  - !ruby/object:Gem::Version
161
161
  version: '2.0'
162
162
  type: :development
163
163
  prerelease: false
164
164
  version_requirements: !ruby/object:Gem::Requirement
165
165
  requirements:
166
- - - ~>
166
+ - - "~>"
167
167
  - !ruby/object:Gem::Version
168
168
  version: '2.0'
169
169
  description: Event sourcing gem
@@ -175,12 +175,12 @@ executables: []
175
175
  extensions: []
176
176
  extra_rdoc_files: []
177
177
  files:
178
- - .autotest
179
- - .gitignore
180
- - .rspec
181
- - .ruby-gemset
182
- - .ruby-version
183
- - .travis.yml
178
+ - ".autotest"
179
+ - ".gitignore"
180
+ - ".rspec"
181
+ - ".ruby-gemset"
182
+ - ".ruby-version"
183
+ - ".travis.yml"
184
184
  - Gemfile
185
185
  - Gemfile.lock
186
186
  - Gemfile.lock.old
@@ -225,17 +225,17 @@ require_paths:
225
225
  - lib
226
226
  required_ruby_version: !ruby/object:Gem::Requirement
227
227
  requirements:
228
- - - '>='
228
+ - - ">="
229
229
  - !ruby/object:Gem::Version
230
230
  version: '2.0'
231
231
  required_rubygems_version: !ruby/object:Gem::Requirement
232
232
  requirements:
233
- - - '>='
233
+ - - ">="
234
234
  - !ruby/object:Gem::Version
235
235
  version: '0'
236
236
  requirements: []
237
237
  rubyforge_project:
238
- rubygems_version: 2.2.2
238
+ rubygems_version: 2.4.3
239
239
  signing_key:
240
240
  specification_version: 4
241
241
  summary: Event sourcing gem