vorpal 0.0.6.rc4 → 0.0.6
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 +8 -8
- data/README.md +10 -3
- data/lib/vorpal/aggregate_repository.rb +227 -190
- data/lib/vorpal/aggregate_traversal.rb +35 -35
- data/lib/vorpal/aggregate_utils.rb +1 -0
- data/lib/vorpal/config_builder.rb +120 -119
- data/lib/vorpal/configs.rb +22 -8
- data/lib/vorpal/configuration.rb +43 -40
- data/lib/vorpal/db_driver.rb +14 -2
- data/lib/vorpal/db_loader.rb +102 -104
- data/lib/vorpal/identity_map.rb +25 -25
- data/lib/vorpal/loaded_objects.rb +29 -28
- data/lib/vorpal/util/array_hash.rb +12 -14
- data/lib/vorpal/version.rb +1 -1
- data/spec/vorpal/{aggregate_repository_spec.rb → acceptance/aggregate_repository_spec.rb} +133 -2
- data/spec/vorpal/{performance_spec.rb → acceptance/performance_spec.rb} +4 -4
- data/spec/vorpal/{class_config_builder_spec.rb → unit/class_config_builder_spec.rb} +0 -0
- data/spec/vorpal/{configs_spec.rb → unit/configs_spec.rb} +0 -0
- data/spec/vorpal/{identity_map_spec.rb → unit/identity_map_spec.rb} +0 -0
- data/spec/vorpal/unit/loaded_objects_spec.rb +22 -0
- data/vorpal.gemspec +1 -0
- metadata +30 -14
@@ -1,19 +1,17 @@
|
|
1
1
|
module Vorpal
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
2
|
+
# @private
|
3
|
+
module ArrayHash
|
4
|
+
def add_to_hash(array_hash, key, values)
|
5
|
+
if array_hash[key].nil? || array_hash[key].empty?
|
6
|
+
array_hash[key] = []
|
7
|
+
end
|
8
|
+
array_hash[key].concat(Array(values))
|
8
9
|
end
|
9
|
-
array_hash[key].concat(Array(values))
|
10
|
-
end
|
11
10
|
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
11
|
+
def pop(array_hash)
|
12
|
+
key = array_hash.first.first
|
13
|
+
values = array_hash.delete(key)
|
14
|
+
[key, values]
|
15
|
+
end
|
16
16
|
end
|
17
17
|
end
|
18
|
-
|
19
|
-
end
|
data/lib/vorpal/version.rb
CHANGED
@@ -211,7 +211,7 @@ describe 'Aggregate Repository' do
|
|
211
211
|
expect(tree.fissures.first.length).to eq 21
|
212
212
|
end
|
213
213
|
|
214
|
-
describe
|
214
|
+
describe 'cycles' do
|
215
215
|
it 'persists' do
|
216
216
|
test_repository = configure_with_cycle
|
217
217
|
|
@@ -225,7 +225,7 @@ describe 'Aggregate Repository' do
|
|
225
225
|
end
|
226
226
|
|
227
227
|
it 'hydrates' do
|
228
|
-
|
228
|
+
test_repository = configure_with_cycle
|
229
229
|
|
230
230
|
tree_db = TreeDB.create!
|
231
231
|
BranchDB.create!(length: 50, tree_id: tree_db.id)
|
@@ -514,6 +514,20 @@ describe 'Aggregate Repository' do
|
|
514
514
|
end
|
515
515
|
end
|
516
516
|
|
517
|
+
describe 'load_all' do
|
518
|
+
it 'returns objects in the same order as the ids' do
|
519
|
+
test_repository = configure
|
520
|
+
|
521
|
+
tree_db1 = TreeDB.create!
|
522
|
+
tree_db2 = TreeDB.create!
|
523
|
+
tree_db3 = TreeDB.create!
|
524
|
+
|
525
|
+
trees = test_repository.load_all([tree_db2.id, tree_db1.id, tree_db3.id], Tree)
|
526
|
+
|
527
|
+
expect(trees.map(&:id)).to eq [tree_db2.id, tree_db1.id, tree_db3.id]
|
528
|
+
end
|
529
|
+
end
|
530
|
+
|
517
531
|
describe 'destroy' do
|
518
532
|
it 'removes the entity from the database' do
|
519
533
|
test_repository = configure
|
@@ -581,6 +595,123 @@ describe 'Aggregate Repository' do
|
|
581
595
|
end
|
582
596
|
end
|
583
597
|
|
598
|
+
describe 'destroy_by_id' do
|
599
|
+
it 'removes the entity from the database' do
|
600
|
+
test_repository = configure
|
601
|
+
|
602
|
+
tree_db = TreeDB.create!
|
603
|
+
|
604
|
+
test_repository.destroy_all_by_id([tree_db.id], Tree)
|
605
|
+
|
606
|
+
expect(TreeDB.count).to eq 0
|
607
|
+
end
|
608
|
+
end
|
609
|
+
|
610
|
+
describe 'non-existent values' do
|
611
|
+
it 'load_all ignores ids that do not exist' do
|
612
|
+
test_repository = configure
|
613
|
+
|
614
|
+
results = test_repository.load_all([99], Tree)
|
615
|
+
expect(results).to eq []
|
616
|
+
end
|
617
|
+
|
618
|
+
it 'load_all throws an exception when given a nil id' do
|
619
|
+
test_repository = configure
|
620
|
+
|
621
|
+
expect {
|
622
|
+
test_repository.load_all([nil], Tree)
|
623
|
+
}.to raise_error(Vorpal::InvalidPrimaryKeyValue, "Nil primary key values are not allowed.")
|
624
|
+
end
|
625
|
+
|
626
|
+
it 'load throws an exception when given a nil id' do
|
627
|
+
test_repository = configure
|
628
|
+
|
629
|
+
expect {
|
630
|
+
test_repository.load(nil, Tree)
|
631
|
+
}.to raise_error(Vorpal::InvalidPrimaryKeyValue, "Nil primary key values are not allowed.")
|
632
|
+
end
|
633
|
+
|
634
|
+
it 'load_all ignores empty arrays' do
|
635
|
+
test_repository = configure
|
636
|
+
|
637
|
+
results = test_repository.load_all([], Tree)
|
638
|
+
expect(results).to eq []
|
639
|
+
end
|
640
|
+
|
641
|
+
it 'persist_all ignores empty arrays' do
|
642
|
+
test_repository = configure
|
643
|
+
|
644
|
+
results = test_repository.persist_all([])
|
645
|
+
expect(results).to eq []
|
646
|
+
end
|
647
|
+
|
648
|
+
it 'persist_all throws an exception when given a nil root' do
|
649
|
+
test_repository = configure
|
650
|
+
expect {
|
651
|
+
test_repository.persist_all([nil])
|
652
|
+
}.to raise_error(Vorpal::InvalidAggregateRoot, "Nil aggregate roots are not allowed.")
|
653
|
+
end
|
654
|
+
|
655
|
+
it 'persist throws an exception when given a nil root' do
|
656
|
+
test_repository = configure
|
657
|
+
expect {
|
658
|
+
test_repository.persist(nil)
|
659
|
+
}.to raise_error(Vorpal::InvalidAggregateRoot, "Nil aggregate roots are not allowed.")
|
660
|
+
end
|
661
|
+
|
662
|
+
it 'destroy_all ignores empty arrays' do
|
663
|
+
test_repository = configure
|
664
|
+
|
665
|
+
results = test_repository.destroy_all([])
|
666
|
+
expect(results).to eq []
|
667
|
+
end
|
668
|
+
|
669
|
+
it 'destroy throws an exception when given a nil root' do
|
670
|
+
test_repository = configure
|
671
|
+
|
672
|
+
expect {
|
673
|
+
test_repository.destroy(nil)
|
674
|
+
}.to raise_error(Vorpal::InvalidAggregateRoot, "Nil aggregate roots are not allowed.")
|
675
|
+
end
|
676
|
+
|
677
|
+
it 'destroy_all throws an exception when given a nil root' do
|
678
|
+
test_repository = configure
|
679
|
+
|
680
|
+
expect {
|
681
|
+
test_repository.destroy_all([nil])
|
682
|
+
}.to raise_error(Vorpal::InvalidAggregateRoot, "Nil aggregate roots are not allowed.")
|
683
|
+
end
|
684
|
+
|
685
|
+
it 'destroy_all_by_id ignores empty arrays' do
|
686
|
+
test_repository = configure
|
687
|
+
|
688
|
+
results = test_repository.destroy_all_by_id([], Tree)
|
689
|
+
expect(results).to eq []
|
690
|
+
end
|
691
|
+
|
692
|
+
it 'destroy_all_by_id ignores ids that do not exist' do
|
693
|
+
test_repository = configure
|
694
|
+
|
695
|
+
test_repository.destroy_all_by_id([99], Tree)
|
696
|
+
end
|
697
|
+
|
698
|
+
it 'destroy_all_by_id throws an exception when given a nil id' do
|
699
|
+
test_repository = configure
|
700
|
+
|
701
|
+
expect {
|
702
|
+
test_repository.destroy_all_by_id([nil], Tree)
|
703
|
+
}.to raise_error(Vorpal::InvalidPrimaryKeyValue, "Nil primary key values are not allowed.")
|
704
|
+
end
|
705
|
+
|
706
|
+
it 'destroy_by_id throws an exception when given a nil id' do
|
707
|
+
test_repository = configure
|
708
|
+
|
709
|
+
expect {
|
710
|
+
test_repository.destroy_by_id(nil, Tree)
|
711
|
+
}.to raise_error(Vorpal::InvalidPrimaryKeyValue, "Nil primary key values are not allowed.")
|
712
|
+
end
|
713
|
+
end
|
714
|
+
|
584
715
|
private
|
585
716
|
|
586
717
|
def configure_polymorphic_has_many
|
@@ -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(
|
96
|
-
x.report(
|
97
|
-
x.report(
|
98
|
-
x.report(
|
95
|
+
x.report('create') { test_repository.persist_all(trees) }
|
96
|
+
x.report('update') { test_repository.persist_all(trees) }
|
97
|
+
x.report('load') { ids = trees.map(&:id); test_repository.load_all(ids, Tree) }
|
98
|
+
x.report('destroy') { test_repository.destroy_all(trees) }
|
99
99
|
end
|
100
100
|
end
|
101
101
|
|
File without changes
|
File without changes
|
File without changes
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'unit_spec_helper'
|
2
|
+
|
3
|
+
require 'virtus'
|
4
|
+
require 'vorpal/loaded_objects'
|
5
|
+
require 'vorpal/configs'
|
6
|
+
|
7
|
+
describe Vorpal::LoadedObjects do
|
8
|
+
class TestObject
|
9
|
+
include Virtus.model
|
10
|
+
attribute :id, Integer
|
11
|
+
end
|
12
|
+
|
13
|
+
it 'does not accept duplicate objects' do
|
14
|
+
object = TestObject.new(id: 22)
|
15
|
+
config = Vorpal::ClassConfig.new({domain_class: Object})
|
16
|
+
|
17
|
+
subject.add(config, [object, object])
|
18
|
+
subject.add(config, [object])
|
19
|
+
|
20
|
+
expect(subject.objects.values.flatten).to contain_exactly(object)
|
21
|
+
end
|
22
|
+
end
|
data/vorpal.gemspec
CHANGED
@@ -20,6 +20,7 @@ Gem::Specification.new do |spec|
|
|
20
20
|
|
21
21
|
spec.add_runtime_dependency "simple_serializer", "~> 1.0"
|
22
22
|
spec.add_runtime_dependency "equalizer"
|
23
|
+
spec.add_runtime_dependency "activesupport"
|
23
24
|
|
24
25
|
spec.add_development_dependency "rake", "~> 10.0"
|
25
26
|
spec.add_development_dependency "rspec", "~> 3.0.0"
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: vorpal
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.6
|
4
|
+
version: 0.0.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sean Kirby
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-05-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: simple_serializer
|
@@ -38,6 +38,20 @@ dependencies:
|
|
38
38
|
- - ! '>='
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: activesupport
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ! '>='
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ! '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
41
55
|
- !ruby/object:Gem::Dependency
|
42
56
|
name: rake
|
43
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -153,11 +167,12 @@ files:
|
|
153
167
|
- spec/helpers/db_helpers.rb
|
154
168
|
- spec/integration_spec_helper.rb
|
155
169
|
- spec/unit_spec_helper.rb
|
156
|
-
- spec/vorpal/aggregate_repository_spec.rb
|
157
|
-
- spec/vorpal/
|
158
|
-
- spec/vorpal/
|
159
|
-
- spec/vorpal/
|
160
|
-
- spec/vorpal/
|
170
|
+
- spec/vorpal/acceptance/aggregate_repository_spec.rb
|
171
|
+
- spec/vorpal/acceptance/performance_spec.rb
|
172
|
+
- spec/vorpal/unit/class_config_builder_spec.rb
|
173
|
+
- spec/vorpal/unit/configs_spec.rb
|
174
|
+
- spec/vorpal/unit/identity_map_spec.rb
|
175
|
+
- spec/vorpal/unit/loaded_objects_spec.rb
|
161
176
|
- vorpal.gemspec
|
162
177
|
homepage: https://github.com/nulogy/vorpal
|
163
178
|
licenses:
|
@@ -174,9 +189,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
174
189
|
version: '0'
|
175
190
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
176
191
|
requirements:
|
177
|
-
- - ! '
|
192
|
+
- - ! '>='
|
178
193
|
- !ruby/object:Gem::Version
|
179
|
-
version:
|
194
|
+
version: '0'
|
180
195
|
requirements: []
|
181
196
|
rubyforge_project:
|
182
197
|
rubygems_version: 2.4.5
|
@@ -187,8 +202,9 @@ test_files:
|
|
187
202
|
- spec/helpers/db_helpers.rb
|
188
203
|
- spec/integration_spec_helper.rb
|
189
204
|
- spec/unit_spec_helper.rb
|
190
|
-
- spec/vorpal/aggregate_repository_spec.rb
|
191
|
-
- spec/vorpal/
|
192
|
-
- spec/vorpal/
|
193
|
-
- spec/vorpal/
|
194
|
-
- spec/vorpal/
|
205
|
+
- spec/vorpal/acceptance/aggregate_repository_spec.rb
|
206
|
+
- spec/vorpal/acceptance/performance_spec.rb
|
207
|
+
- spec/vorpal/unit/class_config_builder_spec.rb
|
208
|
+
- spec/vorpal/unit/configs_spec.rb
|
209
|
+
- spec/vorpal/unit/identity_map_spec.rb
|
210
|
+
- spec/vorpal/unit/loaded_objects_spec.rb
|