rom-core 5.3.1 → 5.4.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 (97) hide show
  1. checksums.yaml +4 -4
  2. data/lib/rom/array_dataset.rb +5 -5
  3. data/lib/rom/association_set.rb +1 -2
  4. data/lib/rom/associations/definitions/abstract.rb +5 -3
  5. data/lib/rom/associations/many_to_many.rb +1 -2
  6. data/lib/rom/attribute.rb +15 -37
  7. data/lib/rom/auto_curry.rb +34 -23
  8. data/lib/rom/cache.rb +9 -21
  9. data/lib/rom/command.rb +19 -37
  10. data/lib/rom/command_compiler.rb +12 -14
  11. data/lib/rom/command_proxy.rb +6 -10
  12. data/lib/rom/command_registry.rb +4 -8
  13. data/lib/rom/commands/class_interface.rb +20 -20
  14. data/lib/rom/commands/composite.rb +3 -0
  15. data/lib/rom/commands/graph/class_interface.rb +3 -1
  16. data/lib/rom/commands/graph/input_evaluator.rb +3 -1
  17. data/lib/rom/commands/graph.rb +3 -0
  18. data/lib/rom/commands/lazy/create.rb +2 -0
  19. data/lib/rom/commands/lazy/update.rb +2 -0
  20. data/lib/rom/commands/lazy.rb +2 -3
  21. data/lib/rom/configuration.rb +14 -16
  22. data/lib/rom/configuration_dsl/command.rb +2 -2
  23. data/lib/rom/configuration_dsl/command_dsl.rb +9 -5
  24. data/lib/rom/configuration_dsl/mapper_dsl.rb +12 -3
  25. data/lib/rom/configuration_dsl/relation.rb +4 -2
  26. data/lib/rom/configuration_dsl.rb +8 -10
  27. data/lib/rom/constants.rb +26 -26
  28. data/lib/rom/container.rb +15 -15
  29. data/lib/rom/core/version.rb +1 -1
  30. data/lib/rom/core.rb +0 -1
  31. data/lib/rom/create_container.rb +3 -5
  32. data/lib/rom/data_proxy.rb +13 -15
  33. data/lib/rom/enumerable_dataset.rb +6 -6
  34. data/lib/rom/environment.rb +5 -5
  35. data/lib/rom/gateway.rb +4 -12
  36. data/lib/rom/global/plugin_dsl.rb +4 -4
  37. data/lib/rom/global.rb +2 -2
  38. data/lib/rom/header/attribute.rb +1 -1
  39. data/lib/rom/header.rb +13 -35
  40. data/lib/rom/initializer.rb +11 -15
  41. data/lib/rom/lint/enumerable_dataset.rb +2 -1
  42. data/lib/rom/lint/gateway.rb +3 -1
  43. data/lib/rom/lint/linter.rb +2 -2
  44. data/lib/rom/lint/test.rb +4 -6
  45. data/lib/rom/mapper/attribute_dsl.rb +39 -27
  46. data/lib/rom/mapper/builder.rb +2 -2
  47. data/lib/rom/mapper/dsl.rb +2 -3
  48. data/lib/rom/mapper/model_dsl.rb +5 -1
  49. data/lib/rom/mapper.rb +2 -4
  50. data/lib/rom/mapper_compiler.rb +3 -2
  51. data/lib/rom/mapper_registry.rb +2 -4
  52. data/lib/rom/memory/commands.rb +1 -1
  53. data/lib/rom/memory/dataset.rb +7 -5
  54. data/lib/rom/memory/gateway.rb +1 -0
  55. data/lib/rom/model_builder.rb +14 -14
  56. data/lib/rom/open_struct.rb +1 -1
  57. data/lib/rom/pipeline.rb +17 -20
  58. data/lib/rom/plugin_registry.rb +4 -10
  59. data/lib/rom/plugins/command/timestamps.rb +9 -5
  60. data/lib/rom/plugins/relation/instrumentation.rb +7 -2
  61. data/lib/rom/plugins/relation/registry_reader.rb +3 -15
  62. data/lib/rom/plugins.rb +1 -3
  63. data/lib/rom/processor/transproc.rb +14 -4
  64. data/lib/rom/processor.rb +1 -0
  65. data/lib/rom/registry.rb +20 -29
  66. data/lib/rom/relation/class_interface.rb +18 -16
  67. data/lib/rom/relation/combined.rb +7 -4
  68. data/lib/rom/relation/composite.rb +2 -6
  69. data/lib/rom/relation/curried.rb +12 -11
  70. data/lib/rom/relation/graph.rb +4 -12
  71. data/lib/rom/relation/loaded.rb +8 -16
  72. data/lib/rom/relation/materializable.rb +6 -14
  73. data/lib/rom/relation/name.rb +5 -14
  74. data/lib/rom/relation/view_dsl.rb +7 -9
  75. data/lib/rom/relation/wrap.rb +3 -9
  76. data/lib/rom/relation.rb +39 -81
  77. data/lib/rom/schema/associations_dsl.rb +4 -8
  78. data/lib/rom/schema/dsl.rb +14 -13
  79. data/lib/rom/schema/inferrer.rb +5 -3
  80. data/lib/rom/schema.rb +27 -41
  81. data/lib/rom/setup/auto_registration.rb +4 -6
  82. data/lib/rom/setup/auto_registration_strategies/base.rb +1 -1
  83. data/lib/rom/setup/auto_registration_strategies/custom_namespace.rb +4 -8
  84. data/lib/rom/setup/finalize/finalize_commands.rb +3 -0
  85. data/lib/rom/setup/finalize/finalize_mappers.rb +16 -14
  86. data/lib/rom/setup/finalize/finalize_relations.rb +30 -4
  87. data/lib/rom/setup/finalize.rb +17 -3
  88. data/lib/rom/setup.rb +5 -4
  89. data/lib/rom/struct.rb +20 -18
  90. data/lib/rom/struct_compiler.rb +4 -7
  91. data/lib/rom/support/configurable.rb +10 -20
  92. data/lib/rom/support/memoizable.rb +10 -9
  93. data/lib/rom/support/notifications.rb +4 -8
  94. data/lib/rom/transaction.rb +2 -4
  95. data/lib/rom/transformer.rb +6 -10
  96. data/lib/rom/types.rb +3 -6
  97. metadata +15 -57
@@ -56,9 +56,7 @@ module ROM
56
56
  # @return [Proc]
57
57
  #
58
58
  # @api private
59
- def row_proc
60
- -> tuple { tuple }
61
- end
59
+ def row_proc = -> tuple { tuple }
62
60
 
63
61
  # Forward provided methods to the underlaying data object
64
62
  #
@@ -77,18 +75,18 @@ module ROM
77
75
  # FIXME: we should probably raise if one of the non-forwardable methods
78
76
  # was provided
79
77
  (methods - NON_FORWARDABLE).each do |method_name|
80
- class_eval <<-RUBY, __FILE__, __LINE__ + 1
81
- def #{method_name}(*args, &block)
82
- response = data.public_send(#{method_name.inspect}, *args, &block)
83
-
84
- if response.equal?(data)
85
- self
86
- elsif response.is_a?(data.class)
87
- self.class.new(response)
88
- else
89
- response
90
- end
91
- end
78
+ class_eval(<<-RUBY, __FILE__, __LINE__ + 1)
79
+ def #{method_name}(...) # def find_all(...)
80
+ response = data.public_send(:#{method_name}, ...) # response = data.public_send(:find_all, ...)
81
+ #
82
+ if response.equal?(data) # if response.equal?(data)
83
+ self # self
84
+ elsif response.is_a?(data.class) # elsif response.is_a?(data.class)
85
+ self.class.new(response) # self.class.new(response)
86
+ else # else
87
+ response # response
88
+ end # end
89
+ end # end
92
90
  RUBY
93
91
  end
94
92
  end
@@ -27,7 +27,7 @@ module ROM
27
27
  # @api public
28
28
  module EnumerableDataset
29
29
  extend DataProxy::ClassMethods
30
- include Enumerable
30
+ include ::Enumerable
31
31
 
32
32
  # Coerce a dataset to an array
33
33
  #
@@ -59,11 +59,11 @@ module ROM
59
59
  chunk collect collect_concat drop_while find_all flat_map
60
60
  grep map reject select sort sort_by take_while
61
61
  ].each do |method|
62
- class_eval <<-RUBY, __FILE__, __LINE__ + 1
63
- def #{method}(*args, &block)
64
- return to_enum unless block
65
- self.class.new(super(*args, &block), **options)
66
- end
62
+ class_eval(<<-RUBY, __FILE__, __LINE__ + 1)
63
+ def #{method}(...) # def collect(...)
64
+ return to_enum unless block_given? # return to_enum unless block_given?
65
+ self.class.new(super(...), **options) # self.class.new(super(...), **options)
66
+ end # end
67
67
  RUBY
68
68
  end
69
69
  end
@@ -10,7 +10,9 @@ module ROM
10
10
  class Environment
11
11
  include Configurable
12
12
 
13
- attr_reader :gateways, :gateways_map
13
+ attr_reader :gateways
14
+
15
+ attr_reader :gateways_map
14
16
 
15
17
  # @api private
16
18
  def initialize(*args)
@@ -49,11 +51,9 @@ module ROM
49
51
 
50
52
  if identifier.is_a?(Gateway)
51
53
  gateway = identifier
52
- elsif RUBY_VERSION >= "3.0"
53
- kwargs = args.last.is_a?(Hash) ? args.pop : {}
54
- gateway = Gateway.setup(identifier, *args.flatten, **kwargs)
55
54
  else
56
- gateway = Gateway.setup(identifier, *args.flatten)
55
+ kwargs = args.last.is_a?(::Hash) ? args.pop : {}
56
+ gateway = Gateway.setup(identifier, *args.flatten, **kwargs)
57
57
  end
58
58
 
59
59
  hash[:map][gateway] = name
data/lib/rom/gateway.rb CHANGED
@@ -78,7 +78,7 @@ module ROM
78
78
  # @return [Gateway] a specific gateway subclass
79
79
  #
80
80
  # @api public
81
- def self.setup(gateway_or_scheme, *args)
81
+ def self.setup(gateway_or_scheme, *args, **kwargs)
82
82
  case gateway_or_scheme
83
83
  when String
84
84
  raise ArgumentError, <<-STRING.gsub(/^ {10}/, '')
@@ -91,7 +91,7 @@ module ROM
91
91
  if klass.instance_method(:initialize).arity.zero?
92
92
  klass.new
93
93
  else
94
- klass.new(*args)
94
+ klass.new(*args, **kwargs)
95
95
  end
96
96
  else
97
97
  raise ArgumentError, "Can't accept arguments when passing an instance" unless args.empty?
@@ -100,10 +100,6 @@ module ROM
100
100
  end
101
101
  end
102
102
 
103
- class << self
104
- ruby2_keywords(:setup) if respond_to?(:ruby2_keywords, true)
105
- end
106
-
107
103
  # Get gateway subclass for a specific adapter
108
104
  #
109
105
  # @param [Symbol] type Adapter identifier
@@ -176,15 +172,11 @@ module ROM
176
172
  # the transaction was rolled back
177
173
  #
178
174
  # @api public
179
- def transaction(opts = EMPTY_HASH, &block)
180
- transaction_runner(opts).run(opts, &block)
181
- end
175
+ def transaction(opts = EMPTY_HASH, &) = transaction_runner(opts).run(opts, &)
182
176
 
183
177
  private
184
178
 
185
179
  # @api private
186
- def transaction_runner(_)
187
- Transaction::NoOp
188
- end
180
+ def transaction_runner(_) = Transaction::NoOp
189
181
  end
190
182
  end
@@ -21,10 +21,10 @@ module ROM
21
21
  attr_reader :registry
22
22
 
23
23
  # @api private
24
- def initialize(registry, defaults = EMPTY_HASH, &block)
24
+ def initialize(registry, defaults = EMPTY_HASH, &)
25
25
  @registry = registry
26
26
  @defaults = defaults
27
- instance_exec(&block)
27
+ instance_exec(&)
28
28
  end
29
29
 
30
30
  # Register a plugin
@@ -43,8 +43,8 @@ module ROM
43
43
  # @param [Symbol] type The adapter identifier
44
44
  #
45
45
  # @api public
46
- def adapter(type, &block)
47
- self.class.new(registry, adapter: type, &block)
46
+ def adapter(type, &)
47
+ self.class.new(registry, adapter: type, &)
48
48
  end
49
49
  end
50
50
  end
data/lib/rom/global.rb CHANGED
@@ -40,8 +40,8 @@ module ROM
40
40
  # end
41
41
  #
42
42
  # @api public
43
- def plugins(*args, &block)
44
- PluginDSL.new(plugin_registry, *args, &block)
43
+ def plugins(...)
44
+ PluginDSL.new(plugin_registry, ...)
45
45
  end
46
46
 
47
47
  # Register adapter namespace under a specified identifier
@@ -113,7 +113,7 @@ module ROM
113
113
  attr_reader :header
114
114
 
115
115
  # @api private
116
- def initialize(*)
116
+ def initialize(*, **)
117
117
  super
118
118
  @header = meta.fetch(:header)
119
119
  end
data/lib/rom/header.rb CHANGED
@@ -10,8 +10,8 @@ module ROM
10
10
  #
11
11
  # @private
12
12
  class Header
13
- include Enumerable
14
- include Dry::Equalizer(:attributes, :model)
13
+ include ::Enumerable
14
+ include ::Dry::Equalizer(:attributes, :model)
15
15
 
16
16
  # @return [Class] optional model associated with a header
17
17
  #
@@ -54,9 +54,7 @@ module ROM
54
54
  if input.instance_of?(self)
55
55
  input
56
56
  else
57
- attributes = input.each_with_object({}) { |pair, h|
58
- h[pair.first] = Attribute.coerce(pair)
59
- }
57
+ attributes = input.to_h { [_1.first, Attribute.coerce(_1)] }
60
58
 
61
59
  new(attributes, options)
62
60
  end
@@ -80,88 +78,68 @@ module ROM
80
78
  # @yield [Attribute]
81
79
  #
82
80
  # @api private
83
- def each
84
- attributes.each_value { |attribute| yield(attribute) }
85
- end
81
+ def each(&) = attributes.each_value(&)
86
82
 
87
83
  # Return if there are any aliased attributes
88
84
  #
89
85
  # @api private
90
- def aliased?
91
- any?(&:aliased?)
92
- end
86
+ def aliased? = any?(&:aliased?)
93
87
 
94
88
  # Return attribute keys
95
89
  #
96
90
  # An attribute key corresponds to tuple attribute names
97
91
  #
98
92
  # @api private
99
- def keys
100
- attributes.keys
101
- end
93
+ def keys = attributes.keys
102
94
 
103
95
  # Return attribute identified by its name
104
96
  #
105
97
  # @return [Attribute]
106
98
  #
107
99
  # @api private
108
- def [](name)
109
- attributes.fetch(name)
110
- end
100
+ def [](name) = attributes.fetch(name)
111
101
 
112
102
  # Return all Combined attributes
113
103
  #
114
104
  # @return [Array<Combined>]
115
105
  #
116
106
  # @api private
117
- def combined
118
- by_type(Combined)
119
- end
107
+ def combined = by_type(Combined)
120
108
 
121
109
  # Returns all attributes that require preprocessing
122
110
  #
123
111
  # @return [Array<Group,Fold>]
124
112
  #
125
113
  # @api private
126
- def preprocessed
127
- by_type(Group, Fold)
128
- end
114
+ def preprocessed = by_type(Group, Fold)
129
115
 
130
116
  # Returns all attributes that require postprocessing
131
117
  #
132
118
  # @return [Array<Ungroup,Unfold>]
133
119
  #
134
120
  # @api private
135
- def postprocessed
136
- by_type(Ungroup, Unfold)
137
- end
121
+ def postprocessed = by_type(Ungroup, Unfold)
138
122
 
139
123
  # Return all Wrap attributes
140
124
  #
141
125
  # @return [Array<Wrap>]
142
126
  #
143
127
  # @api private
144
- def wraps
145
- by_type(Wrap)
146
- end
128
+ def wraps = by_type(Wrap)
147
129
 
148
130
  # Return all non-primitive attributes that don't require mapping
149
131
  #
150
132
  # @return [Array<Group,Fold,Ungroup,Unfold,Wrap,Unwrap>]
151
133
  #
152
134
  # @api private
153
- def non_primitives
154
- preprocessed + wraps
155
- end
135
+ def non_primitives = preprocessed + wraps
156
136
 
157
137
  # Return all primitive attributes that require mapping
158
138
  #
159
139
  # @return [Array<Attribute>]
160
140
  #
161
141
  # @api private
162
- def primitives
163
- to_a - non_primitives
164
- end
142
+ def primitives = to_a - non_primitives
165
143
 
166
144
  private
167
145
 
@@ -8,18 +8,14 @@ module ROM
8
8
  # @api private
9
9
  module DefineWithHook
10
10
  # @api private
11
- def param(*)
12
- super.tap { __define_with__ }
13
- end
14
- ruby2_keywords(:param) if respond_to?(:ruby2_keywords, true)
11
+ def param(*, **) = super.tap { __define_with__ }
15
12
 
16
13
  # @api private
17
- def option(*)
14
+ def option(*, **)
18
15
  super.tap do
19
16
  __define_with__ unless method_defined?(:with)
20
17
  end
21
18
  end
22
- ruby2_keywords(:option) if respond_to?(:ruby2_keywords, true)
23
19
 
24
20
  # @api private
25
21
  def __define_with__
@@ -34,13 +30,13 @@ module ROM
34
30
  undef_method(:with) if method_defined?(:with)
35
31
 
36
32
  class_eval(<<-RUBY, __FILE__, __LINE__ + 1)
37
- def with(**new_options)
38
- if new_options.empty?
39
- self
40
- else
41
- self.class.new(#{seq_names}**options, **new_options)
42
- end
43
- end
33
+ def with(**new_options) # def with(**new_options)
34
+ if new_options.empty? # if new_options.empty?
35
+ self # self
36
+ else # else
37
+ self.class.new(#{seq_names}**options, **new_options) # self.class.new(relation, **options, **new_options)
38
+ end # end
39
+ end # end
44
40
  RUBY
45
41
  end
46
42
  end
@@ -64,8 +60,8 @@ module ROM
64
60
  #
65
61
  # @api public
66
62
  def options
67
- @__options__ ||= self.class.dry_initializer.definitions.values.each_with_object({}) do |item, obj|
68
- obj[item.target] = instance_variable_get(item.ivar)
63
+ @__options__ ||= self.class.dry_initializer.definitions.values.to_h do |item|
64
+ [item.target, instance_variable_get(item.ivar)]
69
65
  end
70
66
  end
71
67
 
@@ -26,6 +26,7 @@ module ROM
26
26
  #
27
27
  # @api public
28
28
  def initialize(dataset, data)
29
+ super()
29
30
  @dataset = dataset
30
31
  @data = data
31
32
  end
@@ -35,7 +36,7 @@ module ROM
35
36
  # @api public
36
37
  def lint_each
37
38
  result = []
38
- dataset.each do |tuple|
39
+ dataset.each do |tuple| # rubocop:disable Style/MapIntoArray
39
40
  result << tuple
40
41
  end
41
42
  return if result == data
@@ -35,6 +35,7 @@ module ROM
35
35
  # @param [Class] gateway
36
36
  # @param [String] uri optional
37
37
  def initialize(identifier, gateway, uri = nil)
38
+ super()
38
39
  @identifier = identifier
39
40
  @gateway = gateway
40
41
  @uri = uri
@@ -89,7 +90,8 @@ module ROM
89
90
  # Lint: Ensure +gateway_instance+ returns adapter name
90
91
  def lint_adapter_reader
91
92
  if gateway_instance.adapter != identifier
92
- complain "#{gateway_instance} must have the adapter identifier set to #{identifier.inspect}"
93
+ complain "#{gateway_instance} must have the adapter " \
94
+ "identifier set to #{identifier.inspect}"
93
95
  end
94
96
  rescue MissingAdapterIdentifierError
95
97
  complain "#{gateway_instance} is missing the adapter identifier"
@@ -18,7 +18,7 @@ module ROM
18
18
  # @api public
19
19
  class Linter
20
20
  # A failure raised by +complain+
21
- Failure = Class.new(StandardError)
21
+ Failure = ::Class.new(::StandardError)
22
22
 
23
23
  # Iterate over all lint methods
24
24
  #
@@ -52,7 +52,7 @@ module ROM
52
52
  # @return [String]
53
53
  #
54
54
  # @api private
55
- def self.lints
55
+ private_class_method def self.lints
56
56
  public_instance_methods(true).grep(/^lint_/).map(&:to_s)
57
57
  end
58
58
 
data/lib/rom/lint/test.rb CHANGED
@@ -12,13 +12,11 @@ module ROM
12
12
  # @param [String] name
13
13
  #
14
14
  # @api private
15
- def define_test_method(name, &block)
15
+ def define_test_method(name, &)
16
16
  define_method "test_#{name}" do
17
- begin
18
- instance_eval(&block)
19
- rescue ROM::Lint::Linter::Failure => f
20
- raise Minitest::Assertion, f.message
21
- end
17
+ instance_eval(&)
18
+ rescue ROM::Lint::Linter::Failure => e
19
+ raise Minitest::Assertion, e.message
22
20
  end
23
21
  end
24
22
  end
@@ -13,10 +13,21 @@ module ROM
13
13
  # TODO: break this madness down into smaller pieces
14
14
  #
15
15
  # @api private
16
+ # rubocop:disable Metrics/ClassLength
16
17
  class AttributeDSL
17
18
  include ModelDSL
18
19
 
19
- attr_reader :attributes, :options, :copy_keys, :symbolize_keys, :reject_keys, :steps
20
+ attr_reader :attributes
21
+
22
+ attr_reader :options
23
+
24
+ attr_reader :copy_keys
25
+
26
+ attr_reader :symbolize_keys
27
+
28
+ attr_reader :reject_keys
29
+
30
+ attr_reader :steps
20
31
 
21
32
  # @param [Array] attributes accumulator array
22
33
  # @param [Hash] options
@@ -78,17 +89,17 @@ module ROM
78
89
  # @api public
79
90
  def attribute(name, options = EMPTY_HASH, &block)
80
91
  with_attr_options(name, options) do |attr_options|
81
- if options[:type] && block
92
+ if options[:type] && block_given?
82
93
  raise ArgumentError,
83
94
  "can't specify type and block at the same time"
84
95
  end
85
- attr_options[:coercer] = block if block
96
+ attr_options[:coercer] = block if block_given?
86
97
  add_attribute(name, attr_options)
87
98
  end
88
99
  end
89
100
 
90
101
  def exclude(name)
91
- attributes << [name, { exclude: true }]
102
+ attributes << [name, exclude: true]
92
103
  end
93
104
 
94
105
  # Perform transformations sequentially
@@ -101,8 +112,8 @@ module ROM
101
112
  # end
102
113
  #
103
114
  # @api public
104
- def step(options = EMPTY_HASH, &block)
105
- steps << new(options, &block)
115
+ def step(options = EMPTY_HASH, &)
116
+ steps << new(options, &)
106
117
  end
107
118
 
108
119
  # Define an embedded attribute
@@ -129,7 +140,7 @@ module ROM
129
140
  # its attributes
130
141
  #
131
142
  # @api public
132
- def embedded(name, options, &block)
143
+ def embedded(name, options, &)
133
144
  with_attr_options(name) do |attr_options|
134
145
  mapper = options[:mapper]
135
146
 
@@ -139,7 +150,7 @@ module ROM
139
150
  mapper, name, embedded_options.update(attr_options)
140
151
  )
141
152
  else
142
- dsl = new(options, &block)
153
+ dsl = new(options, &)
143
154
  attr_options.update(options)
144
155
  add_attribute(
145
156
  name, { header: dsl.header, type: :array }.update(attr_options)
@@ -167,7 +178,7 @@ module ROM
167
178
  # @see AttributeDSL#embedded
168
179
  #
169
180
  # @api public
170
- def wrap(*args, &block)
181
+ def wrap(*args, &)
171
182
  ensure_mapper_configuration('wrap', args, block_given?)
172
183
 
173
184
  with_name_or_options(*args) do |name, options, mapper|
@@ -176,7 +187,7 @@ module ROM
176
187
  if mapper
177
188
  attributes_from_mapper(mapper, name, wrap_options)
178
189
  else
179
- dsl(name, wrap_options, &block)
190
+ dsl(name, wrap_options, &)
180
191
  end
181
192
  end
182
193
  end
@@ -200,14 +211,14 @@ module ROM
200
211
  # @see AttributeDSL#embedded
201
212
  #
202
213
  # @api public
203
- def unwrap(*args, &block)
214
+ def unwrap(*args, &)
204
215
  with_name_or_options(*args) do |name, options, mapper|
205
216
  unwrap_options = { type: :hash, unwrap: true }.update(options)
206
217
 
207
218
  if mapper
208
219
  attributes_from_mapper(mapper, name, unwrap_options)
209
220
  else
210
- dsl(name, unwrap_options, &block)
221
+ dsl(name, unwrap_options, &)
211
222
  end
212
223
  end
213
224
  end
@@ -229,7 +240,7 @@ module ROM
229
240
  # @see AttributeDSL#embedded
230
241
  #
231
242
  # @api public
232
- def group(*args, &block)
243
+ def group(*args, &)
233
244
  ensure_mapper_configuration('group', args, block_given?)
234
245
 
235
246
  with_name_or_options(*args) do |name, options, mapper|
@@ -238,7 +249,7 @@ module ROM
238
249
  if mapper
239
250
  attributes_from_mapper(mapper, name, group_options)
240
251
  else
241
- dsl(name, group_options, &block)
252
+ dsl(name, group_options, &)
242
253
  end
243
254
  end
244
255
  end
@@ -254,10 +265,10 @@ module ROM
254
265
  # @see AttributeDSL#embedded
255
266
  #
256
267
  # @api public
257
- def ungroup(*args, &block)
268
+ def ungroup(*args, &)
258
269
  with_name_or_options(*args) do |name, options, *|
259
270
  ungroup_options = { type: :array, ungroup: true }.update(options)
260
- dsl(name, ungroup_options, &block)
271
+ dsl(name, ungroup_options, &)
261
272
  end
262
273
  end
263
274
 
@@ -274,10 +285,10 @@ module ROM
274
285
  # @see AttributeDSL#embedded
275
286
  #
276
287
  # @api public
277
- def fold(*args, &block)
288
+ def fold(*args, &)
278
289
  with_name_or_options(*args) do |name, *|
279
290
  fold_options = { type: :array, fold: true }
280
- dsl(name, fold_options, &block)
291
+ dsl(name, fold_options, &)
281
292
  end
282
293
  end
283
294
 
@@ -330,8 +341,8 @@ module ROM
330
341
  # @option options [Symbol] :type The type, either :array (default) or :hash
331
342
  #
332
343
  # @api public
333
- def combine(name, options, &block)
334
- dsl = new(options, &block)
344
+ def combine(name, options, &)
345
+ dsl = new(options, &)
335
346
 
336
347
  attr_opts = {
337
348
  type: options.fetch(:type, :array),
@@ -396,9 +407,9 @@ module ROM
396
407
  # This is used by embedded, wrap and group
397
408
  #
398
409
  # @api private
399
- def dsl(name_or_attrs, options, &block)
400
- if block
401
- attributes_from_block(name_or_attrs, options, &block)
410
+ def dsl(name_or_attrs, options, &)
411
+ if block_given?
412
+ attributes_from_block(name_or_attrs, options, &)
402
413
  else
403
414
  attributes_from_hash(name_or_attrs, options)
404
415
  end
@@ -409,8 +420,8 @@ module ROM
409
420
  # Used by embedded, wrap and group
410
421
  #
411
422
  # @api private
412
- def attributes_from_block(name, options, &block)
413
- dsl = new(options, &block)
423
+ def attributes_from_block(name, options, &)
424
+ dsl = new(options, &)
414
425
  header = dsl.header
415
426
  add_attribute(name, options.update(header: header))
416
427
  header.each { |attr| remove(attr.key) unless name == attr.key }
@@ -456,9 +467,9 @@ module ROM
456
467
  # Embedded, wrap and group can override top-level options like `prefix`
457
468
  #
458
469
  # @api private
459
- def new(options, &block)
470
+ def new(options, &)
460
471
  dsl = self.class.new([], @options.merge(options))
461
- dsl.instance_exec(&block) unless block.nil?
472
+ dsl.instance_exec(&) if block_given?
462
473
  dsl
463
474
  end
464
475
 
@@ -476,5 +487,6 @@ module ROM
476
487
  end
477
488
  end
478
489
  end
490
+ # rubocop:enable Metrics/ClassLength
479
491
  end
480
492
  end
@@ -11,7 +11,7 @@ module ROM
11
11
  # This is used by Setup#mappers DSL
12
12
  #
13
13
  # @api private
14
- def self.build_class(name, mapper_registry, options = EMPTY_HASH, &block)
14
+ def self.build_class(name, mapper_registry, options = EMPTY_HASH, &)
15
15
  class_name = "ROM::Mapper[#{name}]"
16
16
 
17
17
  parent = options[:parent]
@@ -29,7 +29,7 @@ module ROM
29
29
  klass.relation(name)
30
30
  klass.inherit_header(inherit_header)
31
31
 
32
- klass.class_eval(&block) if block
32
+ klass.class_eval(&) if block_given?
33
33
  end
34
34
  end
35
35
  end
@@ -105,14 +105,13 @@ module ROM
105
105
  # Delegate Attribute DSL method to the dsl instance
106
106
  #
107
107
  # @api private
108
- def method_missing(name, *args, &block)
108
+ def method_missing(name, ...)
109
109
  if dsl.respond_to?(name)
110
- dsl.public_send(name, *args, &block)
110
+ dsl.public_send(name, ...)
111
111
  else
112
112
  super
113
113
  end
114
114
  end
115
- ruby2_keywords(:method_missing) if respond_to?(:ruby2_keywords, true)
116
115
  end
117
116
  end
118
117
  end
@@ -8,7 +8,11 @@ module ROM
8
8
  #
9
9
  # @private
10
10
  module ModelDSL
11
- attr_reader :attributes, :builder, :klass
11
+ attr_reader :attributes
12
+
13
+ attr_reader :builder
14
+
15
+ attr_reader :klass
12
16
 
13
17
  DEFAULT_TYPE = :poro
14
18