rom 0.9.1 → 1.0.0.beta1
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/.rubocop_todo.yml +30 -12
- data/.travis.yml +1 -1
- data/CHANGELOG.md +24 -0
- data/Gemfile +7 -3
- data/README.md +24 -11
- data/lib/rom.rb +9 -26
- data/lib/rom/command.rb +113 -75
- data/lib/rom/commands/class_interface.rb +115 -0
- data/lib/rom/commands/graph.rb +17 -23
- data/lib/rom/commands/graph/builder.rb +176 -0
- data/lib/rom/commands/graph/class_interface.rb +8 -2
- data/lib/rom/commands/graph/input_evaluator.rb +13 -9
- data/lib/rom/commands/lazy.rb +23 -17
- data/lib/rom/commands/lazy/create.rb +23 -0
- data/lib/rom/commands/lazy/delete.rb +27 -0
- data/lib/rom/commands/lazy/update.rb +34 -0
- data/lib/rom/commands/result.rb +14 -0
- data/lib/rom/commands/update.rb +0 -4
- data/lib/rom/configuration.rb +86 -0
- data/lib/rom/{setup_dsl/setup.rb → configuration_dsl.rb} +9 -7
- data/lib/rom/configuration_dsl/command.rb +43 -0
- data/lib/rom/{setup_dsl → configuration_dsl}/command_dsl.rb +5 -4
- data/lib/rom/configuration_dsl/mapper.rb +37 -0
- data/lib/rom/{setup_dsl → configuration_dsl}/mapper_dsl.rb +11 -5
- data/lib/rom/configuration_dsl/relation.rb +26 -0
- data/lib/rom/configuration_plugin.rb +17 -0
- data/lib/rom/constants.rb +5 -12
- data/lib/rom/container.rb +11 -8
- data/lib/rom/create_container.rb +61 -0
- data/lib/rom/environment.rb +27 -241
- data/lib/rom/gateway.rb +18 -2
- data/lib/rom/global.rb +24 -0
- data/lib/rom/global/plugin_dsl.rb +2 -0
- data/lib/rom/lint/spec.rb +0 -12
- data/lib/rom/lint/test.rb +0 -31
- data/lib/rom/memory/commands.rb +2 -2
- data/lib/rom/memory/gateway.rb +2 -0
- data/lib/rom/pipeline.rb +1 -1
- data/lib/rom/plugin_base.rb +1 -1
- data/lib/rom/plugin_registry.rb +12 -10
- data/lib/rom/plugins/configuration/configuration_dsl.rb +16 -0
- data/lib/rom/plugins/relation/key_inference.rb +31 -0
- data/lib/rom/plugins/relation/view.rb +90 -0
- data/lib/rom/plugins/relation/view/dsl.rb +32 -0
- data/lib/rom/relation.rb +1 -11
- data/lib/rom/relation/class_interface.rb +37 -50
- data/lib/rom/setup.rb +13 -104
- data/lib/rom/setup/auto_registration.rb +55 -0
- data/lib/rom/setup/finalize.rb +113 -127
- data/lib/rom/setup/finalize/commands.rb +67 -0
- data/lib/rom/setup/finalize/mappers.rb +36 -0
- data/lib/rom/setup/finalize/relations.rb +53 -0
- data/lib/rom/support/configurable.rb +21 -7
- data/lib/rom/version.rb +1 -1
- data/rakelib/mutant.rake +4 -1
- data/rom.gemspec +3 -4
- data/spec/fixtures/app/commands/create_user.rb +2 -0
- data/spec/fixtures/app/mappers/user_list.rb +2 -0
- data/spec/fixtures/app/relations/users.rb +2 -0
- data/spec/fixtures/lib/persistence/commands/create_user.rb +6 -0
- data/spec/fixtures/lib/persistence/mappers/user_list.rb +6 -0
- data/spec/fixtures/lib/persistence/relations/users.rb +6 -0
- data/spec/{unit/rom → integration}/command_registry_spec.rb +8 -9
- data/spec/integration/commands/create_spec.rb +17 -13
- data/spec/integration/commands/delete_spec.rb +12 -11
- data/spec/integration/commands/error_handling_spec.rb +5 -4
- data/spec/integration/commands/graph_builder_spec.rb +213 -0
- data/spec/integration/commands/graph_spec.rb +112 -49
- data/spec/integration/commands/update_spec.rb +14 -11
- data/spec/integration/commands_spec.rb +60 -0
- data/spec/integration/mappers/combine_spec.rb +7 -6
- data/spec/integration/mappers/deep_embedded_spec.rb +5 -6
- data/spec/integration/mappers/definition_dsl_spec.rb +19 -18
- data/spec/integration/mappers/embedded_spec.rb +11 -12
- data/spec/integration/mappers/exclude_spec.rb +5 -6
- data/spec/integration/mappers/fold_spec.rb +8 -7
- data/spec/integration/mappers/group_spec.rb +16 -15
- data/spec/integration/mappers/overwrite_attributes_value_spec.rb +5 -5
- data/spec/integration/mappers/prefix_separator_spec.rb +5 -7
- data/spec/integration/mappers/prefix_spec.rb +5 -7
- data/spec/integration/mappers/prefixing_attributes_spec.rb +7 -7
- data/spec/integration/mappers/registering_custom_mappers_spec.rb +4 -5
- data/spec/integration/mappers/renaming_attributes_spec.rb +18 -18
- data/spec/integration/mappers/step_spec.rb +11 -12
- data/spec/integration/mappers/symbolizing_attributes_spec.rb +11 -8
- data/spec/integration/mappers/unfold_spec.rb +9 -10
- data/spec/integration/mappers/ungroup_spec.rb +10 -11
- data/spec/integration/mappers/unwrap_spec.rb +10 -15
- data/spec/integration/mappers/wrap_spec.rb +16 -15
- data/spec/{unit/rom → integration}/memory/commands/create_spec.rb +7 -5
- data/spec/{unit/rom → integration}/memory/commands/delete_spec.rb +7 -5
- data/spec/{unit/rom → integration}/memory/commands/update_spec.rb +7 -5
- data/spec/integration/multi_env_spec.rb +16 -124
- data/spec/integration/multi_repo_spec.rb +9 -9
- data/spec/integration/relations/default_dataset_spec.rb +15 -0
- data/spec/integration/relations/inheritance_spec.rb +5 -7
- data/spec/integration/relations/reading_spec.rb +32 -65
- data/spec/integration/relations/registry_dsl_spec.rb +5 -4
- data/spec/integration/repositories/extending_relations_spec.rb +6 -7
- data/spec/integration/repositories/setting_logger_spec.rb +5 -7
- data/spec/integration/setup_spec.rb +49 -61
- data/spec/shared/command_graph.rb +50 -0
- data/spec/shared/container.rb +9 -0
- data/spec/shared/gateway_only.rb +6 -0
- data/spec/shared/no_container.rb +16 -0
- data/spec/shared/one_behavior.rb +4 -4
- data/spec/shared/users_and_tasks.rb +5 -17
- data/spec/spec_helper.rb +5 -3
- data/spec/test/memory_repository_lint_test.rb +1 -1
- data/spec/unit/rom/auto_registration_spec.rb +54 -0
- data/spec/unit/rom/commands/graph_spec.rb +18 -44
- data/spec/unit/rom/commands/lazy_spec.rb +246 -35
- data/spec/unit/rom/commands/result_spec.rb +56 -0
- data/spec/unit/rom/commands_spec.rb +9 -73
- data/spec/unit/rom/configurable_spec.rb +49 -0
- data/spec/unit/rom/configuration_spec.rb +61 -0
- data/spec/unit/rom/container_spec.rb +39 -33
- data/spec/unit/rom/create_container_spec.rb +151 -0
- data/spec/unit/rom/environment_spec.rb +123 -0
- data/spec/unit/rom/gateway_spec.rb +58 -2
- data/spec/unit/rom/global_spec.rb +10 -7
- data/spec/unit/rom/plugin_spec.rb +44 -25
- data/spec/unit/rom/plugins/relation/key_inference_spec.rb +27 -0
- data/spec/unit/rom/plugins/relation/view_spec.rb +47 -0
- data/spec/unit/rom/relation/composite_spec.rb +20 -20
- data/spec/unit/rom/relation/curried_spec.rb +10 -11
- data/spec/unit/rom/relation/graph_spec.rb +27 -27
- data/spec/unit/rom/relation/lazy/combine_spec.rb +26 -20
- data/spec/unit/rom/relation/lazy_spec.rb +38 -38
- data/spec/unit/rom/relation/loaded_spec.rb +2 -3
- data/spec/unit/rom/relation_spec.rb +39 -2
- metadata +58 -66
- data/lib/rom/commands/abstract.rb +0 -184
- data/lib/rom/environment_plugin.rb +0 -17
- data/lib/rom/environment_plugins/auto_registration.rb +0 -38
- data/lib/rom/repository.rb +0 -16
- data/lib/rom/setup_dsl/command.rb +0 -36
- data/lib/rom/setup_dsl/mapper.rb +0 -32
- data/lib/rom/setup_dsl/relation.rb +0 -30
- data/spec/integration/inline_setup_spec.rb +0 -65
- data/spec/unit/rom/repository_spec.rb +0 -12
- data/spec/unit/rom/setup_spec.rb +0 -253
@@ -1,11 +1,10 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe ROM::Relation::Loaded do
|
4
|
+
include_context 'no container'
|
4
5
|
include_context 'users and tasks'
|
5
6
|
|
6
|
-
subject(:users) { ROM::Relation::Loaded.new(
|
7
|
-
|
8
|
-
before { setup.relation(:users) }
|
7
|
+
subject(:users) { ROM::Relation::Loaded.new(users_relation) }
|
9
8
|
|
10
9
|
describe '#each' do
|
11
10
|
it 'yields tuples from relation' do
|
@@ -12,6 +12,16 @@ describe ROM::Relation do
|
|
12
12
|
describe '.[]' do
|
13
13
|
before do
|
14
14
|
module Test::TestAdapter
|
15
|
+
class Relation < ROM::Relation
|
16
|
+
adapter :test
|
17
|
+
|
18
|
+
def test_relation?
|
19
|
+
true
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
module Test::BrokenAdapter
|
15
25
|
class Relation < ROM::Relation
|
16
26
|
def test_relation?
|
17
27
|
true
|
@@ -20,13 +30,30 @@ describe ROM::Relation do
|
|
20
30
|
end
|
21
31
|
|
22
32
|
ROM.register_adapter(:test, Test::TestAdapter)
|
33
|
+
ROM.register_adapter(:broken, Test::BrokenAdapter)
|
23
34
|
end
|
24
35
|
|
25
36
|
it 'returns relation subclass from the registered adapter' do
|
26
|
-
|
37
|
+
subclass = Class.new(ROM::Relation[:test])
|
38
|
+
|
39
|
+
relation = subclass.new([])
|
27
40
|
|
28
41
|
expect(relation).to be_test_relation
|
29
42
|
end
|
43
|
+
|
44
|
+
it 'raises error when adapter relation has no identifier' do
|
45
|
+
expect {
|
46
|
+
Class.new(ROM::Relation[:broken])
|
47
|
+
}.to raise_error(ROM::MissingAdapterIdentifierError, /Test::BrokenAdapter::Relation/)
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
describe ".dataset" do
|
52
|
+
it 'allows setting dataset name' do
|
53
|
+
rel_class = Class.new(ROM::Relation[:memory]) { dataset :users }
|
54
|
+
|
55
|
+
expect(rel_class.dataset).to be(:users)
|
56
|
+
end
|
30
57
|
end
|
31
58
|
|
32
59
|
describe ".register_as" do
|
@@ -54,7 +81,7 @@ describe ROM::Relation do
|
|
54
81
|
dataset :users
|
55
82
|
end
|
56
83
|
|
57
|
-
class Test::DescendantUsers < Test::SuperUsers;end
|
84
|
+
class Test::DescendantUsers < Test::SuperUsers; end
|
58
85
|
|
59
86
|
expect(Test::DescendantUsers.register_as).to eq(:test_descendant_users)
|
60
87
|
end
|
@@ -153,4 +180,14 @@ describe ROM::Relation do
|
|
153
180
|
expect(relation.to_a).to eql([jane, joe])
|
154
181
|
end
|
155
182
|
end
|
183
|
+
|
184
|
+
describe "#with" do
|
185
|
+
it "returns a new instance with the original dataset and given custom options" do
|
186
|
+
custom_opts = { mappers: "Custom Mapper Registry" }
|
187
|
+
new_relation = relation.with(custom_opts)
|
188
|
+
|
189
|
+
expect(new_relation.dataset).to be(relation.dataset)
|
190
|
+
expect(new_relation.options).to include(custom_opts)
|
191
|
+
end
|
192
|
+
end
|
156
193
|
end
|
metadata
CHANGED
@@ -1,95 +1,57 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rom
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 1.0.0.beta1
|
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-
|
11
|
+
date: 2015-11-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name:
|
14
|
+
name: dry-equalizer
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '0.
|
20
|
-
- - ">="
|
21
|
-
- !ruby/object:Gem::Version
|
22
|
-
version: 0.3.0
|
23
|
-
type: :runtime
|
24
|
-
prerelease: false
|
25
|
-
version_requirements: !ruby/object:Gem::Requirement
|
26
|
-
requirements:
|
27
|
-
- - "~>"
|
28
|
-
- !ruby/object:Gem::Version
|
29
|
-
version: '0.3'
|
30
|
-
- - ">="
|
31
|
-
- !ruby/object:Gem::Version
|
32
|
-
version: 0.3.0
|
33
|
-
- !ruby/object:Gem::Dependency
|
34
|
-
name: equalizer
|
35
|
-
requirement: !ruby/object:Gem::Requirement
|
36
|
-
requirements:
|
37
|
-
- - "~>"
|
38
|
-
- !ruby/object:Gem::Version
|
39
|
-
version: '0.0'
|
40
|
-
- - ">="
|
41
|
-
- !ruby/object:Gem::Version
|
42
|
-
version: 0.0.9
|
19
|
+
version: '0.2'
|
43
20
|
type: :runtime
|
44
21
|
prerelease: false
|
45
22
|
version_requirements: !ruby/object:Gem::Requirement
|
46
23
|
requirements:
|
47
24
|
- - "~>"
|
48
25
|
- !ruby/object:Gem::Version
|
49
|
-
version: '0.
|
50
|
-
- - ">="
|
51
|
-
- !ruby/object:Gem::Version
|
52
|
-
version: 0.0.9
|
26
|
+
version: '0.2'
|
53
27
|
- !ruby/object:Gem::Dependency
|
54
28
|
name: rom-support
|
55
29
|
requirement: !ruby/object:Gem::Requirement
|
56
30
|
requirements:
|
57
31
|
- - "~>"
|
58
32
|
- !ruby/object:Gem::Version
|
59
|
-
version:
|
60
|
-
- - ">="
|
61
|
-
- !ruby/object:Gem::Version
|
62
|
-
version: 0.1.0
|
33
|
+
version: 1.0.0.beta1
|
63
34
|
type: :runtime
|
64
35
|
prerelease: false
|
65
36
|
version_requirements: !ruby/object:Gem::Requirement
|
66
37
|
requirements:
|
67
38
|
- - "~>"
|
68
39
|
- !ruby/object:Gem::Version
|
69
|
-
version:
|
70
|
-
- - ">="
|
71
|
-
- !ruby/object:Gem::Version
|
72
|
-
version: 0.1.0
|
40
|
+
version: 1.0.0.beta1
|
73
41
|
- !ruby/object:Gem::Dependency
|
74
42
|
name: rom-mapper
|
75
43
|
requirement: !ruby/object:Gem::Requirement
|
76
44
|
requirements:
|
77
45
|
- - "~>"
|
78
46
|
- !ruby/object:Gem::Version
|
79
|
-
version:
|
80
|
-
- - ">="
|
81
|
-
- !ruby/object:Gem::Version
|
82
|
-
version: 0.2.0
|
47
|
+
version: 0.3.0.beta1
|
83
48
|
type: :runtime
|
84
49
|
prerelease: false
|
85
50
|
version_requirements: !ruby/object:Gem::Requirement
|
86
51
|
requirements:
|
87
52
|
- - "~>"
|
88
53
|
- !ruby/object:Gem::Version
|
89
|
-
version:
|
90
|
-
- - ">="
|
91
|
-
- !ruby/object:Gem::Version
|
92
|
-
version: 0.2.0
|
54
|
+
version: 0.3.0.beta1
|
93
55
|
- !ruby/object:Gem::Dependency
|
94
56
|
name: rake
|
95
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -141,21 +103,32 @@ files:
|
|
141
103
|
- lib/rom/command.rb
|
142
104
|
- lib/rom/command_registry.rb
|
143
105
|
- lib/rom/commands.rb
|
144
|
-
- lib/rom/commands/
|
106
|
+
- lib/rom/commands/class_interface.rb
|
145
107
|
- lib/rom/commands/composite.rb
|
146
108
|
- lib/rom/commands/create.rb
|
147
109
|
- lib/rom/commands/delete.rb
|
148
110
|
- lib/rom/commands/graph.rb
|
111
|
+
- lib/rom/commands/graph/builder.rb
|
149
112
|
- lib/rom/commands/graph/class_interface.rb
|
150
113
|
- lib/rom/commands/graph/input_evaluator.rb
|
151
114
|
- lib/rom/commands/lazy.rb
|
115
|
+
- lib/rom/commands/lazy/create.rb
|
116
|
+
- lib/rom/commands/lazy/delete.rb
|
117
|
+
- lib/rom/commands/lazy/update.rb
|
152
118
|
- lib/rom/commands/result.rb
|
153
119
|
- lib/rom/commands/update.rb
|
120
|
+
- lib/rom/configuration.rb
|
121
|
+
- lib/rom/configuration_dsl.rb
|
122
|
+
- lib/rom/configuration_dsl/command.rb
|
123
|
+
- lib/rom/configuration_dsl/command_dsl.rb
|
124
|
+
- lib/rom/configuration_dsl/mapper.rb
|
125
|
+
- lib/rom/configuration_dsl/mapper_dsl.rb
|
126
|
+
- lib/rom/configuration_dsl/relation.rb
|
127
|
+
- lib/rom/configuration_plugin.rb
|
154
128
|
- lib/rom/constants.rb
|
155
129
|
- lib/rom/container.rb
|
130
|
+
- lib/rom/create_container.rb
|
156
131
|
- lib/rom/environment.rb
|
157
|
-
- lib/rom/environment_plugin.rb
|
158
|
-
- lib/rom/environment_plugins/auto_registration.rb
|
159
132
|
- lib/rom/gateway.rb
|
160
133
|
- lib/rom/global.rb
|
161
134
|
- lib/rom/global/plugin_dsl.rb
|
@@ -175,7 +148,11 @@ files:
|
|
175
148
|
- lib/rom/plugin.rb
|
176
149
|
- lib/rom/plugin_base.rb
|
177
150
|
- lib/rom/plugin_registry.rb
|
151
|
+
- lib/rom/plugins/configuration/configuration_dsl.rb
|
152
|
+
- lib/rom/plugins/relation/key_inference.rb
|
178
153
|
- lib/rom/plugins/relation/registry_reader.rb
|
154
|
+
- lib/rom/plugins/relation/view.rb
|
155
|
+
- lib/rom/plugins/relation/view/dsl.rb
|
179
156
|
- lib/rom/relation.rb
|
180
157
|
- lib/rom/relation/class_interface.rb
|
181
158
|
- lib/rom/relation/composite.rb
|
@@ -184,27 +161,32 @@ files:
|
|
184
161
|
- lib/rom/relation/loaded.rb
|
185
162
|
- lib/rom/relation/materializable.rb
|
186
163
|
- lib/rom/relation_registry.rb
|
187
|
-
- lib/rom/repository.rb
|
188
164
|
- lib/rom/setup.rb
|
165
|
+
- lib/rom/setup/auto_registration.rb
|
189
166
|
- lib/rom/setup/finalize.rb
|
190
|
-
- lib/rom/
|
191
|
-
- lib/rom/
|
192
|
-
- lib/rom/
|
193
|
-
- lib/rom/setup_dsl/mapper_dsl.rb
|
194
|
-
- lib/rom/setup_dsl/relation.rb
|
195
|
-
- lib/rom/setup_dsl/setup.rb
|
167
|
+
- lib/rom/setup/finalize/commands.rb
|
168
|
+
- lib/rom/setup/finalize/mappers.rb
|
169
|
+
- lib/rom/setup/finalize/relations.rb
|
196
170
|
- lib/rom/support/configurable.rb
|
197
171
|
- lib/rom/version.rb
|
198
172
|
- rakelib/benchmark.rake
|
199
173
|
- rakelib/mutant.rake
|
200
174
|
- rakelib/rubocop.rake
|
201
175
|
- rom.gemspec
|
176
|
+
- spec/fixtures/app/commands/create_user.rb
|
177
|
+
- spec/fixtures/app/mappers/user_list.rb
|
178
|
+
- spec/fixtures/app/relations/users.rb
|
179
|
+
- spec/fixtures/lib/persistence/commands/create_user.rb
|
180
|
+
- spec/fixtures/lib/persistence/mappers/user_list.rb
|
181
|
+
- spec/fixtures/lib/persistence/relations/users.rb
|
182
|
+
- spec/integration/command_registry_spec.rb
|
202
183
|
- spec/integration/commands/create_spec.rb
|
203
184
|
- spec/integration/commands/delete_spec.rb
|
204
185
|
- spec/integration/commands/error_handling_spec.rb
|
186
|
+
- spec/integration/commands/graph_builder_spec.rb
|
205
187
|
- spec/integration/commands/graph_spec.rb
|
206
188
|
- spec/integration/commands/update_spec.rb
|
207
|
-
- spec/integration/
|
189
|
+
- spec/integration/commands_spec.rb
|
208
190
|
- spec/integration/mappers/combine_spec.rb
|
209
191
|
- spec/integration/mappers/deep_embedded_spec.rb
|
210
192
|
- spec/integration/mappers/definition_dsl_spec.rb
|
@@ -225,8 +207,12 @@ files:
|
|
225
207
|
- spec/integration/mappers/ungroup_spec.rb
|
226
208
|
- spec/integration/mappers/unwrap_spec.rb
|
227
209
|
- spec/integration/mappers/wrap_spec.rb
|
210
|
+
- spec/integration/memory/commands/create_spec.rb
|
211
|
+
- spec/integration/memory/commands/delete_spec.rb
|
212
|
+
- spec/integration/memory/commands/update_spec.rb
|
228
213
|
- spec/integration/multi_env_spec.rb
|
229
214
|
- spec/integration/multi_repo_spec.rb
|
215
|
+
- spec/integration/relations/default_dataset_spec.rb
|
230
216
|
- spec/integration/relations/inheritance_spec.rb
|
231
217
|
- spec/integration/relations/reading_spec.rb
|
232
218
|
- spec/integration/relations/registry_dsl_spec.rb
|
@@ -234,8 +220,12 @@ files:
|
|
234
220
|
- spec/integration/repositories/setting_logger_spec.rb
|
235
221
|
- spec/integration/setup_spec.rb
|
236
222
|
- spec/shared/command_behavior.rb
|
223
|
+
- spec/shared/command_graph.rb
|
224
|
+
- spec/shared/container.rb
|
237
225
|
- spec/shared/enumerable_dataset.rb
|
226
|
+
- spec/shared/gateway_only.rb
|
238
227
|
- spec/shared/materializable.rb
|
228
|
+
- spec/shared/no_container.rb
|
239
229
|
- spec/shared/one_behavior.rb
|
240
230
|
- spec/shared/proxy.rb
|
241
231
|
- spec/shared/users_and_tasks.rb
|
@@ -243,23 +233,26 @@ files:
|
|
243
233
|
- spec/support/constant_leak_finder.rb
|
244
234
|
- spec/support/mutant.rb
|
245
235
|
- spec/test/memory_repository_lint_test.rb
|
246
|
-
- spec/unit/rom/
|
236
|
+
- spec/unit/rom/auto_registration_spec.rb
|
247
237
|
- spec/unit/rom/commands/graph_spec.rb
|
248
238
|
- spec/unit/rom/commands/lazy_spec.rb
|
249
239
|
- spec/unit/rom/commands/result_spec.rb
|
250
240
|
- spec/unit/rom/commands_spec.rb
|
241
|
+
- spec/unit/rom/configurable_spec.rb
|
242
|
+
- spec/unit/rom/configuration_spec.rb
|
251
243
|
- spec/unit/rom/container_spec.rb
|
244
|
+
- spec/unit/rom/create_container_spec.rb
|
245
|
+
- spec/unit/rom/environment_spec.rb
|
252
246
|
- spec/unit/rom/gateway_spec.rb
|
253
247
|
- spec/unit/rom/global_spec.rb
|
254
248
|
- spec/unit/rom/mapper_registry_spec.rb
|
255
|
-
- spec/unit/rom/memory/commands/create_spec.rb
|
256
|
-
- spec/unit/rom/memory/commands/delete_spec.rb
|
257
|
-
- spec/unit/rom/memory/commands/update_spec.rb
|
258
249
|
- spec/unit/rom/memory/dataset_spec.rb
|
259
250
|
- spec/unit/rom/memory/relation_spec.rb
|
260
251
|
- spec/unit/rom/memory/repository_spec.rb
|
261
252
|
- spec/unit/rom/memory/storage_spec.rb
|
262
253
|
- spec/unit/rom/plugin_spec.rb
|
254
|
+
- spec/unit/rom/plugins/relation/key_inference_spec.rb
|
255
|
+
- spec/unit/rom/plugins/relation/view_spec.rb
|
263
256
|
- spec/unit/rom/registry_spec.rb
|
264
257
|
- spec/unit/rom/relation/composite_spec.rb
|
265
258
|
- spec/unit/rom/relation/curried_spec.rb
|
@@ -268,8 +261,6 @@ files:
|
|
268
261
|
- spec/unit/rom/relation/lazy_spec.rb
|
269
262
|
- spec/unit/rom/relation/loaded_spec.rb
|
270
263
|
- spec/unit/rom/relation_spec.rb
|
271
|
-
- spec/unit/rom/repository_spec.rb
|
272
|
-
- spec/unit/rom/setup_spec.rb
|
273
264
|
homepage: http://rom-rb.org
|
274
265
|
licenses:
|
275
266
|
- MIT
|
@@ -285,9 +276,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
285
276
|
version: '0'
|
286
277
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
287
278
|
requirements:
|
288
|
-
- - "
|
279
|
+
- - ">"
|
289
280
|
- !ruby/object:Gem::Version
|
290
|
-
version:
|
281
|
+
version: 1.3.1
|
291
282
|
requirements: []
|
292
283
|
rubyforge_project:
|
293
284
|
rubygems_version: 2.4.5
|
@@ -295,3 +286,4 @@ signing_key:
|
|
295
286
|
specification_version: 4
|
296
287
|
summary: Ruby Object Mapper
|
297
288
|
test_files: []
|
289
|
+
has_rdoc:
|
@@ -1,184 +0,0 @@
|
|
1
|
-
require 'rom/support/options'
|
2
|
-
require 'rom/support/deprecations'
|
3
|
-
|
4
|
-
require 'rom/commands/composite'
|
5
|
-
require 'rom/commands/graph'
|
6
|
-
require 'rom/commands/lazy'
|
7
|
-
|
8
|
-
module ROM
|
9
|
-
module Commands
|
10
|
-
# Abstract command class
|
11
|
-
#
|
12
|
-
# Provides a constructor accepting relation with options and basic behavior
|
13
|
-
# for calling, currying and composing commands.
|
14
|
-
#
|
15
|
-
# Typically command subclasses should inherit from specialized
|
16
|
-
# Create/Update/Delete, not this one.
|
17
|
-
#
|
18
|
-
# @abstract
|
19
|
-
#
|
20
|
-
# @private
|
21
|
-
class Abstract
|
22
|
-
include Options
|
23
|
-
extend Deprecations
|
24
|
-
|
25
|
-
option :type, allow: [:create, :update, :delete]
|
26
|
-
option :source, reader: true
|
27
|
-
option :result, reader: true, allow: [:one, :many]
|
28
|
-
option :validator, reader: true
|
29
|
-
option :input, reader: true
|
30
|
-
option :curry_args, type: Array, reader: true, default: EMPTY_ARRAY
|
31
|
-
|
32
|
-
# @attr_reader [Relation] relation The command's relation
|
33
|
-
attr_reader :relation
|
34
|
-
|
35
|
-
deprecate :target, :relation,
|
36
|
-
'Source relation is now available as `Command#source`'
|
37
|
-
|
38
|
-
# @api private
|
39
|
-
def initialize(relation, options = EMPTY_HASH)
|
40
|
-
super
|
41
|
-
@relation = relation
|
42
|
-
@source = options[:source] || relation
|
43
|
-
end
|
44
|
-
|
45
|
-
# Execute the command
|
46
|
-
#
|
47
|
-
# @abstract
|
48
|
-
#
|
49
|
-
# @return [Array] an array with inserted tuples
|
50
|
-
#
|
51
|
-
# @api private
|
52
|
-
def execute(*)
|
53
|
-
raise(
|
54
|
-
NotImplementedError,
|
55
|
-
"#{self.class}##{__method__} must be implemented"
|
56
|
-
)
|
57
|
-
end
|
58
|
-
|
59
|
-
# Call the command and return one or many tuples
|
60
|
-
#
|
61
|
-
# @api public
|
62
|
-
def call(*args)
|
63
|
-
tuples = execute(*(curry_args + args))
|
64
|
-
|
65
|
-
if one?
|
66
|
-
tuples.first
|
67
|
-
else
|
68
|
-
tuples
|
69
|
-
end
|
70
|
-
end
|
71
|
-
alias_method :[], :call
|
72
|
-
|
73
|
-
# Curry this command with provided args
|
74
|
-
#
|
75
|
-
# Curried command can be called without args
|
76
|
-
#
|
77
|
-
# @return [Command]
|
78
|
-
#
|
79
|
-
# @api public
|
80
|
-
def curry(*args)
|
81
|
-
if curry_args.empty? && args.first.is_a?(Graph::InputEvaluator)
|
82
|
-
Lazy.new(self, args.first)
|
83
|
-
else
|
84
|
-
self.class.build(relation, options.merge(curry_args: args))
|
85
|
-
end
|
86
|
-
end
|
87
|
-
alias_method :with, :curry
|
88
|
-
|
89
|
-
# Compose a command with another one
|
90
|
-
#
|
91
|
-
# The other one will be called with the result from the first one
|
92
|
-
#
|
93
|
-
# @example
|
94
|
-
#
|
95
|
-
# command = users.create.curry(name: 'Jane')
|
96
|
-
# command >>= tasks.create.curry(title: 'Task One')
|
97
|
-
#
|
98
|
-
# command.call # creates user, passes it to tasks and creates task
|
99
|
-
#
|
100
|
-
# @return [Composite]
|
101
|
-
#
|
102
|
-
# @api public
|
103
|
-
def >>(other)
|
104
|
-
Composite.new(self, other)
|
105
|
-
end
|
106
|
-
|
107
|
-
# @api public
|
108
|
-
def combine(*others)
|
109
|
-
Graph.new(self, others)
|
110
|
-
end
|
111
|
-
|
112
|
-
# @api private
|
113
|
-
def lazy?
|
114
|
-
false
|
115
|
-
end
|
116
|
-
|
117
|
-
# @api private
|
118
|
-
def graph?
|
119
|
-
false
|
120
|
-
end
|
121
|
-
|
122
|
-
# @api private
|
123
|
-
def one?
|
124
|
-
result.equal?(:one)
|
125
|
-
end
|
126
|
-
|
127
|
-
# @api private
|
128
|
-
def many?
|
129
|
-
result.equal?(:many)
|
130
|
-
end
|
131
|
-
|
132
|
-
# Assert that tuple count in the relation corresponds to :result
|
133
|
-
# setting
|
134
|
-
#
|
135
|
-
# @raise TupleCountMismatchError
|
136
|
-
#
|
137
|
-
# @api private
|
138
|
-
def assert_tuple_count
|
139
|
-
if one? && tuple_count > 1
|
140
|
-
raise TupleCountMismatchError, "#{inspect} expects one tuple"
|
141
|
-
end
|
142
|
-
end
|
143
|
-
|
144
|
-
# Return number of tuples in the relation relation
|
145
|
-
#
|
146
|
-
# This should be overridden by gateways when `#count` is not available
|
147
|
-
# in the relation objects
|
148
|
-
#
|
149
|
-
# @return [Fixnum]
|
150
|
-
#
|
151
|
-
# @api private
|
152
|
-
def tuple_count
|
153
|
-
relation.count
|
154
|
-
end
|
155
|
-
|
156
|
-
# @api private
|
157
|
-
def respond_to_missing?(name, _include_private = false)
|
158
|
-
relation.respond_to?(name) || super
|
159
|
-
end
|
160
|
-
|
161
|
-
# @api private
|
162
|
-
def new(new_relation)
|
163
|
-
self.class.build(new_relation, options.merge(source: relation))
|
164
|
-
end
|
165
|
-
|
166
|
-
private
|
167
|
-
|
168
|
-
# @api private
|
169
|
-
def method_missing(name, *args, &block)
|
170
|
-
if relation.respond_to?(name)
|
171
|
-
response = relation.public_send(name, *args, &block)
|
172
|
-
|
173
|
-
if response.instance_of?(relation.class)
|
174
|
-
new(response)
|
175
|
-
else
|
176
|
-
response
|
177
|
-
end
|
178
|
-
else
|
179
|
-
super
|
180
|
-
end
|
181
|
-
end
|
182
|
-
end
|
183
|
-
end
|
184
|
-
end
|