rom 1.0.0 → 2.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rspec +1 -1
- data/.travis.yml +5 -3
- data/CHANGELOG.md +38 -0
- data/Gemfile +2 -14
- data/README.md +11 -17
- data/lib/rom.rb +2 -0
- data/lib/rom/association_set.rb +26 -0
- data/lib/rom/command.rb +50 -45
- data/lib/rom/command_registry.rb +26 -3
- data/lib/rom/commands/class_interface.rb +52 -19
- data/lib/rom/commands/composite.rb +5 -0
- data/lib/rom/commands/delete.rb +1 -5
- data/lib/rom/commands/graph.rb +11 -0
- data/lib/rom/commands/lazy.rb +2 -0
- data/lib/rom/commands/update.rb +1 -5
- data/lib/rom/configuration.rb +2 -0
- data/lib/rom/container.rb +3 -3
- data/lib/rom/global.rb +1 -23
- data/lib/rom/memory/commands.rb +2 -0
- data/lib/rom/memory/relation.rb +3 -0
- data/lib/rom/memory/storage.rb +4 -7
- data/lib/rom/memory/types.rb +9 -0
- data/lib/rom/pipeline.rb +26 -12
- data/lib/rom/plugin_registry.rb +2 -2
- data/lib/rom/plugins/command/schema.rb +26 -0
- data/lib/rom/plugins/configuration/configuration_dsl.rb +2 -1
- data/lib/rom/plugins/relation/key_inference.rb +18 -3
- data/lib/rom/plugins/relation/registry_reader.rb +3 -1
- data/lib/rom/plugins/relation/view.rb +11 -6
- data/lib/rom/relation.rb +76 -16
- data/lib/rom/relation/class_interface.rb +44 -3
- data/lib/rom/relation/curried.rb +13 -4
- data/lib/rom/relation/graph.rb +15 -5
- data/lib/rom/relation/loaded.rb +42 -6
- data/lib/rom/relation/name.rb +102 -0
- data/lib/rom/relation_registry.rb +5 -0
- data/lib/rom/schema.rb +87 -0
- data/lib/rom/schema/dsl.rb +58 -0
- data/lib/rom/setup/auto_registration.rb +2 -2
- data/lib/rom/setup/finalize.rb +5 -5
- data/lib/rom/setup/finalize/{commands.rb → finalize_commands.rb} +2 -22
- data/lib/rom/setup/finalize/{mappers.rb → finalize_mappers.rb} +0 -0
- data/lib/rom/setup/finalize/finalize_relations.rb +60 -0
- data/lib/rom/types.rb +18 -0
- data/lib/rom/version.rb +1 -1
- data/log/.gitkeep +0 -0
- data/rom.gemspec +4 -2
- data/spec/integration/command_registry_spec.rb +13 -0
- data/spec/integration/commands/delete_spec.rb +0 -17
- data/spec/integration/commands/graph_builder_spec.rb +1 -1
- data/spec/integration/commands/graph_spec.rb +1 -1
- data/spec/integration/commands/update_spec.rb +0 -19
- data/spec/integration/commands_spec.rb +10 -3
- data/spec/integration/multi_repo_spec.rb +1 -1
- data/spec/integration/relations/default_dataset_spec.rb +27 -4
- data/spec/integration/setup_spec.rb +1 -4
- data/spec/shared/command_behavior.rb +17 -7
- data/spec/shared/container.rb +2 -2
- data/spec/shared/gateway_only.rb +1 -1
- data/spec/spec_helper.rb +5 -6
- data/spec/unit/rom/association_set_spec.rb +23 -0
- data/spec/unit/rom/auto_registration_spec.rb +1 -1
- data/spec/unit/rom/commands/lazy_spec.rb +8 -0
- data/spec/unit/rom/commands_spec.rb +45 -7
- data/spec/unit/rom/configurable_spec.rb +1 -1
- data/spec/unit/rom/container_spec.rb +6 -0
- data/spec/unit/rom/create_container_spec.rb +1 -1
- data/spec/unit/rom/environment_spec.rb +1 -1
- data/spec/unit/rom/memory/commands_spec.rb +43 -0
- data/spec/unit/rom/plugins/relation/key_inference_spec.rb +70 -12
- data/spec/unit/rom/plugins/relation/view_spec.rb +4 -0
- data/spec/unit/rom/relation/graph_spec.rb +10 -0
- data/spec/unit/rom/relation/lazy_spec.rb +3 -3
- data/spec/unit/rom/relation/loaded_spec.rb +15 -0
- data/spec/unit/rom/relation/name_spec.rb +51 -0
- data/spec/unit/rom/relation/schema_spec.rb +117 -0
- data/spec/unit/rom/relation_spec.rb +37 -7
- data/spec/unit/rom/schema_spec.rb +10 -0
- metadata +51 -12
- data/lib/rom/setup/finalize/relations.rb +0 -53
- data/spec/unit/rom/global_spec.rb +0 -18
- data/spec/unit/rom/registry_spec.rb +0 -38
@@ -1,53 +0,0 @@
|
|
1
|
-
require 'rom/relation_registry'
|
2
|
-
|
3
|
-
module ROM
|
4
|
-
class Finalize
|
5
|
-
class FinalizeRelations
|
6
|
-
# Build relation registry of specified descendant classes
|
7
|
-
#
|
8
|
-
# This is used by the setup
|
9
|
-
#
|
10
|
-
# @param [Hash] gateways
|
11
|
-
# @param [Array] relation_classes a list of relation descendants
|
12
|
-
#
|
13
|
-
# @api private
|
14
|
-
def initialize(gateways, relation_classes)
|
15
|
-
@gateways = gateways
|
16
|
-
@relation_classes = relation_classes
|
17
|
-
end
|
18
|
-
|
19
|
-
# @return [Hash]
|
20
|
-
#
|
21
|
-
# @api private
|
22
|
-
def run!
|
23
|
-
registry = {}
|
24
|
-
|
25
|
-
@relation_classes.each do |klass|
|
26
|
-
# TODO: raise a meaningful error here and add spec covering the case
|
27
|
-
# where klass' gateway points to non-existant repo
|
28
|
-
gateway = @gateways.fetch(klass.gateway)
|
29
|
-
ds_proc = klass.dataset_proc || -> { self }
|
30
|
-
dataset = gateway.dataset(klass.dataset).instance_exec(&ds_proc)
|
31
|
-
|
32
|
-
relation = klass.new(dataset, __registry__: registry)
|
33
|
-
|
34
|
-
name = klass.register_as
|
35
|
-
|
36
|
-
if registry.key?(name)
|
37
|
-
raise RelationAlreadyDefinedError,
|
38
|
-
"Relation with `register_as #{name.inspect}` registered more " \
|
39
|
-
"than once"
|
40
|
-
end
|
41
|
-
|
42
|
-
registry[name] = relation
|
43
|
-
end
|
44
|
-
|
45
|
-
registry.each_value do |relation|
|
46
|
-
relation.class.finalize(registry, relation)
|
47
|
-
end
|
48
|
-
|
49
|
-
RelationRegistry.new(registry)
|
50
|
-
end
|
51
|
-
end
|
52
|
-
end
|
53
|
-
end
|
@@ -1,18 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe ROM do
|
4
|
-
include_context 'container'
|
5
|
-
|
6
|
-
describe '.env' do
|
7
|
-
it 'is nil by default' do
|
8
|
-
container
|
9
|
-
|
10
|
-
expect(ROM.env).to be(nil)
|
11
|
-
end
|
12
|
-
|
13
|
-
it 'is assignable' do
|
14
|
-
ROM.env = container
|
15
|
-
expect(ROM.env).to be(container)
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
@@ -1,38 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe ROM::Registry do
|
4
|
-
subject(:registry) { registry_class.new(mars: mars) }
|
5
|
-
|
6
|
-
let(:mars) { double('mars') }
|
7
|
-
|
8
|
-
let(:registry_class) do
|
9
|
-
Class.new(ROM::Registry) do
|
10
|
-
def self.name
|
11
|
-
'Candy'
|
12
|
-
end
|
13
|
-
end
|
14
|
-
end
|
15
|
-
|
16
|
-
describe '#fetch' do
|
17
|
-
it 'returns registered elemented identified by name' do
|
18
|
-
expect(registry[:mars]).to be(mars)
|
19
|
-
end
|
20
|
-
|
21
|
-
it 'raises error when element is not found' do
|
22
|
-
expect { registry[:twix] }.to raise_error(
|
23
|
-
ROM::Registry::ElementNotFoundError,
|
24
|
-
":twix doesn't exist in Candy registry"
|
25
|
-
)
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
describe '.element_name' do
|
30
|
-
it 'returns registered elemented identified by element_name' do
|
31
|
-
expect(registry[:mars]).to be(mars)
|
32
|
-
end
|
33
|
-
|
34
|
-
it 'raises no-method error when element is not there' do
|
35
|
-
expect { registry.twix }.to raise_error(NoMethodError)
|
36
|
-
end
|
37
|
-
end
|
38
|
-
end
|