rom 0.6.2 → 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (78) hide show
  1. checksums.yaml +4 -4
  2. data/.rspec +1 -0
  3. data/.rubocop.yml +9 -0
  4. data/CHANGELOG.md +34 -0
  5. data/CONTRIBUTING.md +1 -0
  6. data/Gemfile +1 -1
  7. data/README.md +12 -7
  8. data/lib/rom.rb +8 -0
  9. data/lib/rom/command.rb +19 -0
  10. data/lib/rom/commands/abstract.rb +6 -1
  11. data/lib/rom/commands/composite.rb +1 -52
  12. data/lib/rom/commands/update.rb +4 -1
  13. data/lib/rom/constants.rb +1 -0
  14. data/lib/rom/env.rb +3 -25
  15. data/lib/rom/global.rb +23 -0
  16. data/lib/rom/global/plugin_dsl.rb +47 -0
  17. data/lib/rom/header.rb +19 -8
  18. data/lib/rom/header/attribute.rb +14 -2
  19. data/lib/rom/lint/enumerable_dataset.rb +3 -1
  20. data/lib/rom/lint/repository.rb +5 -5
  21. data/lib/rom/mapper.rb +2 -1
  22. data/lib/rom/mapper/attribute_dsl.rb +86 -13
  23. data/lib/rom/mapper/dsl.rb +20 -1
  24. data/lib/rom/memory/commands.rb +3 -1
  25. data/lib/rom/memory/dataset.rb +1 -1
  26. data/lib/rom/memory/relation.rb +1 -1
  27. data/lib/rom/pipeline.rb +91 -0
  28. data/lib/rom/plugin.rb +31 -0
  29. data/lib/rom/plugin_registry.rb +134 -0
  30. data/lib/rom/plugins/relation/registry_reader.rb +30 -0
  31. data/lib/rom/processor/transproc.rb +78 -3
  32. data/lib/rom/relation/class_interface.rb +14 -2
  33. data/lib/rom/relation/composite.rb +9 -97
  34. data/lib/rom/relation/graph.rb +76 -0
  35. data/lib/rom/relation/lazy.rb +15 -63
  36. data/lib/rom/relation/materializable.rb +66 -0
  37. data/lib/rom/setup/finalize.rb +16 -5
  38. data/lib/rom/setup_dsl/mapper_dsl.rb +10 -2
  39. data/lib/rom/setup_dsl/setup.rb +1 -1
  40. data/lib/rom/support/array_dataset.rb +7 -4
  41. data/lib/rom/support/data_proxy.rb +7 -7
  42. data/lib/rom/support/deprecations.rb +17 -0
  43. data/lib/rom/support/enumerable_dataset.rb +10 -3
  44. data/lib/rom/support/inflector.rb +1 -1
  45. data/lib/rom/version.rb +1 -1
  46. data/rom.gemspec +1 -1
  47. data/spec/integration/commands/create_spec.rb +3 -3
  48. data/spec/integration/commands/update_spec.rb +24 -4
  49. data/spec/integration/mappers/combine_spec.rb +107 -0
  50. data/spec/integration/mappers/registering_custom_mappers_spec.rb +29 -0
  51. data/spec/integration/mappers/reusing_mappers_spec.rb +22 -0
  52. data/spec/integration/mappers/unwrap_spec.rb +98 -0
  53. data/spec/integration/multi_repo_spec.rb +2 -2
  54. data/spec/integration/repositories/extending_relations_spec.rb +9 -0
  55. data/spec/integration/setup_spec.rb +2 -2
  56. data/spec/shared/enumerable_dataset.rb +4 -1
  57. data/spec/shared/materializable.rb +34 -0
  58. data/spec/shared/proxy.rb +0 -0
  59. data/spec/spec_helper.rb +6 -2
  60. data/spec/support/mutant.rb +9 -6
  61. data/spec/unit/rom/commands_spec.rb +3 -3
  62. data/spec/unit/rom/header_spec.rb +2 -2
  63. data/spec/unit/rom/mapper/dsl_spec.rb +102 -1
  64. data/spec/unit/rom/memory/dataset_spec.rb +10 -33
  65. data/spec/unit/rom/memory/relation_spec.rb +63 -0
  66. data/spec/unit/rom/memory/storage_spec.rb +2 -2
  67. data/spec/unit/rom/plugin_spec.rb +121 -0
  68. data/spec/unit/rom/processor/transproc_spec.rb +47 -6
  69. data/spec/unit/rom/relation/composite_spec.rb +3 -1
  70. data/spec/unit/rom/relation/graph_spec.rb +78 -0
  71. data/spec/unit/rom/relation/lazy/combine_spec.rb +130 -0
  72. data/spec/unit/rom/relation/lazy_spec.rb +3 -1
  73. data/spec/unit/rom/relation/loaded_spec.rb +3 -1
  74. data/spec/unit/rom/setup_spec.rb +8 -8
  75. data/spec/unit/rom/support/array_dataset_spec.rb +3 -1
  76. data/spec/unit/rom/support/class_builder_spec.rb +2 -2
  77. metadata +24 -7
  78. data/lib/rom/relation/registry_reader.rb +0 -23
