rom 0.4.2 → 0.5.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 (100) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +81 -0
  3. data/.travis.yml +2 -1
  4. data/CHANGELOG.md +41 -0
  5. data/Gemfile +12 -8
  6. data/Guardfile +17 -11
  7. data/README.md +7 -7
  8. data/Rakefile +29 -0
  9. data/lib/rom.rb +9 -66
  10. data/lib/rom/adapter.rb +45 -12
  11. data/lib/rom/adapter/memory.rb +0 -4
  12. data/lib/rom/adapter/memory/commands.rb +0 -10
  13. data/lib/rom/adapter/memory/dataset.rb +18 -6
  14. data/lib/rom/adapter/memory/storage.rb +0 -3
  15. data/lib/rom/command_registry.rb +24 -43
  16. data/lib/rom/commands.rb +5 -6
  17. data/lib/rom/commands/create.rb +5 -5
  18. data/lib/rom/commands/delete.rb +8 -6
  19. data/lib/rom/commands/result.rb +82 -0
  20. data/lib/rom/commands/update.rb +5 -4
  21. data/lib/rom/commands/with_options.rb +1 -4
  22. data/lib/rom/config.rb +70 -0
  23. data/lib/rom/env.rb +11 -3
  24. data/lib/rom/global.rb +107 -0
  25. data/lib/rom/header.rb +122 -89
  26. data/lib/rom/header/attribute.rb +148 -0
  27. data/lib/rom/mapper.rb +46 -67
  28. data/lib/rom/mapper_builder.rb +20 -73
  29. data/lib/rom/mapper_builder/mapper_dsl.rb +114 -0
  30. data/lib/rom/mapper_builder/model_dsl.rb +29 -0
  31. data/lib/rom/mapper_registry.rb +21 -0
  32. data/lib/rom/model_builder.rb +11 -17
  33. data/lib/rom/processor.rb +28 -0
  34. data/lib/rom/processor/transproc.rb +105 -0
  35. data/lib/rom/reader.rb +81 -21
  36. data/lib/rom/reader_builder.rb +14 -4
  37. data/lib/rom/relation.rb +19 -5
  38. data/lib/rom/relation_builder.rb +20 -6
  39. data/lib/rom/repository.rb +0 -2
  40. data/lib/rom/setup.rb +156 -0
  41. data/lib/rom/{boot → setup}/base_relation_dsl.rb +4 -8
  42. data/lib/rom/setup/command_dsl.rb +46 -0
  43. data/lib/rom/setup/finalize.rb +125 -0
  44. data/lib/rom/setup/mapper_dsl.rb +19 -0
  45. data/lib/rom/{boot → setup}/relation_dsl.rb +1 -4
  46. data/lib/rom/setup/schema_dsl.rb +33 -0
  47. data/lib/rom/support/registry.rb +10 -6
  48. data/lib/rom/version.rb +1 -1
  49. data/rom.gemspec +3 -1
  50. data/spec/integration/adapters/extending_relations_spec.rb +0 -2
  51. data/spec/integration/commands/create_spec.rb +2 -9
  52. data/spec/integration/commands/delete_spec.rb +4 -5
  53. data/spec/integration/commands/error_handling_spec.rb +4 -3
  54. data/spec/integration/commands/update_spec.rb +3 -8
  55. data/spec/integration/mappers/deep_embedded_spec.rb +52 -0
  56. data/spec/integration/mappers/definition_dsl_spec.rb +0 -118
  57. data/spec/integration/mappers/embedded_spec.rb +82 -0
  58. data/spec/integration/mappers/group_spec.rb +170 -0
  59. data/spec/integration/mappers/prefixing_attributes_spec.rb +2 -2
  60. data/spec/integration/mappers/renaming_attributes_spec.rb +8 -6
  61. data/spec/integration/mappers/symbolizing_attributes_spec.rb +80 -0
  62. data/spec/integration/mappers/wrap_spec.rb +162 -0
  63. data/spec/integration/multi_repo_spec.rb +64 -0
  64. data/spec/integration/relations/reading_spec.rb +12 -8
  65. data/spec/integration/relations/registry_dsl_spec.rb +1 -3
  66. data/spec/integration/schema_spec.rb +10 -0
  67. data/spec/integration/setup_spec.rb +57 -6
  68. data/spec/spec_helper.rb +2 -1
  69. data/spec/unit/config_spec.rb +60 -0
  70. data/spec/unit/rom/adapter/memory/dataset_spec.rb +52 -0
  71. data/spec/unit/rom/adapter_spec.rb +31 -11
  72. data/spec/unit/rom/header_spec.rb +60 -16
  73. data/spec/unit/rom/mapper_builder_spec.rb +311 -0
  74. data/spec/unit/rom/mapper_registry_spec.rb +25 -0
  75. data/spec/unit/rom/mapper_spec.rb +4 -5
  76. data/spec/unit/rom/model_builder_spec.rb +15 -13
  77. data/spec/unit/rom/processor/transproc_spec.rb +331 -0
  78. data/spec/unit/rom/reader_spec.rb +73 -0
  79. data/spec/unit/rom/registry_spec.rb +38 -0
  80. data/spec/unit/rom/relation_spec.rb +0 -1
  81. data/spec/unit/rom/setup_spec.rb +55 -0
  82. data/spec/unit/rom_spec.rb +14 -0
  83. metadata +62 -22
  84. data/Gemfile.devtools +0 -71
  85. data/lib/rom/boot.rb +0 -197
  86. data/lib/rom/boot/command_dsl.rb +0 -48
  87. data/lib/rom/boot/dsl.rb +0 -37
  88. data/lib/rom/boot/mapper_dsl.rb +0 -23
  89. data/lib/rom/boot/schema_dsl.rb +0 -27
  90. data/lib/rom/ra.rb +0 -172
  91. data/lib/rom/ra/operation/group.rb +0 -47
  92. data/lib/rom/ra/operation/join.rb +0 -39
  93. data/lib/rom/ra/operation/wrap.rb +0 -45
  94. data/lib/rom/transformer.rb +0 -77
  95. data/spec/integration/ra/group_spec.rb +0 -46
  96. data/spec/integration/ra/join_spec.rb +0 -50
  97. data/spec/integration/ra/wrap_spec.rb +0 -37
  98. data/spec/unit/rom/ra/operation/group_spec.rb +0 -55
  99. data/spec/unit/rom/ra/operation/wrap_spec.rb +0 -29
  100. data/spec/unit/rom/transformer_spec.rb +0 -41
