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
data/lib/rom/constants.rb
CHANGED
@@ -15,23 +15,16 @@ module ROM
|
|
15
15
|
RelationAlreadyDefinedError = Class.new(StandardError)
|
16
16
|
NoRelationError = Class.new(StandardError)
|
17
17
|
CommandError = Class.new(StandardError)
|
18
|
+
KeyMissing = Class.new(ROM::CommandError)
|
18
19
|
TupleCountMismatchError = Class.new(CommandError)
|
19
20
|
MapperMissingError = Class.new(StandardError)
|
20
21
|
UnknownPluginError = Class.new(StandardError)
|
21
22
|
UnsupportedRelationError = Class.new(StandardError)
|
23
|
+
MissingAdapterIdentifierError = Class.new(StandardError)
|
24
|
+
|
25
|
+
DuplicateConfigurationError = Class.new(StandardError)
|
26
|
+
DuplicateContainerError = Class.new(StandardError)
|
22
27
|
|
23
28
|
InvalidOptionValueError = Class.new(StandardError)
|
24
29
|
InvalidOptionKeyError = Class.new(StandardError)
|
25
|
-
|
26
|
-
class CommandFailure < StandardError
|
27
|
-
attr_reader :command
|
28
|
-
attr_reader :original_error
|
29
|
-
|
30
|
-
def initialize(command, err)
|
31
|
-
super("command: #{command.inspect}; original message: #{err.message}")
|
32
|
-
@command = command
|
33
|
-
@original_error = err
|
34
|
-
set_backtrace(err.backtrace)
|
35
|
-
end
|
36
|
-
end
|
37
30
|
end
|
data/lib/rom/container.rb
CHANGED
@@ -1,22 +1,21 @@
|
|
1
1
|
require 'rom/relation/loaded'
|
2
2
|
require 'rom/commands/graph'
|
3
|
-
require 'rom/
|
3
|
+
require 'rom/commands/graph/builder'
|
4
|
+
require 'rom/support/publisher'
|
4
5
|
|
5
6
|
module ROM
|
6
7
|
# Exposes defined gateways, relations and mappers
|
7
8
|
#
|
8
9
|
# @api public
|
9
10
|
class Container
|
10
|
-
|
11
|
-
include Equalizer
|
11
|
+
include ROM::Support::Publisher
|
12
|
+
include Dry::Equalizer(:gateways, :relations, :mappers, :commands)
|
12
13
|
|
13
14
|
# @return [Hash] configured gateways
|
14
15
|
#
|
15
16
|
# @api public
|
16
17
|
attr_reader :gateways
|
17
18
|
|
18
|
-
deprecate :repositories, :gateways
|
19
|
-
|
20
19
|
# @return [RelationRegistry] relation registry
|
21
20
|
#
|
22
21
|
# @api private
|
@@ -38,7 +37,6 @@ module ROM
|
|
38
37
|
@relations = relations
|
39
38
|
@mappers = mappers
|
40
39
|
@commands = commands
|
41
|
-
freeze
|
42
40
|
end
|
43
41
|
|
44
42
|
# Get lazy relation identified by its name
|
@@ -77,7 +75,6 @@ module ROM
|
|
77
75
|
relation
|
78
76
|
end
|
79
77
|
end
|
80
|
-
deprecate :read, :relation, "For mapping append `.map_with(:your_mapper_name)`"
|
81
78
|
|
82
79
|
# Returns commands registry for the given relation
|
83
80
|
#
|
@@ -99,7 +96,7 @@ module ROM
|
|
99
96
|
# @return [Command, Command::Graph]
|
100
97
|
#
|
101
98
|
# @api public
|
102
|
-
def command(options)
|
99
|
+
def command(options = nil)
|
103
100
|
case options
|
104
101
|
when Symbol
|
105
102
|
name = options
|
@@ -117,9 +114,15 @@ module ROM
|
|
117
114
|
else
|
118
115
|
graph
|
119
116
|
end
|
117
|
+
when nil
|
118
|
+
Commands::Graph::Builder.new(self)
|
120
119
|
else
|
121
120
|
raise ArgumentError, "#{self.class}#command accepts a symbol or an array"
|
122
121
|
end
|
123
122
|
end
|
123
|
+
|
124
|
+
def disconnect
|
125
|
+
gateways.each_key(&:disconnect)
|
126
|
+
end
|
124
127
|
end
|
125
128
|
end
|
@@ -0,0 +1,61 @@
|
|
1
|
+
require 'rom/configuration'
|
2
|
+
require 'rom/environment'
|
3
|
+
require 'rom/setup'
|
4
|
+
require 'rom/setup/finalize'
|
5
|
+
|
6
|
+
module ROM
|
7
|
+
class CreateContainer
|
8
|
+
include ROM::Support::Publisher
|
9
|
+
|
10
|
+
attr_reader :container
|
11
|
+
|
12
|
+
def initialize(environment, setup)
|
13
|
+
@container = finalize(environment, setup)
|
14
|
+
end
|
15
|
+
|
16
|
+
private
|
17
|
+
|
18
|
+
def finalize(environment, setup)
|
19
|
+
environment.configure do |config|
|
20
|
+
environment.gateways.each_key do |key|
|
21
|
+
gateway_config = config.gateways[key]
|
22
|
+
gateway_config.infer_relations = true unless gateway_config.key?(:infer_relations)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
finalize = Finalize.new(
|
27
|
+
gateways: environment.gateways,
|
28
|
+
gateway_map: environment.gateways_map,
|
29
|
+
relation_classes: setup.relation_classes,
|
30
|
+
command_classes: setup.command_classes,
|
31
|
+
mappers: setup.mapper_classes,
|
32
|
+
config: environment.config.dup.freeze
|
33
|
+
)
|
34
|
+
|
35
|
+
finalize.run!
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
class InlineCreateContainer < CreateContainer
|
40
|
+
def initialize(*args, &block)
|
41
|
+
case args.first
|
42
|
+
when Configuration
|
43
|
+
environment = args.first.environment
|
44
|
+
setup = args.first.setup
|
45
|
+
when Environment
|
46
|
+
environment = args.first
|
47
|
+
setup = args[1]
|
48
|
+
else
|
49
|
+
configuration = Configuration.new(*args, &block)
|
50
|
+
environment = configuration.environment
|
51
|
+
setup = configuration.setup
|
52
|
+
end
|
53
|
+
|
54
|
+
super(environment, setup)
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
def self.container(*args, &block)
|
59
|
+
InlineCreateContainer.new(*args, &block).container
|
60
|
+
end
|
61
|
+
end
|
data/lib/rom/environment.rb
CHANGED
@@ -1,272 +1,58 @@
|
|
1
|
-
require 'rom/
|
2
|
-
require 'rom/
|
1
|
+
require 'rom/support/configurable'
|
2
|
+
require 'rom/gateway'
|
3
3
|
|
4
4
|
module ROM
|
5
|
-
#
|
5
|
+
# Core gateway configuration interface
|
6
6
|
#
|
7
7
|
# @api public
|
8
8
|
class Environment
|
9
|
-
|
10
|
-
#
|
11
|
-
# @return [Hash]
|
12
|
-
#
|
13
|
-
# @api private
|
14
|
-
attr_reader :gateways
|
9
|
+
include Configurable
|
15
10
|
|
16
|
-
|
17
|
-
#
|
18
|
-
# This gets set to nil after setup is finalized
|
19
|
-
#
|
20
|
-
# @return [Setup]
|
21
|
-
#
|
22
|
-
# @api private
|
23
|
-
attr_reader :boot
|
11
|
+
attr_reader :gateways, :gateways_map
|
24
12
|
|
25
|
-
# Return ROM container configured by the setup
|
26
|
-
#
|
27
|
-
# @return [Container]
|
28
|
-
#
|
29
13
|
# @api public
|
30
|
-
|
31
|
-
alias_method :env, :container
|
32
|
-
|
33
|
-
# @api private
|
34
|
-
def initialize
|
14
|
+
def initialize(*args)
|
35
15
|
@gateways = {}
|
36
|
-
|
37
|
-
|
38
|
-
# @api private
|
39
|
-
def adapters
|
40
|
-
ROM.adapters
|
41
|
-
end
|
16
|
+
@gateways_map = {}
|
42
17
|
|
43
|
-
|
44
|
-
def plugin_registry
|
45
|
-
ROM.plugin_registry
|
18
|
+
configure_gateways(*args) unless args.empty?
|
46
19
|
end
|
47
20
|
|
48
|
-
|
49
|
-
#
|
50
|
-
# @param [Mixed] The plugin identifier, usually a Symbol
|
51
|
-
# @param [Hash] Plugin options
|
52
|
-
#
|
53
|
-
# @api public
|
54
|
-
def use(plugin, options = {})
|
55
|
-
plugin_registry.environment.fetch(plugin).apply_to(self, options)
|
56
|
-
end
|
57
|
-
|
58
|
-
# Starts the setup process for relations, mappers and commands.
|
59
|
-
#
|
60
|
-
# @overload setup(type, *args)
|
61
|
-
# Sets up a single-gateway environment given a gateway type provided
|
62
|
-
# under the ROM umbrella. For custom gateways, create an instance and
|
63
|
-
# pass it directly.
|
64
|
-
#
|
65
|
-
# @param [Symbol] type
|
66
|
-
# @param [Array] *args
|
67
|
-
#
|
68
|
-
# @overload setup(gateway)
|
69
|
-
# @param [Gateway] gateway
|
70
|
-
#
|
71
|
-
# @overload setup(gateways)
|
72
|
-
# Sets up multiple gateways.
|
73
|
-
#
|
74
|
-
# @param [Hash{Symbol=>Symbol,Array}] gateways
|
75
|
-
#
|
76
|
-
# @return [Setup] boot object
|
77
|
-
#
|
78
|
-
# @example
|
79
|
-
# # Use the in-memory adapter shipped with ROM as the default gateway.
|
80
|
-
# rom = ROM::Environment.new
|
81
|
-
# env = rom.setup(:memory, 'memory://test')
|
82
|
-
# # Use `rom-sql` with an in-memory sqlite database as default gateway.
|
83
|
-
# rom.setup(:sql, 'sqlite::memory')
|
84
|
-
# # Registers a `default` and a `warehouse` gateway.
|
85
|
-
# env = rom.setup(
|
86
|
-
# default: [:sql, 'sqlite::memory'],
|
87
|
-
# warehouse: [:sql, 'postgres://localhost/warehouse']
|
88
|
-
# )
|
89
|
-
#
|
90
|
-
# @example A full environment
|
91
|
-
#
|
92
|
-
# rom = ROM::Environment.new
|
93
|
-
# rom.setup(:memory, 'memory://test')
|
94
|
-
#
|
95
|
-
# rom.relation(:users) do
|
96
|
-
# # ...
|
97
|
-
# end
|
98
|
-
#
|
99
|
-
# rom.mappers do
|
100
|
-
# define(:users) do
|
101
|
-
# # ...
|
102
|
-
# end
|
103
|
-
# end
|
104
|
-
#
|
105
|
-
# rom.commands(:users) do
|
106
|
-
# define(:create) do
|
107
|
-
# # ...
|
108
|
-
# end
|
109
|
-
# end
|
110
|
-
#
|
111
|
-
# rom.finalize # builds the container
|
112
|
-
# rom.container # returns the container registry
|
113
|
-
#
|
114
|
-
# @api public
|
115
|
-
def setup(*args, &block)
|
116
|
-
config = setup_config(*args)
|
117
|
-
configured_gateways = setup_gateways(config)
|
118
|
-
|
119
|
-
default_adapter = gateways.fetch(
|
120
|
-
configured_gateways[:default], adapters.keys.first
|
121
|
-
)
|
21
|
+
private
|
122
22
|
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
)
|
23
|
+
def configure_gateways(*args)
|
24
|
+
normalized_gateway_args = normalize_gateway_args(*args)
|
25
|
+
normalized_gateways = normalize_gateways(normalized_gateway_args)
|
127
26
|
|
128
|
-
|
129
|
-
options = config_args.is_a?(Array) && config_args.last
|
130
|
-
load_config(@boot.config.gateways[name], options) if options.is_a?(Hash)
|
131
|
-
end
|
27
|
+
@gateways, @gateways_map = normalized_gateways.values_at(:gateways, :map)
|
132
28
|
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
finalize.container
|
137
|
-
else
|
138
|
-
@boot
|
29
|
+
normalized_gateway_args.each_with_object(config) do |(name, gateway_config), config|
|
30
|
+
options = gateway_config.is_a?(Array) && gateway_config.last
|
31
|
+
load_config(config.gateways[name], options) if options.is_a?(Hash)
|
139
32
|
end
|
140
33
|
end
|
141
34
|
|
142
|
-
# Check if auto-registration is enabled for this environment
|
143
|
-
#
|
144
|
-
# @api private
|
145
|
-
def auto_registration?
|
146
|
-
false
|
147
|
-
end
|
148
|
-
|
149
|
-
# Global relation setup DSL
|
150
|
-
#
|
151
|
-
# @example
|
152
|
-
# rom = ROM::Environment.new
|
153
|
-
# rom.setup(:memory)
|
154
|
-
#
|
155
|
-
# rom.relation(:users) do
|
156
|
-
# def by_name(name)
|
157
|
-
# restrict(name: name)
|
158
|
-
# end
|
159
|
-
# end
|
160
|
-
#
|
161
|
-
# @api public
|
162
|
-
def relation(*args, &block)
|
163
|
-
boot.relation(*args, &block)
|
164
|
-
end
|
165
|
-
|
166
|
-
# Global commands setup DSL
|
167
|
-
#
|
168
|
-
# @example
|
169
|
-
# rom = ROM::Environment.new
|
170
|
-
# rom.setup(:memory)
|
171
|
-
#
|
172
|
-
# rom.commands(:users) do
|
173
|
-
# define(:create) do
|
174
|
-
# # ..
|
175
|
-
# end
|
176
|
-
# end
|
177
|
-
#
|
178
|
-
# @api public
|
179
|
-
def commands(*args, &block)
|
180
|
-
boot.commands(*args, &block)
|
181
|
-
end
|
182
|
-
|
183
|
-
# Global mapper setup DSL
|
184
|
-
#
|
185
|
-
# @example
|
186
|
-
# rom = ROM::Environment.new
|
187
|
-
# rom.setup(:memory)
|
188
|
-
#
|
189
|
-
# rom.mappers do
|
190
|
-
# define(:uses) do
|
191
|
-
# # ..
|
192
|
-
# end
|
193
|
-
# end
|
194
|
-
#
|
195
|
-
# @api public
|
196
|
-
def mappers(*args, &block)
|
197
|
-
boot.mappers(*args, &block)
|
198
|
-
end
|
199
|
-
|
200
|
-
# Finalize the setup and store default global container under
|
201
|
-
# ROM::Environmrnt#container
|
202
|
-
#
|
203
|
-
# @example
|
204
|
-
# rom = ROM::Environment.new
|
205
|
-
# rom.setup(:memory)
|
206
|
-
# rom.finalize # => rom
|
207
|
-
# rom.boot # => nil
|
208
|
-
# rom.container # => the container
|
209
|
-
#
|
210
|
-
# @return [ROM]
|
211
|
-
#
|
212
|
-
# @api public
|
213
|
-
def finalize
|
214
|
-
@container = boot.finalize
|
215
|
-
self
|
216
|
-
ensure
|
217
|
-
@boot = nil
|
218
|
-
end
|
219
|
-
|
220
|
-
# Relation subclass registration during setup phase
|
221
|
-
#
|
222
|
-
# @api private
|
223
|
-
def register_relation(klass)
|
224
|
-
boot.register_relation(klass) if boot
|
225
|
-
end
|
226
|
-
|
227
|
-
# Mapper subclass registration during setup phase
|
228
|
-
#
|
229
|
-
# @api private
|
230
|
-
def register_mapper(klass)
|
231
|
-
boot.register_mapper(klass) if boot
|
232
|
-
end
|
233
|
-
|
234
|
-
# Command subclass registration during setup phase
|
235
|
-
#
|
236
|
-
# @api private
|
237
|
-
def register_command(klass)
|
238
|
-
boot.register_command(klass) if boot
|
239
|
-
end
|
240
|
-
|
241
|
-
# Return gateway config that was used to setup this environment's container
|
242
|
-
#
|
243
|
-
# @return [Configurable::Config]
|
244
|
-
#
|
245
|
-
# @api public
|
246
|
-
def config
|
247
|
-
boot.config
|
248
|
-
end
|
249
35
|
|
250
|
-
private
|
251
|
-
|
252
|
-
# Helper method to handle single- or multi-repo setup options
|
253
|
-
#
|
254
36
|
# @api private
|
255
|
-
def
|
256
|
-
args.first.is_a?(Hash) ? args.first : {
|
37
|
+
def normalize_gateway_args(*args)
|
38
|
+
args.first.is_a?(Hash) ? args.first : {default: args}
|
257
39
|
end
|
258
40
|
|
259
41
|
# Build gateways using the setup interface
|
260
42
|
#
|
261
43
|
# @api private
|
262
|
-
def
|
263
|
-
|
44
|
+
def normalize_gateways(gateways_config)
|
45
|
+
gateways_config.each_with_object({map: {}, gateways: {}}) do |(name, spec), hash|
|
264
46
|
identifier, *args = Array(spec)
|
265
47
|
|
266
|
-
|
267
|
-
|
48
|
+
if identifier.is_a?(Gateway)
|
49
|
+
gateway = identifier
|
50
|
+
else
|
51
|
+
gateway = Gateway.setup(identifier, *(args.flatten))
|
52
|
+
hash[:map][gateway] = identifier
|
53
|
+
end
|
268
54
|
|
269
|
-
gateways[
|
55
|
+
hash[:gateways][name] = gateway
|
270
56
|
end
|
271
57
|
end
|
272
58
|
|