@@ -4,7 +4,8 @@ require 'virtus'
4
4
  describe ROM::Processor::Transproc do
5
5
  subject(:transproc) { ROM::Processor::Transproc.build(header) }
6
6
 
7
- let(:header) { ROM::Header.coerce(attributes) }
7
+ let(:header) { ROM::Header.coerce(attributes, options) }
8
+ let(:options) { {} }
8
9
 
9
10
  context 'no mapping' do
10
11
  let(:attributes) { [[:name]] }
@@ -27,7 +28,7 @@ describe ROM::Processor::Transproc do
27
28
  end
28
29
 
29
30
  context 'mapping to object' do
30
- let(:header) { ROM::Header.coerce(attributes, model) }
31
+ let(:options) { { model: model } }
31
32
 
32
33
  let(:model) do
33
34
  Class.new do
@@ -47,14 +48,53 @@ describe ROM::Processor::Transproc do
47
48
  end
48
49
 
49
50
  context 'renaming keys' do
50
- let(:attributes) { [[:name, from: 'name']] }
51
- let(:relation) { [{ 'name' => 'Jane' }, { 'name' => 'Joe' }] }
51
+ let(:attributes) do
52
+ [[:name, from: 'name']]
53
+ end
54
+
55
+ let(:options) do
56
+ { reject_keys: true }
57
+ end
58
+
59
+ let(:relation) do
60
+ [
61
+ { 'name' => 'Jane', 'age' => 21 }, { 'name' => 'Joe', age: 22 }
62
+ ]
63
+ end
52
64
 
53
- it 'returns tuples with renamed keys' do
65
+ it 'returns tuples with rejected keys' do
54
66
  expect(transproc[relation]).to eql([{ name: 'Jane' }, { name: 'Joe' }])
55
67
  end
56
68
  end
57
69
 
70
+ describe 'rejecting keys' do
71
+ let(:options) { { reject_keys: true } }
72
+
73
+ let(:attributes) do
74
+ [
75
+ ['name'],
76
+ ['tasks', type: :array, group: true, header: [['title']]]
77
+ ]
78
+ end
79
+
80
+ let(:relation) do
81
+ [
82
+ { 'name' => 'Jane', 'age' => 21, 'title' => 'Task One' },
83
+ { 'name' => 'Jane', 'age' => 21, 'title' => 'Task Two' },
84
+ { 'name' => 'Joe', 'age' => 22, 'title' => 'Task One' }
85
+ ]
86
+ end
87
+
88
+ it 'returns tuples with unknown keys rejected' do
89
+ expect(transproc[relation]).to eql([
90
+ { 'name' => 'Jane',
91
+ 'tasks' => [{ 'title' => 'Task One' }, { 'title' => 'Task Two' }] },
92
+ { 'name' => 'Joe',
93
+ 'tasks' => [{ 'title' => 'Task One' }] }
94
+ ])
95
+ end
96
+ end
97
+
58
98
  context 'mapping nested hash' do
59
99
  let(:relation) do
