vorpal 0.0.7.rc2 → 0.0.7.rc3
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/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
|