@@ -0,0 +1,38 @@
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
@@ -30,5 +30,4 @@ describe ROM::Relation do
30
30
  expect(relation.each).to be_instance_of(Enumerator)
31
31
  end
32
32
  end
33
-
34
33
  end
@@ -0,0 +1,55 @@
1
+ require 'spec_helper'
2
+
3
+ describe ROM::Setup do
4
+ describe '#finalize' do
5
+ context 'with an adapter that supports schema inferring' do
6
+ it 'builds relation from inferred schema' do
7
+ adapter = double('adapter').as_null_object
8
+ repo = double('repo', adapter: adapter).as_null_object
9
+ dataset = double('dataset')
10
+
11
+ allow(repo).to receive(:schema).and_return([
12
+ [:users, dataset, [:name, :email]]
13
+ ])
14
+
15
+ setup = ROM::Setup.new(memory: repo)
16
+ env = setup.finalize
17
+
18
+ users = env.relations.users
19
+
20
+ expect(users.dataset).to be(dataset)
21
+ expect(users.header).to eql([:name, :email])
22
+ end
23
+ end
24
+ end
25
+
26
+ describe '#method_missing' do
27
+ it 'returns a repository if it is defined' do
28
+ repo = double('repo')
29
+ setup = ROM::Setup.new(repo: repo)
30
+
31
+ expect(setup.repo).to be(repo)
32
+ end
33
+
34
+ it 'raises error if repo is not defined' do
35
+ setup = ROM::Setup.new({})
36
+
37
+ expect { setup.not_here }.to raise_error(NoMethodError, /not_here/)
38
+ end
39
+ end
40
+
41
+ describe '#[]' do
42
+ it 'returns a repository if it is defined' do
43
+ repo = double('repo')
44
+ setup = ROM::Setup.new(repo: repo)
45
+
46
+ expect(setup[:repo]).to be(repo)
47
+ end
48
+
49
+ it 'raises error if repo is not defined' do
50
+ setup = ROM::Setup.new({})
51
+
52
+ expect { setup[:not_here] }.to raise_error(KeyError, /not_here/)
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,14 @@
1
+ require 'spec_helper'
2
+
3
+ describe ROM do
4
+ describe '.setup' do
5
+ it 'creates a boot instance using a database config hash' do
6
+ boot = ROM.setup(
7
+ adapter: 'memory', database: 'test', hostname: 'localhost'
8
+ )
9
+
10
+ expect(boot[:default]).to be(boot.repositories[:default])
11
+ expect(boot.default.adapter.uri.to_s).to eql("memory://localhost/test")
12
+ end
13
+ end
14
+ end
metadata CHANGED
@@ -1,15 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rom
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.2
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Piotr Solnica
8
- - piotr.solnica@gmail.com
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2014-12-19 00:00:00.000000000 Z
11
+ date: 2014-12-31 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: addressable
@@ -25,6 +24,20 @@ dependencies:
25
24
  - - "~>"
26
25
  - !ruby/object:Gem::Version
27
26
  version: '2.3'
27
+ - !ruby/object:Gem::Dependency
28
+ name: transproc
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '0.1'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '0.1'
28
41
  - !ruby/object:Gem::Dependency
29
42
  name: equalizer
30
43
  requirement: !ruby/object:Gem::Requirement
@@ -133,6 +146,20 @@ dependencies:
133
146
  - - "~>"
134
147
  - !ruby/object:Gem::Version
135
148
  version: '3.1'
149
+ - !ruby/object:Gem::Dependency
150
+ name: rspec-mocks
151
+ requirement: !ruby/object:Gem::Requirement
152
+ requirements:
153
+ - - "~>"
154
+ - !ruby/object:Gem::Version
155
+ version: '3.1'
156
+ type: :development
157
+ prerelease: false
158
+ version_requirements: !ruby/object:Gem::Requirement
159
+ requirements:
160
+ - - "~>"
161
+ - !ruby/object:Gem::Version
162
+ version: '3.1'
136
163
  - !ruby/object:Gem::Dependency
137
164
  name: rspec-expectations
138
165
  requirement: !ruby/object:Gem::Requirement
@@ -155,11 +182,11 @@ extra_rdoc_files: []
155
182
  files:
156
183
  - ".gitignore"
157
184
  - ".rspec"
185
+ - ".rubocop.yml"
158
186
  - ".ruby-version"
159
187
  - ".travis.yml"
160
188
  - CHANGELOG.md
161
189
  - Gemfile
162
- - Gemfile.devtools
163
190
  - Guardfile
164
191
  - LICENSE
165
192
  - README.md
@@ -170,35 +197,39 @@ files:
170
197
  - lib/rom/adapter/memory/commands.rb
171
198
  - lib/rom/adapter/memory/dataset.rb
172
199
  - lib/rom/adapter/memory/storage.rb
173
- - lib/rom/boot.rb
174
- - lib/rom/boot/base_relation_dsl.rb
175
- - lib/rom/boot/command_dsl.rb
176
- - lib/rom/boot/dsl.rb
177
- - lib/rom/boot/mapper_dsl.rb
178
- - lib/rom/boot/relation_dsl.rb
179
- - lib/rom/boot/schema_dsl.rb
180
200
  - lib/rom/command_registry.rb
181
201
  - lib/rom/commands.rb
182
202
  - lib/rom/commands/create.rb
183
203
  - lib/rom/commands/delete.rb
204
+ - lib/rom/commands/result.rb
184
205
  - lib/rom/commands/update.rb
185
206
  - lib/rom/commands/with_options.rb
207
+ - lib/rom/config.rb
186
208
  - lib/rom/env.rb
209
+ - lib/rom/global.rb
187
210
  - lib/rom/header.rb
211
+ - lib/rom/header/attribute.rb
188
212
  - lib/rom/mapper.rb
189
213
  - lib/rom/mapper_builder.rb
214
+ - lib/rom/mapper_builder/mapper_dsl.rb
215
+ - lib/rom/mapper_builder/model_dsl.rb
216
+ - lib/rom/mapper_registry.rb
190
217
  - lib/rom/model_builder.rb
191
- - lib/rom/ra.rb
192
- - lib/rom/ra/operation/group.rb
193
- - lib/rom/ra/operation/join.rb
194
- - lib/rom/ra/operation/wrap.rb
218
+ - lib/rom/processor.rb
219
+ - lib/rom/processor/transproc.rb
195
220
  - lib/rom/reader.rb
196
221
  - lib/rom/reader_builder.rb
197
222
  - lib/rom/relation.rb
198
223
  - lib/rom/relation_builder.rb
199
224
  - lib/rom/repository.rb
225
+ - lib/rom/setup.rb
226
+ - lib/rom/setup/base_relation_dsl.rb
227
+ - lib/rom/setup/command_dsl.rb
228
+ - lib/rom/setup/finalize.rb
229
+ - lib/rom/setup/mapper_dsl.rb
230
+ - lib/rom/setup/relation_dsl.rb
231
+ - lib/rom/setup/schema_dsl.rb
200
232
  - lib/rom/support/registry.rb
201
- - lib/rom/transformer.rb
202
233
  - lib/rom/version.rb
203
234
  - rom.gemspec
204
235
  - spec/integration/adapters/extending_relations_spec.rb
@@ -208,12 +239,15 @@ files:
208
239
  - spec/integration/commands/error_handling_spec.rb
209
240
  - spec/integration/commands/try_spec.rb
210
241
  - spec/integration/commands/update_spec.rb
242
+ - spec/integration/mappers/deep_embedded_spec.rb
211
243
  - spec/integration/mappers/definition_dsl_spec.rb
244
+ - spec/integration/mappers/embedded_spec.rb
245
+ - spec/integration/mappers/group_spec.rb
212
246
  - spec/integration/mappers/prefixing_attributes_spec.rb
213
247
  - spec/integration/mappers/renaming_attributes_spec.rb
214
- - spec/integration/ra/group_spec.rb
215
- - spec/integration/ra/join_spec.rb
216
- - spec/integration/ra/wrap_spec.rb
248
+ - spec/integration/mappers/symbolizing_attributes_spec.rb
249
+ - spec/integration/mappers/wrap_spec.rb
250
+ - spec/integration/multi_repo_spec.rb
217
251
  - spec/integration/relations/reading_spec.rb
218
252
  - spec/integration/relations/registry_dsl_spec.rb
219
253
  - spec/integration/schema_spec.rb
@@ -221,16 +255,22 @@ files:
221
255
  - spec/shared/users_and_tasks.rb
222
256
  - spec/spec_helper.rb
223
257
  - spec/support/mutant.rb
258
+ - spec/unit/config_spec.rb
259
+ - spec/unit/rom/adapter/memory/dataset_spec.rb
224
260
  - spec/unit/rom/adapter_spec.rb
225
261
  - spec/unit/rom/env_spec.rb
226
262
  - spec/unit/rom/header_spec.rb
263
+ - spec/unit/rom/mapper_builder_spec.rb
264
+ - spec/unit/rom/mapper_registry_spec.rb
227
265
  - spec/unit/rom/mapper_spec.rb
228
266
  - spec/unit/rom/model_builder_spec.rb
229
- - spec/unit/rom/ra/operation/group_spec.rb
230
- - spec/unit/rom/ra/operation/wrap_spec.rb
267
+ - spec/unit/rom/processor/transproc_spec.rb
268
+ - spec/unit/rom/reader_spec.rb
269
+ - spec/unit/rom/registry_spec.rb
231
270
  - spec/unit/rom/relation_spec.rb
232
271
  - spec/unit/rom/repository_spec.rb
233
- - spec/unit/rom/transformer_spec.rb
272
+ - spec/unit/rom/setup_spec.rb
273
+ - spec/unit/rom_spec.rb
234
274
  homepage: http://rom-rb.org