60
100
  [
@@ -234,7 +274,8 @@ describe ROM::Processor::Transproc do
234
274
  [
235
275
  { 'name' => 'Jane', 'title' => 'Task One' },
236
276
  { 'name' => 'Jane', 'title' => 'Task Two' },
237
- { 'name' => 'Joe', 'title' => 'Task One' }
277
+ { 'name' => 'Joe', 'title' => 'Task One' },
278
+ { 'name' => 'Joe', 'title' => nil }
238
279
  ]
239
280
  end
240
281
 
@@ -46,7 +46,9 @@ describe ROM::Relation::Composite do
46
46
 
47
47
  it 'calls and iterates' do
48
48
  result = []
49
- relation.each { |object| result << object }
49
+ relation.each do |object|
50
+ result << object
51
+ end
50
52
  expect(result).to match_array(%w(JANE JOE))
51
53
  end
52
54
 
@@ -0,0 +1,78 @@
1
+ require 'spec_helper'
2
+
3
+ describe ROM::Relation::Graph do
4
+ subject(:graph) { ROM::Relation::Graph.new(users, [tasks.for_users]) }
5
+
6
+ include_context 'users and tasks'
7
+
8
+ it_behaves_like 'materializable relation' do
9
+ let(:mapper) do
10
+ Transproc(:combine, [[:tasks, name: :name]])
11
+ end
12
+
13
+ let(:relation) do
14
+ ROM::Relation::Graph.new(users.by_name('Jane'), [tasks.for_users]) >> mapper
15
+ end
16
+ end
17
+
18
+ before do
19
+ setup.relation(:users) do
20
+ def by_name(name)
21
+ restrict(name: name)
22
+ end
23
+ end
24
+
25
+ setup.relation(:tasks) do
26
+ def for_users(users)
27
+ self
28
+ end
29
+ end
30
+ end
31
+
32
+ let(:users) { rom.relation(:users) }
33
+ let(:tasks) { rom.relation(:tasks) }
34
+
35
+ describe '#method_missing' do
36
+ it 'responds to the root methods' do
37
+ expect(graph).to respond_to(:by_name)
38
+ end
39
+
40
+ it 'forwards methods to the root and decorates response' do
41
+ expect(graph.by_name('Jane')).to be_instance_of(ROM::Relation::Graph)
42
+ end
43
+
44
+ it 'returns original response from the root' do
45
+ expect(graph.mappers).to eql(users.mappers)
46
+ end
47
+
48
+ it 'raises method error' do
49
+ expect { graph.not_here }.to raise_error(NoMethodError, /not_here/)
50
+ end
51
+ end
52
+
53
+ describe '#call' do
54
+ it 'materializes relations' do
55
+ expect(graph.call).to match_array([
56
+ rom.relations.users,
57
+ [rom.relations.tasks]
58
+ ])
59
+ end
60
+ end
61
+
62
+ describe '#to_a' do
63
+ it 'coerces to an array' do
64
+ expect(graph).to match_array([
65
+ users.to_a,
66
+ [tasks.for_users(users).to_a]
67
+ ])
68
+ end
69
+
70
+ it 'returns empty arrays when left was empty' do
71
+ graph = ROM::Relation::Graph.new(users.by_name('Not here'), [tasks.for_users])
72
+
73
+ expect(graph).to match_array([
74
+ [], [ROM::Relation::Loaded.new(tasks.for_users, [])]
75
+ ])
76
+ end
77
+ end
78
+ end
@@ -0,0 +1,130 @@
1
+ require 'spec_helper'
2
+
3
+ describe ROM::Relation::Lazy, '#combine' do
4
+ include_context 'users and tasks'
5
+
6
+ before do
7
+ setup.relation(:users) do
8
+ def by_name(name)
9
+ restrict(name: name)
10
+ end
11
+ end
12
+
13
+ setup.relation(:tasks) do
14
+ def for_users(users)
15
+ names = users.map { |user| user[:name] }
16
+ restrict { |task| names.include?(task[:name]) }
17
+ end
18
+ end
19
+
20
+ setup.relation(:tags) do
21
+ forward :map
22
+
23
+ def for_tasks(tasks)
24
+ titles = tasks.map { |task| task[:title] }
25
+ restrict { |tag| titles.include?(tag[:task]) }
26
+ end
27
+
28
+ def for_users(users)
29
+ user_tasks = tasks.for_users(users)
30
+
31
+ for_tasks(user_tasks).map { |tag|
32
+ tag.merge(user: user_tasks.detect { |task|
33
+ task[:title] == tag[:task]
34
+ } [:name])
35
+ }
36
+ end
37
+ end
38
+
39
+ setup.repositories[:default].dataset(:tags).insert(task: 'be cool', name: 'red')
40
+ setup.repositories[:default].dataset(:tags).insert(task: 'be cool', name: 'green')
41
+ end
42
+
43
+ let(:users) { rom.relation(:users) }
44
+ let(:tasks) { rom.relation(:tasks) }
45
+ let(:tags) { rom.relation(:tags) }
46
+
47
+ let(:map_users) {
48
+ proc { |users, tasks|
49
+ users.map { |user|
50
+ user.merge(tasks: tasks.select { |task| task[:name] == user[:name] })
51
+ }
52
+ }
53
+ }
54
+
55
+ let(:map_tasks) {
56
+ proc { |(tasks, children)|
57
+ tags = children.first
58
+
59
+ tasks.map { |task|
60
+ task.merge(tags: tags.select { |tag| tag[:task] == task[:title] })
61
+ }
62
+ }
63
+ }
64
+
65
+ let(:map_user_with_tasks_and_tags) {
66
+ proc { |users, (tasks, tags)|
67
+ users.map { |user|
68
+ user_tasks = tasks.select { |task| task[:name] == user[:name] }
69
+
70
+ user_tags = tasks.flat_map { |task|
71
+ tags.select { |tag| tag[:task] == task[:title] }
72
+ }
73
+
74
+ user.merge(
75
+ tasks: user_tasks,
76
+ tags: user_tags
77
+ )
78
+ }
79
+ }
80
+ }
81
+
82
+ let(:map_user_with_tasks) {
83
+ proc { |users, children|
84
+ map_users[users, map_tasks[children.first]]
85
+ }
86
+ }
87
+
88
+ it 'supports more than one eagerly-loaded relation' do
89
+ expected = [
90
+ {
91
+ name: 'Jane',
92
+ email: 'jane@doe.org',
93
+ tasks: [
94
+ { name: 'Jane', title: 'be cool', priority: 2 }
95
+ ],
96
+ tags: [
97
+ { task: 'be cool', name: 'red', user: 'Jane' },
98
+ { task: 'be cool', name: 'green', user: 'Jane' }
99
+ ]
100
+ }
101
+ ]
102
+
103
+ user_with_tasks_and_tags = users.by_name('Jane')
104
+ .combine(tasks.for_users, tags.for_users)
105
+
106
+ result = user_with_tasks_and_tags >> map_user_with_tasks_and_tags
107
+
108
+ expect(result).to match_array(expected)
109
+ end
110
+
111
+ it 'supports nested eager-loading' do
112
+ expected = [
113
+ {
114
+ name: 'Jane', email: 'jane@doe.org', tasks: [
115
+ { name: 'Jane', title: 'be cool', priority: 2, tags: [
116
+ { task: 'be cool', name: 'red' },
117
+ { task: 'be cool', name: 'green' }
118
+ ] }
119
+ ]
120
+ }
121
+ ]
122
+
123
+ user_with_tasks = users.by_name('Jane')
124
+ .combine(tasks.for_users.combine(tags.for_tasks))
125
+
126
+ result = user_with_tasks >> map_user_with_tasks
127
+
128
+ expect(result).to match_array(expected)
129
+ end
130
+ end
@@ -138,7 +138,9 @@ describe ROM::Relation::Lazy do
138
138
  describe '#each' do
139
139
  it 'yields relation tuples' do
140
140
  result = []
141
- users.each { |tuple| result << tuple }
141
+ users.each do |tuple|
142
+ result << tuple
143
+ end
142
144
  expect(result).to match_array([
143
145
  { name: 'Jane', email: 'jane@doe.org' },
144
146
  { name: 'Joe', email: 'joe@doe.org' }
@@ -10,7 +10,9 @@ describe ROM::Relation::Loaded do
10
10
  describe '#each' do
11
11
  it 'yields tuples from relation' do
12
12
  result = []
13
- users.each { |tuple| result << tuple }
13
+ users.each do |tuple|
14
+ result << tuple
15
+ end
14
16
  expect(result).to match_array([
15
17
  { name: 'Jane', email: 'jane@doe.org' },
16
18
  { name: 'Joe', email: 'joe@doe.org' }
@@ -36,23 +36,23 @@ describe ROM::Setup do
36
36
  it 'can register multiple relations with same dataset' do
37
37
  setup = ROM.setup(:memory)
38
38
 
39
- Class.new(ROM::Relation[:memory]) {
39
+ Class.new(ROM::Relation[:memory]) do
40
40
  dataset :fruits
41
41
  register_as :apples
42
42
 
43
43
  def apple?
44
44
  true
45
45
  end
46
- }
46
+ end
47
47
 
48
- Class.new(ROM::Relation[:memory]) {
48
+ Class.new(ROM::Relation[:memory]) do
49
49
  dataset :fruits
50
50
  register_as :oranges
51
51
 
52
52
  def orange?
53
53
  true
54
54
  end
55
- }
55
+ end
56
56
 
57
57
  rom = setup.finalize
58
58
 
@@ -64,15 +64,15 @@ describe ROM::Setup do
64
64
  it "raises an error when registering relations with the same `register_as`" do
65
65
  setup = ROM.setup(:memory)
66
66
 
67
- Class.new(ROM::Relation[:memory]) {
67
+ Class.new(ROM::Relation[:memory]) do
68
68
  dataset :guests
69
69
  register_as :users
70
- }
70
+ end
71
71
 
72
- Class.new(ROM::Relation[:memory]) {
72
+ Class.new(ROM::Relation[:memory]) do
73
73
  dataset :admins
74
74
  register_as :users
75
- }
75
+ end
76
76
 
77
77
  expect { setup.finalize }.to raise_error(
78
78
  ROM::RelationAlreadyDefinedError, /register_as :users/
@@ -27,7 +27,9 @@ describe ROM::ArrayDataset do
27
27
  describe '#map!' do
28
28
  context 'with a block' do
29
29
  it 'returns a new dataset with mapped data' do
30
- dataset.map! { |row| row.merge(age: 21) }
30
+ dataset.map! do |row|
31
+ row.merge(age: 21)
32
+ end
31
33
 
32
34
  expect(dataset).to match_array([
33
35
  { name: 'Jane', age: 21 }, { name: 'Joe', age: 21 }
@@ -30,11 +30,11 @@ describe ROM::ClassBuilder do
30
30
  end
31
31
 
32
32
  it 'yields created class' do
33
- klass = builder.call do |yielded_class|
33
+ klass = builder.call { |yielded_class|
34
34
  yielded_class.class_eval do
35
35
  def self.testing; end
36
36
  end
37
- end
37
+ }
38
38
 
39
39
  expect(klass).to respond_to(:testing)
40
40
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rom
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.2
4
+ version: 0.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Piotr Solnica
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-04-14 00:00:00.000000000 Z
11
+ date: 2015-05-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: transproc
@@ -19,7 +19,7 @@ dependencies:
19
19
  version: '0.2'
20
20
  - - ">="
21
21
  - !ruby/object:Gem::Version
22
- version: 0.2.0
22
+ version: 0.2.1
23
23
  type: :runtime
24
24
  prerelease: false
25
25
  version_requirements: !ruby/object:Gem::Requirement
@@ -29,7 +29,7 @@ dependencies:
29
29
  version: '0.2'
30
30
  - - ">="
31
31
  - !ruby/object:Gem::Version
32
- version: 0.2.0
32
+ version: 0.2.1
33
33
  - !ruby/object:Gem::Dependency
34
34
  name: equalizer
35
35
  requirement: !ruby/object:Gem::Requirement
@@ -119,6 +119,7 @@ files:
119
119
  - ".ruby-version"
120
120
  - ".travis.yml"
121
121
  - CHANGELOG.md
122
+ - CONTRIBUTING.md
122
123
  - Gemfile
123
124
  - Guardfile
124
125
  - LICENSE
@@ -137,6 +138,7 @@ files:
137
138
  - lib/rom/constants.rb
138
139
  - lib/rom/env.rb
139
140
  - lib/rom/global.rb
141
+ - lib/rom/global/plugin_dsl.rb
140
142
  - lib/rom/header.rb
141
143
  - lib/rom/header/attribute.rb
142
144
  - lib/rom/lint/enumerable_dataset.rb
@@ -156,15 +158,20 @@ files:
156
158
  - lib/rom/memory/repository.rb
157
159
  - lib/rom/memory/storage.rb
158
160
  - lib/rom/model_builder.rb
161
+ - lib/rom/pipeline.rb
162
+ - lib/rom/plugin.rb
163
+ - lib/rom/plugin_registry.rb
164
+ - lib/rom/plugins/relation/registry_reader.rb
159
165
  - lib/rom/processor.rb
160
166
  - lib/rom/processor/transproc.rb
161
167
  - lib/rom/relation.rb
162
168
  - lib/rom/relation/class_interface.rb
163
169
  - lib/rom/relation/composite.rb
164
170
  - lib/rom/relation/curried.rb
171
+ - lib/rom/relation/graph.rb
165
172
  - lib/rom/relation/lazy.rb
166
173
  - lib/rom/relation/loaded.rb
167
- - lib/rom/relation/registry_reader.rb
174
+ - lib/rom/relation/materializable.rb
168
175
  - lib/rom/repository.rb
169
176
  - lib/rom/setup.rb
170
177
  - lib/rom/setup/finalize.rb
@@ -178,6 +185,7 @@ files:
178
185
  - lib/rom/support/class_builder.rb
179
186
  - lib/rom/support/class_macros.rb
180
187
  - lib/rom/support/data_proxy.rb
188
+ - lib/rom/support/deprecations.rb
181
189
  - lib/rom/support/enumerable_dataset.rb
182
190
  - lib/rom/support/inflector.rb
183
191
  - lib/rom/support/options.rb
@@ -191,13 +199,17 @@ files:
191
199
  - spec/integration/commands/delete_spec.rb
192
200
  - spec/integration/commands/error_handling_spec.rb
193
201
  - spec/integration/commands/update_spec.rb
202
+ - spec/integration/mappers/combine_spec.rb
194
203
  - spec/integration/mappers/deep_embedded_spec.rb
195
204
  - spec/integration/mappers/definition_dsl_spec.rb
196
205
  - spec/integration/mappers/embedded_spec.rb
197
206
  - spec/integration/mappers/group_spec.rb
198
207
  - spec/integration/mappers/prefixing_attributes_spec.rb
208
+ - spec/integration/mappers/registering_custom_mappers_spec.rb
199
209
  - spec/integration/mappers/renaming_attributes_spec.rb
210
+ - spec/integration/mappers/reusing_mappers_spec.rb
200
211
  - spec/integration/mappers/symbolizing_attributes_spec.rb
212
+ - spec/integration/mappers/unwrap_spec.rb
201
213
  - spec/integration/mappers/wrap_spec.rb
202
214
  - spec/integration/multi_repo_spec.rb
203
215
  - spec/integration/relations/reading_spec.rb
@@ -206,7 +218,9 @@ files:
206
218
  - spec/integration/repositories/setting_logger_spec.rb
207
219
  - spec/integration/setup_spec.rb
208
220
  - spec/shared/enumerable_dataset.rb
221
+ - spec/shared/materializable.rb
209
222
  - spec/shared/one_behavior.rb
223
+ - spec/shared/proxy.rb
210
224
  - spec/shared/users_and_tasks.rb
211
225
  - spec/spec_helper.rb
212
226
  - spec/support/constant_leak_finder.rb
@@ -222,12 +236,16 @@ files:
222
236
  - spec/unit/rom/mapper_registry_spec.rb
223
237
  - spec/unit/rom/mapper_spec.rb
224
238
  - spec/unit/rom/memory/dataset_spec.rb
239
+ - spec/unit/rom/memory/relation_spec.rb
225
240
  - spec/unit/rom/memory/repository_spec.rb
226
241
  - spec/unit/rom/memory/storage_spec.rb
227
242
  - spec/unit/rom/model_builder_spec.rb
243
+ - spec/unit/rom/plugin_spec.rb
228
244
  - spec/unit/rom/processor/transproc_spec.rb
229
245
  - spec/unit/rom/registry_spec.rb
230
246
  - spec/unit/rom/relation/composite_spec.rb
247
+ - spec/unit/rom/relation/graph_spec.rb
248
+ - spec/unit/rom/relation/lazy/combine_spec.rb
231
249
  - spec/unit/rom/relation/lazy_spec.rb
232
250
  - spec/unit/rom/relation/loaded_spec.rb
233
251
  - spec/unit/rom/relation_spec.rb
@@ -258,9 +276,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
258
276
  version: '0'
259
277
  requirements: []
260
278
  rubyforge_project:
261
- rubygems_version: 2.2.2
279
+ rubygems_version: 2.4.5
262
280
  signing_key:
263
281
  specification_version: 4
264
282
  summary: Ruby Object Mapper
265
283
  test_files: []
266
- has_rdoc: