rom 0.6.2 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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: