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.
Files changed (143) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop_todo.yml +30 -12
  3. data/.travis.yml +1 -1
  4. data/CHANGELOG.md +24 -0
  5. data/Gemfile +7 -3
  6. data/README.md +24 -11
  7. data/lib/rom.rb +9 -26
  8. data/lib/rom/command.rb +113 -75
  9. data/lib/rom/commands/class_interface.rb +115 -0
  10. data/lib/rom/commands/graph.rb +17 -23
  11. data/lib/rom/commands/graph/builder.rb +176 -0
  12. data/lib/rom/commands/graph/class_interface.rb +8 -2
  13. data/lib/rom/commands/graph/input_evaluator.rb +13 -9
  14. data/lib/rom/commands/lazy.rb +23 -17
  15. data/lib/rom/commands/lazy/create.rb +23 -0
  16. data/lib/rom/commands/lazy/delete.rb +27 -0
  17. data/lib/rom/commands/lazy/update.rb +34 -0
  18. data/lib/rom/commands/result.rb +14 -0
  19. data/lib/rom/commands/update.rb +0 -4
  20. data/lib/rom/configuration.rb +86 -0
  21. data/lib/rom/{setup_dsl/setup.rb → configuration_dsl.rb} +9 -7
  22. data/lib/rom/configuration_dsl/command.rb +43 -0
  23. data/lib/rom/{setup_dsl → configuration_dsl}/command_dsl.rb +5 -4
  24. data/lib/rom/configuration_dsl/mapper.rb +37 -0
  25. data/lib/rom/{setup_dsl → configuration_dsl}/mapper_dsl.rb +11 -5
  26. data/lib/rom/configuration_dsl/relation.rb +26 -0
  27. data/lib/rom/configuration_plugin.rb +17 -0
  28. data/lib/rom/constants.rb +5 -12
  29. data/lib/rom/container.rb +11 -8
  30. data/lib/rom/create_container.rb +61 -0
  31. data/lib/rom/environment.rb +27 -241
  32. data/lib/rom/gateway.rb +18 -2
  33. data/lib/rom/global.rb +24 -0
  34. data/lib/rom/global/plugin_dsl.rb +2 -0
  35. data/lib/rom/lint/spec.rb +0 -12
  36. data/lib/rom/lint/test.rb +0 -31
  37. data/lib/rom/memory/commands.rb +2 -2
  38. data/lib/rom/memory/gateway.rb +2 -0
  39. data/lib/rom/pipeline.rb +1 -1
  40. data/lib/rom/plugin_base.rb +1 -1
  41. data/lib/rom/plugin_registry.rb +12 -10
  42. data/lib/rom/plugins/configuration/configuration_dsl.rb +16 -0
  43. data/lib/rom/plugins/relation/key_inference.rb +31 -0
  44. data/lib/rom/plugins/relation/view.rb +90 -0
  45. data/lib/rom/plugins/relation/view/dsl.rb +32 -0
  46. data/lib/rom/relation.rb +1 -11
  47. data/lib/rom/relation/class_interface.rb +37 -50
  48. data/lib/rom/setup.rb +13 -104
  49. data/lib/rom/setup/auto_registration.rb +55 -0
  50. data/lib/rom/setup/finalize.rb +113 -127
  51. data/lib/rom/setup/finalize/commands.rb +67 -0
  52. data/lib/rom/setup/finalize/mappers.rb +36 -0
  53. data/lib/rom/setup/finalize/relations.rb +53 -0
  54. data/lib/rom/support/configurable.rb +21 -7
  55. data/lib/rom/version.rb +1 -1
  56. data/rakelib/mutant.rake +4 -1
  57. data/rom.gemspec +3 -4
  58. data/spec/fixtures/app/commands/create_user.rb +2 -0
  59. data/spec/fixtures/app/mappers/user_list.rb +2 -0
  60. data/spec/fixtures/app/relations/users.rb +2 -0
  61. data/spec/fixtures/lib/persistence/commands/create_user.rb +6 -0
  62. data/spec/fixtures/lib/persistence/mappers/user_list.rb +6 -0
  63. data/spec/fixtures/lib/persistence/relations/users.rb +6 -0
  64. data/spec/{unit/rom → integration}/command_registry_spec.rb +8 -9
  65. data/spec/integration/commands/create_spec.rb +17 -13
  66. data/spec/integration/commands/delete_spec.rb +12 -11
  67. data/spec/integration/commands/error_handling_spec.rb +5 -4
  68. data/spec/integration/commands/graph_builder_spec.rb +213 -0
  69. data/spec/integration/commands/graph_spec.rb +112 -49
  70. data/spec/integration/commands/update_spec.rb +14 -11
  71. data/spec/integration/commands_spec.rb +60 -0
  72. data/spec/integration/mappers/combine_spec.rb +7 -6
  73. data/spec/integration/mappers/deep_embedded_spec.rb +5 -6
  74. data/spec/integration/mappers/definition_dsl_spec.rb +19 -18
  75. data/spec/integration/mappers/embedded_spec.rb +11 -12
  76. data/spec/integration/mappers/exclude_spec.rb +5 -6
  77. data/spec/integration/mappers/fold_spec.rb +8 -7
  78. data/spec/integration/mappers/group_spec.rb +16 -15
  79. data/spec/integration/mappers/overwrite_attributes_value_spec.rb +5 -5
  80. data/spec/integration/mappers/prefix_separator_spec.rb +5 -7
  81. data/spec/integration/mappers/prefix_spec.rb +5 -7
  82. data/spec/integration/mappers/prefixing_attributes_spec.rb +7 -7
  83. data/spec/integration/mappers/registering_custom_mappers_spec.rb +4 -5
  84. data/spec/integration/mappers/renaming_attributes_spec.rb +18 -18
  85. data/spec/integration/mappers/step_spec.rb +11 -12
  86. data/spec/integration/mappers/symbolizing_attributes_spec.rb +11 -8
  87. data/spec/integration/mappers/unfold_spec.rb +9 -10
  88. data/spec/integration/mappers/ungroup_spec.rb +10 -11
  89. data/spec/integration/mappers/unwrap_spec.rb +10 -15
  90. data/spec/integration/mappers/wrap_spec.rb +16 -15
  91. data/spec/{unit/rom → integration}/memory/commands/create_spec.rb +7 -5
  92. data/spec/{unit/rom → integration}/memory/commands/delete_spec.rb +7 -5
  93. data/spec/{unit/rom → integration}/memory/commands/update_spec.rb +7 -5
  94. data/spec/integration/multi_env_spec.rb +16 -124
  95. data/spec/integration/multi_repo_spec.rb +9 -9
  96. data/spec/integration/relations/default_dataset_spec.rb +15 -0
  97. data/spec/integration/relations/inheritance_spec.rb +5 -7
  98. data/spec/integration/relations/reading_spec.rb +32 -65
  99. data/spec/integration/relations/registry_dsl_spec.rb +5 -4
  100. data/spec/integration/repositories/extending_relations_spec.rb +6 -7
  101. data/spec/integration/repositories/setting_logger_spec.rb +5 -7
  102. data/spec/integration/setup_spec.rb +49 -61
  103. data/spec/shared/command_graph.rb +50 -0
  104. data/spec/shared/container.rb +9 -0
  105. data/spec/shared/gateway_only.rb +6 -0
  106. data/spec/shared/no_container.rb +16 -0
  107. data/spec/shared/one_behavior.rb +4 -4
  108. data/spec/shared/users_and_tasks.rb +5 -17
  109. data/spec/spec_helper.rb +5 -3
  110. data/spec/test/memory_repository_lint_test.rb +1 -1
  111. data/spec/unit/rom/auto_registration_spec.rb +54 -0
  112. data/spec/unit/rom/commands/graph_spec.rb +18 -44
  113. data/spec/unit/rom/commands/lazy_spec.rb +246 -35
  114. data/spec/unit/rom/commands/result_spec.rb +56 -0
  115. data/spec/unit/rom/commands_spec.rb +9 -73
  116. data/spec/unit/rom/configurable_spec.rb +49 -0
  117. data/spec/unit/rom/configuration_spec.rb +61 -0
  118. data/spec/unit/rom/container_spec.rb +39 -33
  119. data/spec/unit/rom/create_container_spec.rb +151 -0
  120. data/spec/unit/rom/environment_spec.rb +123 -0
  121. data/spec/unit/rom/gateway_spec.rb +58 -2
  122. data/spec/unit/rom/global_spec.rb +10 -7
  123. data/spec/unit/rom/plugin_spec.rb +44 -25
  124. data/spec/unit/rom/plugins/relation/key_inference_spec.rb +27 -0
  125. data/spec/unit/rom/plugins/relation/view_spec.rb +47 -0
  126. data/spec/unit/rom/relation/composite_spec.rb +20 -20
  127. data/spec/unit/rom/relation/curried_spec.rb +10 -11
  128. data/spec/unit/rom/relation/graph_spec.rb +27 -27
  129. data/spec/unit/rom/relation/lazy/combine_spec.rb +26 -20
  130. data/spec/unit/rom/relation/lazy_spec.rb +38 -38
  131. data/spec/unit/rom/relation/loaded_spec.rb +2 -3
  132. data/spec/unit/rom/relation_spec.rb +39 -2
  133. metadata +58 -66
  134. data/lib/rom/commands/abstract.rb +0 -184
  135. data/lib/rom/environment_plugin.rb +0 -17
  136. data/lib/rom/environment_plugins/auto_registration.rb +0 -38
  137. data/lib/rom/repository.rb +0 -16
  138. data/lib/rom/setup_dsl/command.rb +0 -36
  139. data/lib/rom/setup_dsl/mapper.rb +0 -32
  140. data/lib/rom/setup_dsl/relation.rb +0 -30
  141. data/spec/integration/inline_setup_spec.rb +0 -65
  142. data/spec/unit/rom/repository_spec.rb +0 -12
  143. data/spec/unit/rom/setup_spec.rb +0 -253
@@ -1,17 +0,0 @@
1
- require 'rom/plugin_base'
2
-
3
- module ROM
4
- # EnvironmentPlugin is a simple object used to store environment plugin configurations
5
- #
6
- # @private
7
- class EnvironmentPlugin < PluginBase
8
- # Apply this plugin to the provided environment
9
- #
10
- # @param [ROM::Environment] environment
11
- #
12
- # @api private
13
- def apply_to(environment, options = {})
14
- mod.apply(environment, options)
15
- end
16
- end
17
- end
@@ -1,38 +0,0 @@
1
- module ROM
2
- module EnvironmentPlugins
3
- # Automatically registers relations, mappers and commands as they are defined
4
- #
5
- # For now this plugin is always enabled
6
- #
7
- # @api public
8
- module AutoRegistration
9
- # Say "yes" for envs that have this plugin enabled
10
- #
11
- # By default it says "no" in Environment#auto_registration?
12
- #
13
- # @api private
14
- def auto_registration?
15
- true
16
- end
17
-
18
- # @api private
19
- def self.apply(environment, options = {})
20
- environment.extend(AutoRegistration)
21
-
22
- if_proc = options.fetch(:if, ->(*args) { true })
23
-
24
- ROM::Relation.on(:inherited) do |relation|
25
- environment.register_relation(relation) if if_proc.call(relation)
26
- end
27
-
28
- ROM::Command.on(:inherited) do |command|
29
- environment.register_command(command) if if_proc.call(command)
30
- end
31
-
32
- ROM::Mapper.on(:inherited) do |mapper|
33
- environment.register_mapper(mapper) if if_proc.call(mapper)
34
- end
35
- end
36
- end
37
- end
38
- end
@@ -1,16 +0,0 @@
1
- require 'rom/gateway'
2
-
3
- module ROM
4
- # Abstract repository class
5
- #
6
- # This is a transitional placeholder, deprecating the Repository class.
7
- #
8
- # @api public
9
- class Repository < Gateway
10
- def self.inherited(_klass)
11
- ROM::Deprecations.announce "Inheriting from ROM::Repository is", <<-MSG
12
- Please inherit from ROM::Gateway instead.
13
- MSG
14
- end
15
- end
16
- end
@@ -1,36 +0,0 @@
1
- module ROM
2
- # Setup DSL-specific command extensions
3
- #
4
- # @private
5
- class Command
6
- # Generate a command subclass
7
- #
8
- # This is used by Setup#commands DSL and its `define` block
9
- #
10
- # @api private
11
- def self.build_class(name, relation, options = EMPTY_HASH, &block)
12
- type = options.fetch(:type) { name }
13
- command_type = Inflector.classify(type)
14
- adapter = options.fetch(:adapter)
15
- parent = adapter_namespace(adapter).const_get(command_type)
16
- class_name = generate_class_name(adapter, command_type, relation)
17
-
18
- ClassBuilder.new(name: class_name, parent: parent).call do |klass|
19
- klass.register_as(name)
20
- klass.relation(relation)
21
- klass.class_eval(&block) if block
22
- end
23
- end
24
-
25
- # Create a command subclass name based on adapter, type and relation
26
- #
27
- # @api private
28
- def self.generate_class_name(adapter, command_type, relation)
29
- pieces = ['ROM']
30
- pieces << Inflector.classify(adapter)
31
- pieces << 'Commands'
32
- pieces << "#{command_type}[#{Inflector.classify(relation)}s]"
33
- pieces.join('::')
34
- end
35
- end
36
- end
@@ -1,32 +0,0 @@
1
- module ROM
2
- # Setup DSL-specific mapper extensions
3
- #
4
- # @private
5
- class Mapper
6
- # Generate a mapper subclass
7
- #
8
- # This is used by Setup#mappers DSL
9
- #
10
- # @api private
11
- def self.build_class(name, options = EMPTY_HASH, &block)
12
- class_name = "ROM::Mapper[#{name}]"
13
-
14
- parent = options[:parent]
15
- inherit_header = options.fetch(:inherit_header) { Mapper.inherit_header }
16
-
17
- parent_class =
18
- if parent
19
- ROM.boot.mapper_classes.detect { |klass| klass.relation == parent }
20
- else
21
- self
22
- end
23
-
24
- ClassBuilder.new(name: class_name, parent: parent_class).call do |klass|
25
- klass.relation(name)
26
- klass.inherit_header(inherit_header)
27
-
28
- klass.class_eval(&block) if block
29
- end
30
- end
31
- end
32
- end
@@ -1,30 +0,0 @@
1
- module ROM
2
- # Setup DSL-specific relation extensions
3
- #
4
- # @private
5
- class Relation
6
- # Generate a relation subclass
7
- #
8
- # This is used by Setup#relation DSL
9
- #
10
- # @api private
11
- def self.build_class(name, options = EMPTY_HASH)
12
- class_name = "ROM::Relation[#{Inflector.camelize(name)}]"
13
- adapter = options.fetch(:adapter)
14
-
15
- ClassBuilder.new(name: class_name, parent: self[adapter]).call do |klass|
16
- klass.gateway(options.fetch(:gateway) {
17
- if options.key?(:repository)
18
- ROM::Deprecations.announce "The :repository key is", <<-MSG
19
- Please use `gateway: :#{options.fetch(:repository)}` instead.
20
- MSG
21
- options.fetch(:repository)
22
- else
23
- :default
24
- end
25
- })
26
- klass.dataset(name)
27
- end
28
- end
29
- end
30
- end
@@ -1,65 +0,0 @@
1
- require 'spec_helper'
2
- require 'rom/memory'
3
-
4
- RSpec.describe 'Inline setup' do
5
- before do
6
- module Test
7
- module Dummy
8
- class Gateway < ROM::Memory::Gateway
9
- def schema
10
- [:users, :tasks]
11
- end
12
- end
13
-
14
- class Relation < ROM::Relation
15
- adapter :dummy
16
- end
17
- end
18
- end
19
-
20
- ROM.register_adapter :dummy, Test::Dummy
21
- end
22
-
23
- context 'using global env' do
24
- it 'auto-registers components' do
25
- rom = ROM.setup(:dummy) do
26
- relation(:users)
27
- end
28
-
29
- users = rom.relation(:users)
30
-
31
- expect(users).to be_kind_of(Test::Dummy::Relation)
32
- end
33
- end
34
-
35
- context 'using local env' do
36
- it 'auto-registers components' do
37
- env = ROM::Environment.new
38
-
39
- rom = env.setup(:dummy) do
40
- relation(:users)
41
- end
42
-
43
- users = rom.relation(:users)
44
-
45
- expect(users).to be_kind_of(Test::Dummy::Relation)
46
- end
47
- end
48
-
49
- context 'defining a relation with custom dataset name' do
50
- it 'registers under provided name and uses custom dataset' do
51
- env = ROM::Environment.new
52
-
53
- rom = env.setup(:dummy) do
54
- relation(:super_users) do
55
- dataset :users
56
- end
57
- end
58
-
59
- users = rom.relation(:super_users)
60
-
61
- expect(users).to be_kind_of(Test::Dummy::Relation)
62
- expect(users.dataset).to be(rom.gateways[:default].dataset(:users))
63
- end
64
- end
65
- end
@@ -1,12 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe ROM::Repository do
4
-
5
- it "warns when inherited from" do
6
- expect {
7
- Class.new(ROM::Repository)
8
- }.to output(/inherit from ROM::Gateway/).to_stderr
9
- end
10
-
11
-
12
- end
@@ -1,253 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe ROM::Setup do
4
- it 'is configurable' do
5
- setup = ROM::Setup.new({})
6
-
7
- setup.configure do |config|
8
- config.sql.infer_relations = false
9
- end
10
-
11
- expect(setup.config.sql.infer_relations).to be(false)
12
- expect(setup.config[:sql][:infer_relations]).to be(false)
13
-
14
- expect(setup.config).to respond_to(:sql)
15
- expect(setup.config).to respond_to(:other=)
16
-
17
- setup.config.freeze
18
-
19
- expect(setup.config.other).to be(nil)
20
- expect(setup.config.key?(:other)).to be(false)
21
- expect(setup.config.key?(:sql)).to be(true)
22
- end
23
-
24
- it 'is configurable via settings hash' do
25
- setup = ROM.setup(:memory, 'something', infer_schema: false)
26
-
27
- setup.finalize
28
-
29
- expect(setup.config.gateways.default.infer_schema).to be(false)
30
-
31
- setup = ROM.setup(:memory, infer_schema: false)
32
-
33
- setup.finalize
34
-
35
- expect(setup.config.gateways.default.infer_schema).to be(false)
36
-
37
- setup = ROM.setup(default: [:memory, infer_schema: false])
38
-
39
- setup.finalize
40
-
41
- expect(setup.config.gateways.default.infer_schema).to be(false)
42
- end
43
-
44
- describe '#finalize' do
45
- context 'with gateway that supports schema inferring' do
46
- it 'builds relation from inferred schema' do
47
- setup = ROM.setup(:memory)
48
- repo = setup.default
49
- dataset = double('dataset')
50
-
51
- allow(repo).to receive(:schema).and_return([:users])
52
- allow(repo).to receive(:dataset).with(:users).and_return(dataset)
53
-
54
- rom = setup.finalize
55
-
56
- expect(rom.relations.users.dataset).to be(dataset)
57
- end
58
-
59
- it 'skips inferring a relation when there is a defined one already' do
60
- setup = ROM.setup(:memory)
61
- repo = setup.default
62
- dataset = double('dataset')
63
-
64
- allow(repo).to receive(:schema).and_return([:test_users])
65
- allow(repo).to receive(:dataset).with(:test_users).and_return(dataset)
66
-
67
- class Test::Users < ROM::Relation[:memory]; end
68
-
69
- expect { setup.finalize }.not_to raise_error
70
-
71
- rom = setup.env
72
-
73
- expect(rom.relations.test_users).to be_instance_of(Test::Users)
74
- end
75
-
76
- it 'skips inferring when it is turned off for the adapter' do
77
- setup = ROM.setup(:memory)
78
-
79
- setup.configure { |config| config.gateways.default.infer_relations = false }
80
-
81
- repo = setup.default
82
-
83
- expect(repo).not_to receive(:schema)
84
-
85
- setup.finalize
86
- end
87
-
88
- it 'infers configured relations' do
89
- setup = ROM.setup(:memory)
90
-
91
- setup.configure do |config|
92
- config.gateways.default.inferrable_relations = [:test_tasks]
93
- end
94
-
95
- repo = setup.default
96
- dataset = double('dataset')
97
-
98
- allow(repo).to receive(:schema).and_return([:test_tasks, :test_users])
99
-
100
- expect(repo).to receive(:dataset).with(:test_tasks).and_return(dataset)
101
- expect(repo).to_not receive(:dataset).with(:test_users)
102
-
103
- rom = setup.finalize
104
-
105
- expect(rom.relations.elements.key?(:test_users)).to be(false)
106
- expect(rom.relations[:test_tasks]).to be_kind_of(ROM::Memory::Relation)
107
- expect(rom.relations[:test_tasks].dataset).to be(dataset)
108
- end
109
-
110
- it 'skip inferring blacklisted relations' do
111
- setup = ROM.setup(:memory)
112
-
113
- setup.configure do |config|
114
- config.gateways.default.not_inferrable_relations = [:test_users]
115
- end
116
-
117
- repo = setup.default
118
- dataset = double('dataset')
119
-
120
- allow(repo).to receive(:schema).and_return([:test_tasks, :test_users])
121
-
122
- expect(repo).to receive(:dataset).with(:test_tasks).and_return(dataset)
123
- expect(repo).to_not receive(:dataset).with(:test_users)
124
-
125
- rom = setup.finalize
126
-
127
- expect(rom.relations.elements.key?(:test_users)).to be(false)
128
- expect(rom.relations[:test_tasks]).to be_kind_of(ROM::Memory::Relation)
129
- expect(rom.relations[:test_tasks].dataset).to be(dataset)
130
- end
131
-
132
- it 'can register multiple relations with same dataset' do
133
- setup = ROM.setup(:memory)
134
-
135
- Class.new(ROM::Relation[:memory]) do
136
- dataset :fruits
137
- register_as :apples
138
-
139
- def apple?
140
- true
141
- end
142
- end
143
-
144
- Class.new(ROM::Relation[:memory]) do
145
- dataset :fruits
146
- register_as :oranges
147
-
148
- def orange?
149
- true
150
- end
151
- end
152
-
153
- rom = setup.finalize
154
-
155
- expect(rom.relations.apples).to be_apple
156
- expect(rom.relations.oranges).to be_orange
157
- expect(rom.relations.apples).to_not eq(rom.relations.oranges)
158
- end
159
-
160
- it "raises an error when registering relations with the same `register_as`" do
161
- setup = ROM.setup(:memory)
162
-
163
- Class.new(ROM::Relation[:memory]) do
164
- dataset :guests
165
- register_as :users
166
- end
167
-
168
- Class.new(ROM::Relation[:memory]) do
169
- dataset :admins
170
- register_as :users
171
- end
172
-
173
- expect { setup.finalize }.to raise_error(
174
- ROM::RelationAlreadyDefinedError, /register_as :users/
175
- )
176
- end
177
-
178
- it 'resets boot to nil' do
179
- setup = ROM.setup(:memory)
180
-
181
- allow(setup).to receive(:container).and_raise(StandardError)
182
-
183
- expect { ROM.finalize }.to raise_error(StandardError)
184
- expect(ROM.boot).to be(nil)
185
- end
186
- end
187
-
188
- context 'empty setup' do
189
- let(:setup) { ROM::Setup.new({}) }
190
- let(:env) { setup.finalize }
191
-
192
- it 'builds empty gateways' do
193
- expect(env.gateways).to eql({})
194
- end
195
-
196
- it 'builds empty relations' do
197
- expect(env.relations).to eql(ROM::RelationRegistry.new)
198
- end
199
-
200
- it 'builds empty mappers' do
201
- expect(env.mappers).to eql(ROM::Registry.new)
202
- end
203
-
204
- it 'builds empty commands' do
205
- expect(env.commands).to eql(ROM::Registry.new)
206
- end
207
- end
208
- end
209
-
210
- describe '#method_missing' do
211
- it 'returns a gateway if it is defined' do
212
- repo = double('repo')
213
- setup = ROM::Setup.new(repo: repo)
214
-
215
- expect(setup.repo).to be(repo)
216
- end
217
-
218
- it 'raises error if repo is not defined' do
219
- setup = ROM::Setup.new({})
220
-
221
- expect { setup.not_here }.to raise_error(NoMethodError, /not_here/)
222
- end
223
- end
224
-
225
- describe '#[]' do
226
- it 'returns a gateway if it is defined' do
227
- repo = double('repo')
228
- setup = ROM::Setup.new(repo: repo)
229
-
230
- expect(setup[:repo]).to be(repo)
231
- end
232
-
233
- it 'raises error if repo is not defined' do
234
- setup = ROM::Setup.new({})
235
-
236
- expect { setup[:not_here] }.to raise_error(KeyError, /not_here/)
237
- end
238
- end
239
-
240
- describe 'defining components when adapter was not registered' do
241
- it 'raises error when trying to define a relation' do
242
- expect {
243
- Class.new(ROM::Relation[:not_here])
244
- }.to raise_error(ROM::AdapterNotPresentError, /not_here/)
245
- end
246
-
247
- it 'raises error when trying to define a command' do
248
- expect {
249
- Class.new(ROM::Commands::Create[:not_here])
250
- }.to raise_error(ROM::AdapterNotPresentError, /not_here/)
251
- end
252
- end
253
- end