vorpal 0.0.7.rc2 → 0.0.7.rc3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +6 -7
- data/lib/vorpal/{aggregate_repository.rb → aggregate_mapper.rb} +1 -2
- data/lib/vorpal/configuration.rb +1 -1
- data/lib/vorpal/db_driver.rb +10 -10
- data/lib/vorpal/engine.rb +12 -12
- data/lib/vorpal/version.rb +1 -1
- data/lib/vorpal.rb +1 -1
- data/spec/vorpal/acceptance/{aggregate_repository_spec.rb → aggregate_mapper_spec.rb} +134 -134
- data/spec/vorpal/performance/performance_spec.rb +14 -14
- data/spec/vorpal/unit/db_loader_spec.rb +1 -1
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9f2563f7c44050a5908ff5d2d3d08e9d35a343db
|
4
|
+
data.tar.gz: 569a5eb41e1278bb6b28f8e49eab416e4b38cfa5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e45f9c3942c256d2fcda1c360dda4e51da9d777d8381ab7bd0dfa1fcaf6db6901a3699ab4d9110d7f850556c43fc7a345af6406eda03c7748702e69c09a06269
|
7
|
+
data.tar.gz: e24ffc7f449a88ad55a9af19cb4a043f389ae34e3788f466b7354a34eda83f3846562d72efda14493ed8995e05bee9a8c5c9d0d21a73e827e4d07210768ab058
|
data/README.md
CHANGED
@@ -123,22 +123,22 @@ module TreeRepository
|
|
123
123
|
belongs_to :tree
|
124
124
|
end
|
125
125
|
end
|
126
|
-
@
|
126
|
+
@mapper = engine.mapper_for(Tree)
|
127
127
|
|
128
128
|
def find(tree_id)
|
129
|
-
@
|
129
|
+
@mapper.query.where(id: tree_id).load_one
|
130
130
|
end
|
131
131
|
|
132
132
|
def save(tree)
|
133
|
-
@
|
133
|
+
@mapper.persist(tree)
|
134
134
|
end
|
135
135
|
|
136
136
|
def destroy(tree)
|
137
|
-
@
|
137
|
+
@mapper.destroy(tree)
|
138
138
|
end
|
139
139
|
|
140
140
|
def destroy_by_id(tree_id)
|
141
|
-
@
|
141
|
+
@mapper.destroy_by_id(tree_id)
|
142
142
|
end
|
143
143
|
end
|
144
144
|
```
|
@@ -209,8 +209,7 @@ For example:
|
|
209
209
|
|
210
210
|
```ruby
|
211
211
|
def find_all
|
212
|
-
|
213
|
-
@repository.load_all(ids, Tree) # use the repository to load all the aggregates
|
212
|
+
@mapper.query.load_all # use the mapper to load all the aggregates
|
214
213
|
end
|
215
214
|
```
|
216
215
|
|
@@ -1,7 +1,7 @@
|
|
1
1
|
require 'vorpal/identity_map'
|
2
2
|
|
3
3
|
module Vorpal
|
4
|
-
class
|
4
|
+
class AggregateMapper
|
5
5
|
# @private
|
6
6
|
def initialize(domain_class, engine)
|
7
7
|
@domain_class = domain_class
|
@@ -85,7 +85,6 @@ module Vorpal
|
|
85
85
|
end
|
86
86
|
|
87
87
|
def query
|
88
|
-
# db_class.unscoped.extending(ArelQueryMethods.new(self))
|
89
88
|
@engine.query(@domain_class)
|
90
89
|
end
|
91
90
|
end
|
data/lib/vorpal/configuration.rb
CHANGED
@@ -6,7 +6,7 @@ module Vorpal
|
|
6
6
|
|
7
7
|
# Configures and creates a {Engine} instance.
|
8
8
|
#
|
9
|
-
# @param options [Hash] Global configuration options for the
|
9
|
+
# @param options [Hash] Global configuration options for the engine instance.
|
10
10
|
# @option options [Object] :db_driver (Object that will be used to interact with the DB.)
|
11
11
|
# Must be duck-type compatible with {DbDriver}.
|
12
12
|
#
|
data/lib/vorpal/db_driver.rb
CHANGED
@@ -68,8 +68,8 @@ module Vorpal
|
|
68
68
|
# Builds a composable query object (e.g. ActiveRecord::Relation) with Vorpal methods mixed in.
|
69
69
|
#
|
70
70
|
# @param class_config [ClassConfig] Config of the entity whose db representations should be returned.
|
71
|
-
def query(class_config)
|
72
|
-
class_config.db_class.unscoped.extending(ArelQueryMethods.new(
|
71
|
+
def query(class_config, aggregate_mapper)
|
72
|
+
class_config.db_class.unscoped.extending(ArelQueryMethods.new(aggregate_mapper))
|
73
73
|
end
|
74
74
|
|
75
75
|
private
|
@@ -88,30 +88,30 @@ module Vorpal
|
|
88
88
|
end
|
89
89
|
|
90
90
|
class ArelQueryMethods < Module
|
91
|
-
def initialize(
|
92
|
-
@
|
91
|
+
def initialize(mapper)
|
92
|
+
@mapper = mapper
|
93
93
|
end
|
94
94
|
|
95
95
|
def extended(descendant)
|
96
96
|
super
|
97
97
|
descendant.extend(Methods)
|
98
|
-
descendant.
|
98
|
+
descendant.vorpal_aggregate_mapper = @mapper
|
99
99
|
end
|
100
100
|
|
101
101
|
# Methods in this module will appear on any composable
|
102
102
|
module Methods
|
103
|
-
attr_writer :
|
103
|
+
attr_writer :vorpal_aggregate_mapper
|
104
104
|
|
105
|
-
# See {
|
105
|
+
# See {AggregateMapper#load_many}.
|
106
106
|
def load_many
|
107
107
|
db_roots = self.all
|
108
|
-
@
|
108
|
+
@vorpal_aggregate_mapper.load_many(db_roots)
|
109
109
|
end
|
110
110
|
|
111
|
-
# See {
|
111
|
+
# See {AggregateMapper#load_one}.
|
112
112
|
def load_one
|
113
113
|
db_root = self.first
|
114
|
-
@
|
114
|
+
@vorpal_aggregate_mapper.load_one(db_root)
|
115
115
|
end
|
116
116
|
end
|
117
117
|
end
|
data/lib/vorpal/engine.rb
CHANGED
@@ -2,7 +2,7 @@ require 'vorpal/identity_map'
|
|
2
2
|
require 'vorpal/aggregate_utils'
|
3
3
|
require 'vorpal/db_loader'
|
4
4
|
require 'vorpal/db_driver'
|
5
|
-
require 'vorpal/
|
5
|
+
require 'vorpal/aggregate_mapper'
|
6
6
|
|
7
7
|
module Vorpal
|
8
8
|
class Engine
|
@@ -12,16 +12,16 @@ module Vorpal
|
|
12
12
|
@configs = master_config
|
13
13
|
end
|
14
14
|
|
15
|
-
# Creates a
|
15
|
+
# Creates a mapper for saving/updating/loading/destroying an aggregate to/from
|
16
16
|
# the DB. It is possible to use the methods directly on the {Engine}.
|
17
17
|
#
|
18
18
|
# @param domain_class [Class] Class of the root of the aggregate.
|
19
|
-
# @return [
|
20
|
-
def
|
21
|
-
|
19
|
+
# @return [AggregateMapper] Mapper suitable for mapping a single aggregate.
|
20
|
+
def mapper_for(domain_class)
|
21
|
+
AggregateMapper.new(domain_class, self)
|
22
22
|
end
|
23
23
|
|
24
|
-
# Try to use {
|
24
|
+
# Try to use {AggregateMapper#persist} instead.
|
25
25
|
def persist(roots)
|
26
26
|
roots = wrap(roots)
|
27
27
|
return roots if roots.empty?
|
@@ -46,12 +46,12 @@ module Vorpal
|
|
46
46
|
end
|
47
47
|
end
|
48
48
|
|
49
|
-
# Try to use {
|
49
|
+
# Try to use {AggregateMapper#load_one} instead.
|
50
50
|
def load_one(db_root, domain_class, identity_map)
|
51
51
|
load_many(Array(db_root), domain_class, identity_map).first
|
52
52
|
end
|
53
53
|
|
54
|
-
# Try to use {
|
54
|
+
# Try to use {AggregateMapper#load_many} instead.
|
55
55
|
def load_many(db_roots, domain_class, identity_map)
|
56
56
|
raise InvalidAggregateRoot, 'Nil aggregate roots are not allowed.' if db_roots.any?(&:nil?)
|
57
57
|
|
@@ -62,7 +62,7 @@ module Vorpal
|
|
62
62
|
db_roots.map { |db_object| identity_map.get(db_object) }
|
63
63
|
end
|
64
64
|
|
65
|
-
# Try to use {
|
65
|
+
# Try to use {AggregateMapper#destroy} instead.
|
66
66
|
def destroy(roots)
|
67
67
|
roots = wrap(roots)
|
68
68
|
return roots if roots.empty?
|
@@ -72,7 +72,7 @@ module Vorpal
|
|
72
72
|
roots
|
73
73
|
end
|
74
74
|
|
75
|
-
# Try to use {
|
75
|
+
# Try to use {AggregateMapper#destroy_by_id} instead.
|
76
76
|
def destroy_by_id(ids, domain_class)
|
77
77
|
ids = wrap(ids)
|
78
78
|
raise InvalidPrimaryKeyValue, 'Nil primary key values are not allowed.' if ids.any?(&:nil?)
|
@@ -84,13 +84,13 @@ module Vorpal
|
|
84
84
|
ids
|
85
85
|
end
|
86
86
|
|
87
|
-
# Try to use {
|
87
|
+
# Try to use {AggregateMapper#db_class} instead.
|
88
88
|
def db_class(domain_class)
|
89
89
|
@configs.config_for(domain_class).db_class
|
90
90
|
end
|
91
91
|
|
92
92
|
def query(domain_class)
|
93
|
-
@db_driver.query(@configs.config_for(domain_class))
|
93
|
+
@db_driver.query(@configs.config_for(domain_class), mapper_for(domain_class))
|
94
94
|
end
|
95
95
|
|
96
96
|
private
|
data/lib/vorpal/version.rb
CHANGED
data/lib/vorpal.rb
CHANGED
@@ -3,7 +3,7 @@ require 'vorpal'
|
|
3
3
|
require 'virtus'
|
4
4
|
require 'activerecord-import/base'
|
5
5
|
|
6
|
-
describe '
|
6
|
+
describe 'AggregateMapper' do
|
7
7
|
|
8
8
|
# for testing polymorphic associations
|
9
9
|
class Bug
|
@@ -60,20 +60,20 @@ describe 'Aggregate Repository' do
|
|
60
60
|
|
61
61
|
describe 'new records' do
|
62
62
|
it 'saves attributes' do
|
63
|
-
|
63
|
+
test_mapper = configure
|
64
64
|
|
65
65
|
tree = Tree.new(name: 'backyard tree')
|
66
|
-
|
66
|
+
test_mapper.persist(tree)
|
67
67
|
|
68
68
|
tree_db = TreeDB.first
|
69
69
|
expect(tree_db.name).to eq 'backyard tree'
|
70
70
|
end
|
71
71
|
|
72
72
|
it 'sets the id when first saved' do
|
73
|
-
|
73
|
+
test_mapper = configure
|
74
74
|
|
75
75
|
tree = Tree.new()
|
76
|
-
|
76
|
+
test_mapper.persist(tree)
|
77
77
|
|
78
78
|
expect(tree.id).to_not be nil
|
79
79
|
|
@@ -82,12 +82,12 @@ describe 'Aggregate Repository' do
|
|
82
82
|
end
|
83
83
|
|
84
84
|
it 'saves AR::Base objects' do
|
85
|
-
|
85
|
+
test_mapper = configure
|
86
86
|
|
87
87
|
fissure = Fissure.new(length: 21)
|
88
88
|
tree = Tree.new(fissures: [fissure])
|
89
89
|
|
90
|
-
|
90
|
+
test_mapper.persist(tree)
|
91
91
|
|
92
92
|
expect(Fissure.first.length).to eq 21
|
93
93
|
end
|
@@ -96,7 +96,7 @@ describe 'Aggregate Repository' do
|
|
96
96
|
describe 'on error' do
|
97
97
|
it 'nils ids of new objects' do
|
98
98
|
db_driver = Vorpal::DbDriver.new
|
99
|
-
|
99
|
+
test_mapper = configure(db_driver: db_driver)
|
100
100
|
|
101
101
|
tree_db = TreeDB.create!
|
102
102
|
|
@@ -106,7 +106,7 @@ describe 'Aggregate Repository' do
|
|
106
106
|
tree = Tree.new(id: tree_db.id, fissures: [fissure])
|
107
107
|
|
108
108
|
expect {
|
109
|
-
|
109
|
+
test_mapper.persist(tree)
|
110
110
|
}.to raise_error(Exception)
|
111
111
|
|
112
112
|
expect(fissure.id).to eq nil
|
@@ -116,112 +116,112 @@ describe 'Aggregate Repository' do
|
|
116
116
|
|
117
117
|
describe 'existing records' do
|
118
118
|
it 'updates attributes' do
|
119
|
-
|
119
|
+
test_mapper = configure
|
120
120
|
|
121
121
|
tree = Tree.new(name: 'little tree')
|
122
|
-
|
122
|
+
test_mapper.persist(tree)
|
123
123
|
|
124
124
|
tree.name = 'big tree'
|
125
|
-
|
125
|
+
test_mapper.persist(tree)
|
126
126
|
|
127
127
|
tree_db = TreeDB.first
|
128
128
|
expect(tree_db.name).to eq 'big tree'
|
129
129
|
end
|
130
130
|
|
131
131
|
it 'does not change the id on update' do
|
132
|
-
|
132
|
+
test_mapper = configure
|
133
133
|
|
134
134
|
tree = Tree.new
|
135
|
-
|
135
|
+
test_mapper.persist(tree)
|
136
136
|
|
137
137
|
original_id = tree.id
|
138
138
|
|
139
139
|
tree.name = 'change it'
|
140
|
-
|
140
|
+
test_mapper.persist(tree)
|
141
141
|
|
142
142
|
expect(tree.id).to eq original_id
|
143
143
|
end
|
144
144
|
|
145
145
|
it 'does not create additional records' do
|
146
|
-
|
146
|
+
test_mapper = configure
|
147
147
|
|
148
148
|
tree = Tree.new
|
149
|
-
|
149
|
+
test_mapper.persist(tree)
|
150
150
|
|
151
151
|
tree.name = 'change it'
|
152
|
-
|
152
|
+
test_mapper.persist(tree)
|
153
153
|
|
154
154
|
expect(TreeDB.count).to eq 1
|
155
155
|
end
|
156
156
|
|
157
157
|
it 'removes orphans' do
|
158
|
-
|
158
|
+
test_mapper = configure
|
159
159
|
|
160
160
|
tree_db = TreeDB.create!
|
161
161
|
BranchDB.create!(tree_id: tree_db.id)
|
162
162
|
|
163
163
|
tree = Tree.new(id: tree_db.id, branches: [])
|
164
164
|
|
165
|
-
|
165
|
+
test_mapper.persist(tree)
|
166
166
|
|
167
167
|
expect(BranchDB.count).to eq 0
|
168
168
|
end
|
169
169
|
|
170
170
|
it 'does not remove orphans from unowned associations' do
|
171
|
-
|
171
|
+
test_mapper = configure_unowned
|
172
172
|
|
173
173
|
tree_db = TreeDB.create!
|
174
174
|
BranchDB.create!(tree_id: tree_db.id)
|
175
175
|
|
176
176
|
tree = Tree.new(id: tree_db.id, branches: [])
|
177
177
|
|
178
|
-
|
178
|
+
test_mapper.persist(tree)
|
179
179
|
|
180
180
|
expect(BranchDB.count).to eq 1
|
181
181
|
end
|
182
182
|
end
|
183
183
|
|
184
184
|
it 'copies attributes to domain' do
|
185
|
-
|
185
|
+
test_mapper = configure
|
186
186
|
|
187
187
|
tree_db = TreeDB.create! name: 'tree name'
|
188
|
-
tree =
|
188
|
+
tree = test_mapper.load_one(tree_db)
|
189
189
|
|
190
190
|
expect(tree.id).to eq tree_db.id
|
191
191
|
expect(tree.name).to eq 'tree name'
|
192
192
|
end
|
193
193
|
|
194
194
|
it 'hydrates ActiveRecord::Base associations' do
|
195
|
-
|
195
|
+
test_mapper = configure
|
196
196
|
|
197
197
|
tree_db = TreeDB.create!
|
198
198
|
Fissure.create! length: 21, tree_id: tree_db.id
|
199
199
|
|
200
|
-
tree =
|
200
|
+
tree = test_mapper.load_one(tree_db)
|
201
201
|
|
202
202
|
expect(tree.fissures.first.length).to eq 21
|
203
203
|
end
|
204
204
|
|
205
205
|
describe 'cycles' do
|
206
206
|
it 'persists' do
|
207
|
-
|
207
|
+
test_mapper = configure_with_cycle
|
208
208
|
|
209
209
|
tree = Tree.new
|
210
210
|
long_branch = Branch.new(length: 100, tree: tree)
|
211
211
|
tree.branches << long_branch
|
212
212
|
|
213
|
-
|
213
|
+
test_mapper.persist(tree)
|
214
214
|
|
215
215
|
expect(TreeDB.count).to eq 1
|
216
216
|
end
|
217
217
|
|
218
218
|
it 'hydrates' do
|
219
|
-
|
219
|
+
test_mapper = configure_with_cycle
|
220
220
|
|
221
221
|
tree_db = TreeDB.create!
|
222
222
|
BranchDB.create!(length: 50, tree_id: tree_db.id)
|
223
223
|
|
224
|
-
tree =
|
224
|
+
tree = test_mapper.load_one(tree_db)
|
225
225
|
|
226
226
|
expect(tree).to be tree.branches.first.tree
|
227
227
|
end
|
@@ -229,7 +229,7 @@ describe 'Aggregate Repository' do
|
|
229
229
|
|
230
230
|
describe 'recursive associations' do
|
231
231
|
it 'persists' do
|
232
|
-
|
232
|
+
test_mapper = configure_recursive
|
233
233
|
|
234
234
|
tree = Tree.new
|
235
235
|
long_branch = Branch.new(length: 100, tree: tree)
|
@@ -237,19 +237,19 @@ describe 'Aggregate Repository' do
|
|
237
237
|
short_branch = Branch.new(length: 50, tree: tree)
|
238
238
|
long_branch.branches << short_branch
|
239
239
|
|
240
|
-
|
240
|
+
test_mapper.persist(tree)
|
241
241
|
|
242
242
|
expect(BranchDB.count).to eq 2
|
243
243
|
end
|
244
244
|
|
245
245
|
it 'hydrates' do
|
246
|
-
|
246
|
+
test_mapper = configure_recursive
|
247
247
|
|
248
248
|
tree_db = TreeDB.create!
|
249
249
|
long_branch = BranchDB.create!(length: 100, tree_id: tree_db.id)
|
250
250
|
BranchDB.create!(length: 50, branch_id: long_branch.id)
|
251
251
|
|
252
|
-
tree =
|
252
|
+
tree = test_mapper.load_one(tree_db)
|
253
253
|
|
254
254
|
expect(tree.branches.first.branches.first.length).to eq 50
|
255
255
|
end
|
@@ -257,68 +257,68 @@ describe 'Aggregate Repository' do
|
|
257
257
|
|
258
258
|
describe 'belongs_to associations' do
|
259
259
|
it 'saves attributes' do
|
260
|
-
|
260
|
+
test_mapper = configure
|
261
261
|
trunk = Trunk.new(length: 12)
|
262
262
|
tree = Tree.new(trunk: trunk)
|
263
263
|
|
264
|
-
|
264
|
+
test_mapper.persist(tree)
|
265
265
|
|
266
266
|
trunk_db = TrunkDB.first
|
267
267
|
expect(trunk_db.length).to eq 12
|
268
268
|
end
|
269
269
|
|
270
270
|
it 'saves foreign keys' do
|
271
|
-
|
271
|
+
test_mapper = configure
|
272
272
|
trunk = Trunk.new
|
273
273
|
tree = Tree.new(trunk: trunk)
|
274
274
|
|
275
|
-
|
275
|
+
test_mapper.persist(tree)
|
276
276
|
|
277
277
|
tree_db = TreeDB.first
|
278
278
|
expect(tree_db.trunk_id).to eq trunk.id
|
279
279
|
end
|
280
280
|
|
281
281
|
it 'updating does not create additional rows' do
|
282
|
-
|
282
|
+
test_mapper = configure
|
283
283
|
trunk = Trunk.new
|
284
284
|
tree = Tree.new(trunk: trunk)
|
285
285
|
|
286
|
-
|
286
|
+
test_mapper.persist(tree)
|
287
287
|
|
288
288
|
trunk.length = 21
|
289
289
|
|
290
|
-
expect{
|
290
|
+
expect{ test_mapper.persist(tree) }.to_not change{ TrunkDB.count }
|
291
291
|
end
|
292
292
|
|
293
293
|
it 'only saves entities that are owned' do
|
294
|
-
|
294
|
+
test_mapper = configure_unowned
|
295
295
|
|
296
296
|
trunk = Trunk.new
|
297
297
|
tree = Tree.new(trunk: trunk)
|
298
298
|
|
299
|
-
|
299
|
+
test_mapper.persist(tree)
|
300
300
|
|
301
301
|
expect(TrunkDB.count).to eq 0
|
302
302
|
end
|
303
303
|
|
304
304
|
it 'hydrates' do
|
305
|
-
|
305
|
+
test_mapper = configure
|
306
306
|
trunk_db = TrunkDB.create!(length: 21)
|
307
307
|
tree_db = TreeDB.create!(trunk_id: trunk_db.id)
|
308
308
|
|
309
|
-
new_tree =
|
309
|
+
new_tree = test_mapper.load_one(tree_db)
|
310
310
|
expect(new_tree.trunk.length).to eq 21
|
311
311
|
end
|
312
312
|
end
|
313
313
|
|
314
314
|
describe 'has_many associations' do
|
315
315
|
it 'saves' do
|
316
|
-
|
316
|
+
test_mapper = configure
|
317
317
|
tree = Tree.new
|
318
318
|
tree.branches << Branch.new(length: 100)
|
319
319
|
tree.branches << Branch.new(length: 3)
|
320
320
|
|
321
|
-
|
321
|
+
test_mapper.persist(tree)
|
322
322
|
|
323
323
|
branches = BranchDB.all
|
324
324
|
expect(branches.size).to eq 2
|
@@ -327,51 +327,51 @@ describe 'Aggregate Repository' do
|
|
327
327
|
end
|
328
328
|
|
329
329
|
it 'saves foreign keys' do
|
330
|
-
|
330
|
+
test_mapper = configure
|
331
331
|
tree = Tree.new
|
332
332
|
tree.branches << Branch.new(length: 100)
|
333
333
|
|
334
|
-
|
334
|
+
test_mapper.persist(tree)
|
335
335
|
|
336
336
|
branches = BranchDB.all
|
337
337
|
expect(branches.first.tree_id).to eq tree.id
|
338
338
|
end
|
339
339
|
|
340
340
|
it 'updates' do
|
341
|
-
|
341
|
+
test_mapper = configure
|
342
342
|
tree = Tree.new
|
343
343
|
long_branch = Branch.new(length: 100)
|
344
344
|
tree.branches << long_branch
|
345
345
|
|
346
|
-
|
346
|
+
test_mapper.persist(tree)
|
347
347
|
|
348
348
|
long_branch.length = 120
|
349
349
|
|
350
|
-
|
350
|
+
test_mapper.persist(tree)
|
351
351
|
|
352
352
|
branches = BranchDB.all
|
353
353
|
expect(branches.first.length).to eq 120
|
354
354
|
end
|
355
355
|
|
356
356
|
it 'only saves entities that are owned' do
|
357
|
-
|
357
|
+
test_mapper = configure_unowned
|
358
358
|
|
359
359
|
tree = Tree.new
|
360
360
|
long_branch = Branch.new(length: 100)
|
361
361
|
tree.branches << long_branch
|
362
362
|
|
363
|
-
|
363
|
+
test_mapper.persist(tree)
|
364
364
|
|
365
365
|
expect(BranchDB.count).to eq 0
|
366
366
|
end
|
367
367
|
|
368
368
|
it 'hydrates' do
|
369
|
-
|
369
|
+
test_mapper = configure
|
370
370
|
|
371
371
|
tree_db = TreeDB.create!
|
372
372
|
BranchDB.create!(length: 50, tree_id: tree_db.id)
|
373
373
|
|
374
|
-
tree =
|
374
|
+
tree = test_mapper.load_one(tree_db)
|
375
375
|
|
376
376
|
expect(tree.branches.first.length).to eq 50
|
377
377
|
end
|
@@ -379,42 +379,42 @@ describe 'Aggregate Repository' do
|
|
379
379
|
|
380
380
|
describe 'has_one associations' do
|
381
381
|
it 'saves' do
|
382
|
-
|
382
|
+
test_mapper = configure_has_one
|
383
383
|
tree = Tree.new(name: 'big tree')
|
384
384
|
trunk = Trunk.new(tree: tree)
|
385
385
|
|
386
|
-
|
386
|
+
test_mapper.persist(trunk)
|
387
387
|
|
388
388
|
expect(TreeDB.first.name).to eq 'big tree'
|
389
389
|
end
|
390
390
|
|
391
391
|
it 'saves foreign keys' do
|
392
|
-
|
392
|
+
test_mapper = configure_has_one
|
393
393
|
tree = Tree.new(name: 'big tree')
|
394
394
|
trunk = Trunk.new(tree: tree)
|
395
395
|
|
396
|
-
|
396
|
+
test_mapper.persist(trunk)
|
397
397
|
|
398
398
|
expect(TreeDB.first.trunk_id).to eq trunk.id
|
399
399
|
end
|
400
400
|
|
401
401
|
it 'only saves entities that are owned' do
|
402
|
-
|
402
|
+
test_mapper = configure_unowned_has_one
|
403
403
|
tree = Tree.new
|
404
404
|
trunk = Trunk.new(tree: tree)
|
405
405
|
|
406
|
-
|
406
|
+
test_mapper.persist(trunk)
|
407
407
|
|
408
408
|
expect(TreeDB.count).to eq 0
|
409
409
|
end
|
410
410
|
|
411
411
|
it 'hydrates' do
|
412
|
-
|
412
|
+
test_mapper = configure_has_one
|
413
413
|
|
414
414
|
trunk_db = TrunkDB.create!
|
415
415
|
TreeDB.create!(name: 'big tree', trunk_id: trunk_db.id)
|
416
416
|
|
417
|
-
trunk =
|
417
|
+
trunk = test_mapper.load_one(trunk_db)
|
418
418
|
|
419
419
|
expect(trunk.tree.name).to eq 'big tree'
|
420
420
|
end
|
@@ -422,7 +422,7 @@ describe 'Aggregate Repository' do
|
|
422
422
|
|
423
423
|
describe 'polymorphic associations' do
|
424
424
|
it 'saves with has_manys' do
|
425
|
-
|
425
|
+
test_mapper = configure_polymorphic_has_many
|
426
426
|
trunk = Trunk.new
|
427
427
|
branch = Branch.new
|
428
428
|
tree = Tree.new(trunk: trunk, branches: [branch])
|
@@ -432,50 +432,50 @@ describe 'Aggregate Repository' do
|
|
432
432
|
branch_bug = Bug.new
|
433
433
|
branch.bugs << branch_bug
|
434
434
|
|
435
|
-
|
435
|
+
test_mapper.persist(tree)
|
436
436
|
|
437
437
|
expect(BugDB.find(trunk_bug.id).lives_on_type).to eq Trunk.name
|
438
438
|
expect(BugDB.find(branch_bug.id).lives_on_type).to eq Branch.name
|
439
439
|
end
|
440
440
|
|
441
441
|
it 'restores with has_manys' do
|
442
|
-
|
442
|
+
test_mapper = configure_polymorphic_has_many
|
443
443
|
|
444
444
|
trunk_db = TrunkDB.create!
|
445
445
|
tree_db = TreeDB.create!(trunk_id: trunk_db.id)
|
446
446
|
BugDB.create!(name: 'trunk bug', lives_on_id: trunk_db.id, lives_on_type: Trunk.name)
|
447
447
|
BugDB.create!(name: 'not a trunk bug!', lives_on_id: trunk_db.id, lives_on_type: 'some other table')
|
448
448
|
|
449
|
-
tree =
|
449
|
+
tree = test_mapper.load_one(tree_db)
|
450
450
|
|
451
451
|
expect(tree.trunk.bugs.map(&:name)).to eq ['trunk bug']
|
452
452
|
end
|
453
453
|
|
454
454
|
it 'saves with belongs_tos' do
|
455
|
-
|
455
|
+
test_mapper = configure_polymorphic_belongs_to
|
456
456
|
|
457
457
|
trunk_bug = Bug.new(lives_on: Trunk.new)
|
458
458
|
branch_bug = Bug.new(lives_on: Branch.new)
|
459
459
|
|
460
|
-
|
460
|
+
test_mapper.persist([trunk_bug, branch_bug])
|
461
461
|
|
462
462
|
expect(BugDB.find(trunk_bug.id).lives_on_type).to eq Trunk.name
|
463
463
|
expect(BugDB.find(branch_bug.id).lives_on_type).to eq Branch.name
|
464
464
|
end
|
465
465
|
|
466
466
|
it 'saves associations to unowned entities via belongs_to' do
|
467
|
-
|
467
|
+
test_mapper = configure_unowned_polymorphic_belongs_to
|
468
468
|
trunk = Trunk.new
|
469
469
|
|
470
470
|
trunk_bug = Bug.new(lives_on: trunk)
|
471
471
|
|
472
|
-
|
472
|
+
test_mapper.persist(trunk_bug)
|
473
473
|
|
474
474
|
expect(BugDB.find(trunk_bug.id).lives_on_type).to eq Trunk.name
|
475
475
|
end
|
476
476
|
|
477
477
|
it 'restores with belongs_tos' do
|
478
|
-
|
478
|
+
test_mapper = configure_polymorphic_belongs_to
|
479
479
|
|
480
480
|
# makes sure that we are using the fk_type to discriminate against
|
481
481
|
# two entities with the same primary key value
|
@@ -488,19 +488,19 @@ describe 'Aggregate Repository' do
|
|
488
488
|
branch_db.save!
|
489
489
|
branch_bug_db = BugDB.create!(lives_on_id: branch_db.id, lives_on_type: Branch.name)
|
490
490
|
|
491
|
-
trunk_bug, branch_bug =
|
491
|
+
trunk_bug, branch_bug = test_mapper.load_many([trunk_bug_db, branch_bug_db])
|
492
492
|
|
493
493
|
expect(trunk_bug.lives_on.length).to eq 99
|
494
494
|
expect(branch_bug.lives_on.length).to eq 5
|
495
495
|
end
|
496
496
|
|
497
497
|
it 'restores active record objects' do
|
498
|
-
|
498
|
+
test_mapper = configure_ar_polymorphic_belongs_to
|
499
499
|
|
500
500
|
swamp = Swamp.create!
|
501
501
|
tree_db = TreeDB.create!(environment_id: swamp.id, environment_type: Swamp.name)
|
502
502
|
|
503
|
-
tree =
|
503
|
+
tree = test_mapper.load_one(tree_db)
|
504
504
|
|
505
505
|
expect(tree.environment).to eq swamp
|
506
506
|
end
|
@@ -508,23 +508,23 @@ describe 'Aggregate Repository' do
|
|
508
508
|
|
509
509
|
describe 'arel' do
|
510
510
|
it 'loads many' do
|
511
|
-
|
511
|
+
test_mapper = configure
|
512
512
|
|
513
513
|
TreeDB.create!
|
514
514
|
tree_db = TreeDB.create!
|
515
515
|
|
516
|
-
trees =
|
516
|
+
trees = test_mapper.query.where(id: tree_db.id).load_many
|
517
517
|
|
518
518
|
expect(trees.map(&:id)).to eq [tree_db.id]
|
519
519
|
end
|
520
520
|
|
521
521
|
it 'loads one' do
|
522
|
-
|
522
|
+
test_mapper = configure
|
523
523
|
|
524
524
|
TreeDB.create!
|
525
525
|
tree_db = TreeDB.create!
|
526
526
|
|
527
|
-
trees =
|
527
|
+
trees = test_mapper.query.where(id: tree_db.id).load_one
|
528
528
|
|
529
529
|
expect(trees.id).to eq tree_db.id
|
530
530
|
end
|
@@ -532,24 +532,24 @@ describe 'Aggregate Repository' do
|
|
532
532
|
|
533
533
|
describe 'load_many' do
|
534
534
|
it 'maps given db objects' do
|
535
|
-
|
535
|
+
test_mapper = configure
|
536
536
|
|
537
537
|
TreeDB.create!
|
538
538
|
tree_db = TreeDB.create!
|
539
539
|
|
540
|
-
trees =
|
540
|
+
trees = test_mapper.load_many([tree_db])
|
541
541
|
|
542
542
|
expect(trees.map(&:id)).to eq [tree_db.id]
|
543
543
|
end
|
544
544
|
|
545
545
|
it 'only returns roots' do
|
546
|
-
|
546
|
+
test_mapper = configure
|
547
547
|
|
548
548
|
TreeDB.create!
|
549
549
|
tree_db = TreeDB.create!
|
550
550
|
BranchDB.create!(tree_id: tree_db.id)
|
551
551
|
|
552
|
-
trees =
|
552
|
+
trees = test_mapper.load_many([tree_db])
|
553
553
|
|
554
554
|
expect(trees.map(&:id)).to eq [tree_db.id]
|
555
555
|
end
|
@@ -557,66 +557,66 @@ describe 'Aggregate Repository' do
|
|
557
557
|
|
558
558
|
describe 'destroy' do
|
559
559
|
it 'removes the entity from the database' do
|
560
|
-
|
560
|
+
test_mapper = configure
|
561
561
|
|
562
562
|
tree_db = TreeDB.create!
|
563
563
|
|
564
|
-
|
564
|
+
test_mapper.destroy([Tree.new(id: tree_db.id)])
|
565
565
|
|
566
566
|
expect(TreeDB.count).to eq 0
|
567
567
|
end
|
568
568
|
|
569
569
|
it 'removes has many children from the database' do
|
570
|
-
|
570
|
+
test_mapper = configure
|
571
571
|
|
572
572
|
tree_db = TreeDB.create!
|
573
573
|
BranchDB.create!(tree_id: tree_db.id)
|
574
574
|
|
575
|
-
|
575
|
+
test_mapper.destroy(Tree.new(id: tree_db.id))
|
576
576
|
|
577
577
|
expect(BranchDB.count).to eq 0
|
578
578
|
end
|
579
579
|
|
580
580
|
it 'removes belongs to children from the database' do
|
581
|
-
|
581
|
+
test_mapper = configure
|
582
582
|
|
583
583
|
trunk_db = TrunkDB.create!
|
584
584
|
tree_db = TreeDB.create!(trunk_id: trunk_db.id)
|
585
585
|
|
586
|
-
|
586
|
+
test_mapper.destroy(Tree.new(id: tree_db.id))
|
587
587
|
|
588
588
|
expect(TrunkDB.count).to eq 0
|
589
589
|
end
|
590
590
|
|
591
591
|
it 'removes AR children from the database' do
|
592
|
-
|
592
|
+
test_mapper = configure
|
593
593
|
|
594
594
|
tree_db = TreeDB.create!
|
595
595
|
Fissure.create!(tree_id: tree_db.id)
|
596
596
|
|
597
|
-
|
597
|
+
test_mapper.destroy(Tree.new(id: tree_db.id))
|
598
598
|
|
599
599
|
expect(Fissure.count).to eq 0
|
600
600
|
end
|
601
601
|
|
602
602
|
it 'leaves unowned belongs to children in the database' do
|
603
|
-
|
603
|
+
test_mapper = configure_unowned
|
604
604
|
|
605
605
|
trunk_db = TrunkDB.create!
|
606
606
|
tree_db = TreeDB.create!(trunk_id: trunk_db.id)
|
607
607
|
|
608
|
-
|
608
|
+
test_mapper.destroy(Tree.new(id: tree_db.id))
|
609
609
|
|
610
610
|
expect(TrunkDB.count).to eq 1
|
611
611
|
end
|
612
612
|
|
613
613
|
it 'leaves unowned has many children in the database' do
|
614
|
-
|
614
|
+
test_mapper = configure_unowned
|
615
615
|
|
616
616
|
tree_db = TreeDB.create!
|
617
617
|
BranchDB.create!(tree_id: tree_db.id)
|
618
618
|
|
619
|
-
|
619
|
+
test_mapper.destroy(Tree.new(id: tree_db.id))
|
620
620
|
|
621
621
|
expect(BranchDB.count).to eq 1
|
622
622
|
end
|
@@ -624,11 +624,11 @@ describe 'Aggregate Repository' do
|
|
624
624
|
|
625
625
|
describe 'destroy_by_id' do
|
626
626
|
it 'removes the entity from the database' do
|
627
|
-
|
627
|
+
test_mapper = configure
|
628
628
|
|
629
629
|
tree_db = TreeDB.create!
|
630
630
|
|
631
|
-
|
631
|
+
test_mapper.destroy_by_id([tree_db.id])
|
632
632
|
|
633
633
|
expect(TreeDB.count).to eq 0
|
634
634
|
end
|
@@ -636,97 +636,97 @@ describe 'Aggregate Repository' do
|
|
636
636
|
|
637
637
|
describe 'non-existent values' do
|
638
638
|
it 'load_many returns an empty array when given an empty array' do
|
639
|
-
|
639
|
+
test_mapper = configure
|
640
640
|
|
641
|
-
results =
|
641
|
+
results = test_mapper.load_many([])
|
642
642
|
expect(results).to eq []
|
643
643
|
end
|
644
644
|
|
645
645
|
it 'load_many throws an exception when given a nil db_object' do
|
646
|
-
|
646
|
+
test_mapper = configure
|
647
647
|
|
648
648
|
expect {
|
649
|
-
|
649
|
+
test_mapper.load_many([nil])
|
650
650
|
}.to raise_error(Vorpal::InvalidAggregateRoot, "Nil aggregate roots are not allowed.")
|
651
651
|
end
|
652
652
|
|
653
653
|
it 'load_one returns nil when given nil' do
|
654
|
-
|
654
|
+
test_mapper = configure
|
655
655
|
|
656
|
-
result =
|
656
|
+
result = test_mapper.load_one(nil)
|
657
657
|
expect(result).to eq nil
|
658
658
|
end
|
659
659
|
|
660
660
|
it 'persist ignores empty arrays' do
|
661
|
-
|
661
|
+
test_mapper = configure
|
662
662
|
|
663
|
-
results =
|
663
|
+
results = test_mapper.persist([])
|
664
664
|
expect(results).to eq []
|
665
665
|
end
|
666
666
|
|
667
667
|
it 'persist throws an exception when given a collection with a nil root' do
|
668
|
-
|
668
|
+
test_mapper = configure
|
669
669
|
expect {
|
670
|
-
|
670
|
+
test_mapper.persist([nil])
|
671
671
|
}.to raise_error(Vorpal::InvalidAggregateRoot, "Nil aggregate roots are not allowed.")
|
672
672
|
end
|
673
673
|
|
674
674
|
it 'persist throws an exception when given a nil root' do
|
675
|
-
|
675
|
+
test_mapper = configure
|
676
676
|
expect {
|
677
|
-
|
677
|
+
test_mapper.persist(nil)
|
678
678
|
}.to raise_error(Vorpal::InvalidAggregateRoot, "Nil aggregate roots are not allowed.")
|
679
679
|
end
|
680
680
|
|
681
681
|
it 'destroy ignores empty arrays' do
|
682
|
-
|
682
|
+
test_mapper = configure
|
683
683
|
|
684
|
-
results =
|
684
|
+
results = test_mapper.destroy([])
|
685
685
|
expect(results).to eq []
|
686
686
|
end
|
687
687
|
|
688
688
|
it 'destroy throws an exception when given a nil root' do
|
689
|
-
|
689
|
+
test_mapper = configure
|
690
690
|
|
691
691
|
expect {
|
692
|
-
|
692
|
+
test_mapper.destroy(nil)
|
693
693
|
}.to raise_error(Vorpal::InvalidAggregateRoot, "Nil aggregate roots are not allowed.")
|
694
694
|
end
|
695
695
|
|
696
696
|
it 'destroy throws an exception when given a collection with a nil root' do
|
697
|
-
|
697
|
+
test_mapper = configure
|
698
698
|
|
699
699
|
expect {
|
700
|
-
|
700
|
+
test_mapper.destroy([nil])
|
701
701
|
}.to raise_error(Vorpal::InvalidAggregateRoot, "Nil aggregate roots are not allowed.")
|
702
702
|
end
|
703
703
|
|
704
704
|
it 'destroy_by_id ignores empty arrays' do
|
705
|
-
|
705
|
+
test_mapper = configure
|
706
706
|
|
707
|
-
results =
|
707
|
+
results = test_mapper.destroy_by_id([])
|
708
708
|
expect(results).to eq []
|
709
709
|
end
|
710
710
|
|
711
711
|
it 'destroy_by_id ignores ids that do not exist' do
|
712
|
-
|
712
|
+
test_mapper = configure
|
713
713
|
|
714
|
-
|
714
|
+
test_mapper.destroy_by_id([99])
|
715
715
|
end
|
716
716
|
|
717
717
|
it 'destroy_by_id throws an exception when given a collection with a nil id' do
|
718
|
-
|
718
|
+
test_mapper = configure
|
719
719
|
|
720
720
|
expect {
|
721
|
-
|
721
|
+
test_mapper.destroy_by_id([nil])
|
722
722
|
}.to raise_error(Vorpal::InvalidPrimaryKeyValue, "Nil primary key values are not allowed.")
|
723
723
|
end
|
724
724
|
|
725
725
|
it 'destroy_by_id throws an exception when given a nil id' do
|
726
|
-
|
726
|
+
test_mapper = configure
|
727
727
|
|
728
728
|
expect {
|
729
|
-
|
729
|
+
test_mapper.destroy_by_id(nil)
|
730
730
|
}.to raise_error(Vorpal::InvalidPrimaryKeyValue, "Nil primary key values are not allowed.")
|
731
731
|
end
|
732
732
|
end
|
@@ -755,7 +755,7 @@ private
|
|
755
755
|
attributes :name
|
756
756
|
end
|
757
757
|
end
|
758
|
-
engine.
|
758
|
+
engine.mapper_for(Tree)
|
759
759
|
end
|
760
760
|
|
761
761
|
def configure_polymorphic_belongs_to
|
@@ -773,7 +773,7 @@ private
|
|
773
773
|
attributes :length
|
774
774
|
end
|
775
775
|
end
|
776
|
-
engine.
|
776
|
+
engine.mapper_for(Bug)
|
777
777
|
end
|
778
778
|
|
779
779
|
def configure_ar_polymorphic_belongs_to
|
@@ -785,7 +785,7 @@ private
|
|
785
785
|
|
786
786
|
map Swamp, to: Swamp
|
787
787
|
end
|
788
|
-
engine.
|
788
|
+
engine.mapper_for(Tree)
|
789
789
|
end
|
790
790
|
|
791
791
|
def configure_unowned_polymorphic_belongs_to
|
@@ -803,7 +803,7 @@ private
|
|
803
803
|
attributes :length
|
804
804
|
end
|
805
805
|
end
|
806
|
-
engine.
|
806
|
+
engine.mapper_for(Bug)
|
807
807
|
end
|
808
808
|
|
809
809
|
def configure_unowned
|
@@ -822,7 +822,7 @@ private
|
|
822
822
|
attributes :length
|
823
823
|
end
|
824
824
|
end
|
825
|
-
engine.
|
825
|
+
engine.mapper_for(Tree)
|
826
826
|
end
|
827
827
|
|
828
828
|
def configure_recursive
|
@@ -837,7 +837,7 @@ private
|
|
837
837
|
has_many :branches
|
838
838
|
end
|
839
839
|
end
|
840
|
-
engine.
|
840
|
+
engine.mapper_for(Tree)
|
841
841
|
end
|
842
842
|
|
843
843
|
def configure_with_cycle
|
@@ -852,7 +852,7 @@ private
|
|
852
852
|
has_many :branches
|
853
853
|
end
|
854
854
|
end
|
855
|
-
engine.
|
855
|
+
engine.mapper_for(Tree)
|
856
856
|
end
|
857
857
|
|
858
858
|
def configure(options={})
|
@@ -874,7 +874,7 @@ private
|
|
874
874
|
|
875
875
|
map Fissure, to: Fissure
|
876
876
|
end
|
877
|
-
engine.
|
877
|
+
engine.mapper_for(Tree)
|
878
878
|
end
|
879
879
|
|
880
880
|
def configure_has_one
|
@@ -888,7 +888,7 @@ private
|
|
888
888
|
attributes :name
|
889
889
|
end
|
890
890
|
end
|
891
|
-
engine.
|
891
|
+
engine.mapper_for(Trunk)
|
892
892
|
end
|
893
893
|
|
894
894
|
def configure_unowned_has_one
|
@@ -902,6 +902,6 @@ private
|
|
902
902
|
attributes :name
|
903
903
|
end
|
904
904
|
end
|
905
|
-
engine.
|
905
|
+
engine.mapper_for(Trunk)
|
906
906
|
end
|
907
907
|
end
|
@@ -74,7 +74,7 @@ describe 'performance' do
|
|
74
74
|
TrunkDB = defineAr('trunks_perf')
|
75
75
|
end
|
76
76
|
|
77
|
-
let(:
|
77
|
+
let(:test_mapper) { build_mapper }
|
78
78
|
|
79
79
|
# Vorpal 0.0.5:
|
80
80
|
# user system total real
|
@@ -92,10 +92,10 @@ describe 'performance' do
|
|
92
92
|
it 'benchmarks all operations' do
|
93
93
|
trees = build_trees(1000)
|
94
94
|
Benchmark.bm(7) do |x|
|
95
|
-
x.report('create') {
|
96
|
-
x.report('update') {
|
97
|
-
x.report('load') {
|
98
|
-
x.report('destroy') {
|
95
|
+
x.report('create') { test_mapper.persist(trees) }
|
96
|
+
x.report('update') { test_mapper.persist(trees) }
|
97
|
+
x.report('load') { test_mapper.load_many(TreeDB.where(id: trees.map(&:id)).all) }
|
98
|
+
x.report('destroy') { test_mapper.destroy(trees) }
|
99
99
|
end
|
100
100
|
end
|
101
101
|
|
@@ -104,39 +104,39 @@ describe 'performance' do
|
|
104
104
|
|
105
105
|
puts 'starting persistence benchmark'
|
106
106
|
puts Benchmark.measure {
|
107
|
-
|
107
|
+
test_mapper.persist(trees)
|
108
108
|
}
|
109
109
|
end
|
110
110
|
|
111
111
|
it 'updates aggregates quickly' do
|
112
112
|
trees = build_trees(1000)
|
113
113
|
|
114
|
-
|
114
|
+
test_mapper.persist(trees)
|
115
115
|
|
116
116
|
puts 'starting update benchmark'
|
117
117
|
puts Benchmark.measure {
|
118
|
-
|
118
|
+
test_mapper.persist(trees)
|
119
119
|
}
|
120
120
|
end
|
121
121
|
|
122
122
|
it 'loads aggregates quickly' do
|
123
123
|
trees = build_trees(1000)
|
124
|
-
|
124
|
+
test_mapper.persist(trees)
|
125
125
|
ids = trees.map(&:id)
|
126
126
|
|
127
127
|
puts 'starting loading benchmark'
|
128
128
|
puts Benchmark.measure {
|
129
|
-
|
129
|
+
test_mapper.load_many(TreeDB.where(id: ids).all)
|
130
130
|
}
|
131
131
|
end
|
132
132
|
|
133
133
|
it 'destroys aggregates quickly' do
|
134
134
|
trees = build_trees(1000)
|
135
|
-
|
135
|
+
test_mapper.persist(trees)
|
136
136
|
|
137
137
|
puts 'starting destruction benchmark'
|
138
138
|
puts Benchmark.measure {
|
139
|
-
|
139
|
+
test_mapper.destroy(trees)
|
140
140
|
}
|
141
141
|
end
|
142
142
|
|
@@ -162,7 +162,7 @@ describe 'performance' do
|
|
162
162
|
bug_home.bugs = [bug]
|
163
163
|
end
|
164
164
|
|
165
|
-
def
|
165
|
+
def build_mapper
|
166
166
|
engine = Vorpal.define do
|
167
167
|
map Tree do
|
168
168
|
attributes :name
|
@@ -188,6 +188,6 @@ describe 'performance' do
|
|
188
188
|
belongs_to :lives_on, fk: :lives_on_id, fk_type: :lives_on_type, child_classes: [Trunk, Branch]
|
189
189
|
end
|
190
190
|
end
|
191
|
-
engine.
|
191
|
+
engine.mapper_for(Tree)
|
192
192
|
end
|
193
193
|
end
|
@@ -65,7 +65,7 @@ describe Vorpal::DbLoader do
|
|
65
65
|
# p loaded_objects.all_objects
|
66
66
|
# # expect(loaded_objects.all_objects.size).to eq(2)
|
67
67
|
#
|
68
|
-
# repo = Vorpal::
|
68
|
+
# repo = Vorpal::AggregateMapper.new(driver, master_config)
|
69
69
|
# post = repo.load(post_db.id, Post)
|
70
70
|
# p post
|
71
71
|
# expect(post.comments.size).to eq(1)
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: vorpal
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.7.
|
4
|
+
version: 0.0.7.rc3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sean Kirby
|
@@ -152,7 +152,7 @@ files:
|
|
152
152
|
- README.md
|
153
153
|
- Rakefile
|
154
154
|
- lib/vorpal.rb
|
155
|
-
- lib/vorpal/
|
155
|
+
- lib/vorpal/aggregate_mapper.rb
|
156
156
|
- lib/vorpal/aggregate_traversal.rb
|
157
157
|
- lib/vorpal/aggregate_utils.rb
|
158
158
|
- lib/vorpal/config_builder.rb
|
@@ -169,7 +169,7 @@ files:
|
|
169
169
|
- spec/helpers/db_helpers.rb
|
170
170
|
- spec/integration_spec_helper.rb
|
171
171
|
- spec/unit_spec_helper.rb
|
172
|
-
- spec/vorpal/acceptance/
|
172
|
+
- spec/vorpal/acceptance/aggregate_mapper_spec.rb
|
173
173
|
- spec/vorpal/performance/performance_spec.rb
|
174
174
|
- spec/vorpal/unit/config_builder_spec.rb
|
175
175
|
- spec/vorpal/unit/configs_spec.rb
|
@@ -205,7 +205,7 @@ test_files:
|
|
205
205
|
- spec/helpers/db_helpers.rb
|
206
206
|
- spec/integration_spec_helper.rb
|
207
207
|
- spec/unit_spec_helper.rb
|
208
|
-
- spec/vorpal/acceptance/
|
208
|
+
- spec/vorpal/acceptance/aggregate_mapper_spec.rb
|
209
209
|
- spec/vorpal/performance/performance_spec.rb
|
210
210
|
- spec/vorpal/unit/config_builder_spec.rb
|
211
211
|
- spec/vorpal/unit/configs_spec.rb
|