235
275
  licenses:
236
276
  - MIT
@@ -1,71 +0,0 @@
1
- # encoding: utf-8
2
-
3
- group :development do
4
- gem 'rake', '~> 10.3.2'
5
- gem 'rspec', '~> 3.1.0'
6
- gem 'rspec-its', '~> 1.0.1'
7
- gem 'yard', '~> 0.8.7.4'
8
-
9
- platform :rbx do
10
- gem 'rubysl-singleton', '~> 2.0.0'
11
- end
12
- end
13
-
14
- group :yard do
15
- gem 'kramdown', '~> 1.3.3'
16
- end
17
-
18
- group :guard do
19
- gem 'guard', '~> 2.6.1'
20
- gem 'guard-bundler', '~> 2.0.0'
21
- gem 'guard-rspec', '~> 4.2.9'
22
- gem 'guard-rubocop', '~> 1.1.0'
23
-
24
- # file system change event handling
25
- gem 'listen', '~> 2.7.7'
26
- gem 'rb-fchange', '~> 0.0.6', require: false
27
- gem 'rb-fsevent', '~> 0.9.4', require: false
28
- gem 'rb-inotify', '~> 0.9.5', require: false
29
-
30
- # notification handling
31
- gem 'libnotify', '~> 0.8.3', require: false
32
- gem 'rb-notifu', '~> 0.0.4', require: false
33
- gem 'terminal-notifier-guard', '~> 1.5.3', require: false
34
- end
35
-
36
- group :metrics do
37
- gem 'coveralls', '~> 0.7.0'
38
- gem 'flay', '~> 2.5.0'
39
- gem 'flog', '~> 4.2.1'
40
- gem 'reek', '~> 1.3.7'
41
- gem 'rubocop', '~> 0.23.0'
42
- gem 'simplecov', '~> 0.7.1'
43
- gem 'yardstick', '~> 0.9.9'
44
-
45
- platforms :mri do
46
- gem 'mutant', '~> 0.6.3'
47
- gem 'mutant-rspec', '~> 0.6.3'
48
- end
49
-
50
- platforms :ruby_19, :ruby_20 do
51
- gem 'yard-spellcheck', '~> 0.1.5'
52
- end
53
-
54
- platform :rbx do
55
- gem 'json', '~> 1.8.1'
56
- gem 'racc', '~> 1.4.11'
57
- gem 'rubysl-logger', '~> 2.0.0'
58
- gem 'rubysl-open-uri', '~> 2.0.0'
59
- gem 'rubysl-prettyprint', '~> 2.0.3'
60
- end
61
- end
62
-
63
- group :benchmarks do
64
- gem 'rbench', '~> 0.2.3'
65
- end
66
-
67
- platform :jruby do
68
- group :jruby do
69
- gem 'jruby-openssl', '~> 0.9.4'
70
- end
71
- end
@@ -1,197 +0,0 @@
1
- require 'rom/boot/dsl'
2
- require 'rom/relation_builder'
3
- require 'rom/reader_builder'
4
- require 'rom/command_registry'
5
-
6
- module ROM
7
-
8
- # Exposes DSL for defining schema, relations and mappers
9
- #
10
- # @api public
11
- class Boot
12
- include Equalizer.new(:repositories, :env)
13
-
14
- attr_reader :repositories, :adapter_relation_map, :env
15
-
16
- # @api private
17
- def initialize(repositories)
18
- @repositories = repositories
19
- @schema = {}
20
- @relations = {}
21
- @mappers = []
22
- @commands = {}
23
- @adapter_relation_map = {}
24
- @env = nil
25
- end
26
-
27
- # Schema definition DSL
28
- #
29
- # @example
30
- #
31
- # setup.schema do
32
- # base_relation(:users) do
33
- # repository :sqlite
34
- #
35
- # attribute :id
36
- # attribute :name
37
- # end
38
- # end
39
- #
40
- # @api public
41
- def schema(&block)
42
- base_relations = DSL.new(self).schema(&block)
43
- base_relations.each do |repo, relations|
44
- (@schema[repo] ||= []).concat(relations)
45
- end
46
- self
47
- end
48
-
49
- # Relation definition DSL
50
- #
51
- # @example
52
- #
53
- # setup.relation(:users) do
54
- # def names
55
- # project(:name)
56
- # end
57
- # end
58
- #
59
- # @api public
60
- def relation(name, &block)
61
- @relations.update(name => block)
62
- self
63
- end
64
-
65
- # Mapper definition DSL
66
- #
67
- # @example
68
- #
69
- # setup.mappers do
70
- # define(:users) do
71
- # model name: 'User'
72
- # end
73
- #
74
- # define(:names, parent: :users) do
75
- # exclude :id
76
- # end
77
- # end
78
- #
79
- # @api public
80
- def mappers(&block)
81
- @mappers.concat(DSL.new(self).mappers(&block))
82
- self
83
- end
84
-
85
- def commands(name, &block)
86
- @commands.update(name => DSL.new(self).commands(&block))
87
- end
88
-
89
- # Finalize the setup
90
- #
91
- # @return [Env] frozen env with access to repositories, schema, relations and mappers
92
- #
93
- # @api public
94
- def finalize
95
- raise EnvAlreadyFinalizedError if env
96
-
97
- schema = load_schema
98
- relations = load_relations(schema)
99
- readers = load_readers(relations)
100
- commands = load_commands(relations)
101
-
102
- @env = Env.new(repositories, schema, relations, readers, commands)
103
- end
104
-
105
- # @api private
106
- def [](name)
107
- repositories.fetch(name)
108
- end
109
-
110
- # @api private
111
- def respond_to_missing?(name, include_context = false)
112
- repositories.key?(name)
113
- end
114
-
115
- private
116
-
117
- # @api private
118
- def method_missing(name, *args)
119
- repositories.fetch(name)
120
- end
121
-
122
- # @api private
123
- def load_schema
124
- repositories.values.each do |repo|
125
- (@schema[repo] ||= []).concat(repo.schema)
126
- end
127
-
128
- base_relations = @schema.each_with_object({}) do |(repo, schema), h|
129
- schema.each do |name, dataset, header|
130
- adapter_relation_map[name] = repo.adapter
131
- h[name] = Relation.new(dataset, header)
132
- end
133
- end
134
-
135
- Schema.new(base_relations)
136
- end
137
-
138
- # @api private
139
- def load_relations(schema)
140
- return RelationRegistry.new unless adapter_relation_map.any?
141
-
142
- builder = RelationBuilder.new(schema)
143
-
144
- relations = @relations.each_with_object({}) do |(name, block), h|
145
- adapter = adapter_relation_map[name]
146
-
147
- relation = builder.call(name) { |klass|
148
- adapter.extend_relation_class(klass)
149
- klass.class_eval(&block) if block
150
- }
151
-
152
- adapter.extend_relation_instance(relation)
153
-
154
- h[name] = relation
155
- end
156
-
157
- relations.each_value { |relation| relation.class.finalize(relations, relation) }
158
-
159
- RelationRegistry.new(relations)
160
- end
161
-
162
- # @api private
163
- def load_readers(relations)
164
- return ReaderRegistry.new unless adapter_relation_map.any?
165
-
166
- reader_builder = ReaderBuilder.new(relations)
167
-
168
- readers = @mappers.each_with_object({}) do |(name, options, block), h|
169
- h[name] = reader_builder.call(name, options, &block)
170
- end
171
-
172
- ReaderRegistry.new(readers)
173
- end
174
-
175
- def load_commands(relations)
176
- return Registry.new unless relations.elements.any?
177
-
178
- commands = @commands.each_with_object({}) do |(name, definitions), h|
179
- adapter = adapter_relation_map[name]
180
-
181
- rel_commands = {}
182
-
183
- definitions.each do |command_name, definition|
184
- rel_commands[command_name] = adapter.command(
185
- command_name, relations[name], definition
186
- )
187
- end
188
-
189
- h[name] = CommandRegistry.new(rel_commands)
190
- end
191
-
192
- Registry.new(commands)
193
- end
194
-
195
- end
196
-
197
- end