Class: ROM::Mapper::AttributeDSL Private
- Inherits:
-
Object
- Object
- ROM::Mapper::AttributeDSL
- Includes:
- ModelDSL
- Defined in:
- lib/rom/mapper/attribute_dsl.rb
Overview
This class is part of a private API. You should avoid using this class if possible, as it may be removed or be changed in the future.
Mapper attribute DSL exposed by mapper subclasses
This class is private even though its methods are exposed by mappers. Typically it’s not meant to be used directly.
TODO: break this madness down into smaller pieces
Constant Summary
Constants included from ModelDSL
Instance Attribute Summary collapse
- #attributes ⇒ Object readonly private
- #copy_keys ⇒ Object readonly private
- #options ⇒ Object readonly private
- #reject_keys ⇒ Object readonly private
- #steps ⇒ Object readonly private
- #symbolize_keys ⇒ Object readonly private
Attributes included from ModelDSL
Instance Method Summary collapse
-
#attribute(name, options = EMPTY_HASH, &block) ⇒ Object
Define a mapping attribute with its options and/or block.
-
#combine(name, options, &block) ⇒ Object
Define an embedded combined attribute that requires “combine” transformation.
-
#embedded(name, options, &block) ⇒ Object
Define an embedded attribute.
- #exclude(name) ⇒ Object private
-
#fold(*args, &block) ⇒ Object
Define an embedded hash attribute that requires “fold” transformation.
-
#group(*args, &block) ⇒ Object
Define an embedded hash attribute that requires “grouping” transformation.
-
#header ⇒ Header
private
Generate a header from attribute definitions.
-
#initialize(attributes, options) ⇒ AttributeDSL
constructor
private
A new instance of AttributeDSL.
-
#prefix(value = Undefined) ⇒ Object
Redefine the prefix for the following attributes.
-
#prefix_separator(value = Undefined) ⇒ Object
Redefine the prefix separator for the following attributes.
-
#step(options = EMPTY_HASH, &block) ⇒ Object
Perform transformations sequentially.
-
#unfold(name, options = EMPTY_HASH) ⇒ Object
Define an embedded hash attribute that requires “unfold” transformation.
-
#ungroup(*args, &block) ⇒ Object
Define an embedded array attribute that requires “ungrouping” transformation.
-
#unwrap(*args, &block) ⇒ Object
Define an embedded hash attribute that requires “unwrapping” transformation.
-
#wrap(*args, &block) ⇒ Object
Define an embedded hash attribute that requires “wrapping” transformation.
Methods included from ModelDSL
Constructor Details
#initialize(attributes, options) ⇒ AttributeDSL
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Returns a new instance of AttributeDSL.
23 24 25 26 27 28 29 30 31 32 |
# File 'lib/rom/mapper/attribute_dsl.rb', line 23 def initialize(attributes, ) @attributes = attributes @options = @copy_keys = .fetch(:copy_keys) @symbolize_keys = .fetch(:symbolize_keys) @prefix = .fetch(:prefix) @prefix_separator = .fetch(:prefix_separator) @reject_keys = .fetch(:reject_keys) @steps = [] end |
Instance Attribute Details
#attributes ⇒ Object (readonly)
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
17 18 19 |
# File 'lib/rom/mapper/attribute_dsl.rb', line 17 def attributes @attributes end |
#copy_keys ⇒ Object (readonly)
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
17 18 19 |
# File 'lib/rom/mapper/attribute_dsl.rb', line 17 def copy_keys @copy_keys end |
#options ⇒ Object (readonly)
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
17 18 19 |
# File 'lib/rom/mapper/attribute_dsl.rb', line 17 def @options end |
#reject_keys ⇒ Object (readonly)
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
17 18 19 |
# File 'lib/rom/mapper/attribute_dsl.rb', line 17 def reject_keys @reject_keys end |
#steps ⇒ Object (readonly)
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
17 18 19 |
# File 'lib/rom/mapper/attribute_dsl.rb', line 17 def steps @steps end |
#symbolize_keys ⇒ Object (readonly)
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
17 18 19 |
# File 'lib/rom/mapper/attribute_dsl.rb', line 17 def symbolize_keys @symbolize_keys end |
Instance Method Details
#attribute(name, options = EMPTY_HASH, &block) ⇒ Object
Define a mapping attribute with its options and/or block
77 78 79 80 81 82 83 84 |
# File 'lib/rom/mapper/attribute_dsl.rb', line 77 def attribute(name, = EMPTY_HASH, &block) (name, ) do || raise ArgumentError, "can't specify type and block at the same time" if [:type] && block [:coercer] = block if block add_attribute(name, ) end end |
#combine(name, options, &block) ⇒ Object
Define an embedded combined attribute that requires “combine” transformation
Typically this can be used to process results of eager-loading
329 330 331 332 333 334 335 336 337 338 339 340 |
# File 'lib/rom/mapper/attribute_dsl.rb', line 329 def combine(name, , &block) dsl = new(, &block) attr_opts = { type: .fetch(:type, :array), keys: .fetch(:on), combine: true, header: dsl.header } add_attribute(name, attr_opts) end |
#embedded(name, options, &block) ⇒ Object
Define an embedded attribute
Block exposes the attribute dsl too
128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 |
# File 'lib/rom/mapper/attribute_dsl.rb', line 128 def (name, , &block) (name) do || mapper = [:mapper] if mapper = { type: :array }.update() attributes_from_mapper( mapper, name, .update() ) else dsl = new(, &block) .update() add_attribute( name, { header: dsl.header, type: :array }.update() ) end end end |
#exclude(name) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
86 87 88 |
# File 'lib/rom/mapper/attribute_dsl.rb', line 86 def exclude(name) attributes << [name, { exclude: true }] end |
#fold(*args, &block) ⇒ Object
Define an embedded hash attribute that requires “fold” transformation
Typically this is used in sql context to fold single joined field to the array of values.
273 274 275 276 277 278 |
# File 'lib/rom/mapper/attribute_dsl.rb', line 273 def fold(*args, &block) (*args) do |name, *| = { type: :array, fold: true } dsl(name, , &block) end end |
#group(*args, &block) ⇒ Object
Define an embedded hash attribute that requires “grouping” transformation
Typically this is used in sql context when relation is a join.
228 229 230 231 232 233 234 235 236 237 238 239 240 |
# File 'lib/rom/mapper/attribute_dsl.rb', line 228 def group(*args, &block) ensure_mapper_configuration('group', args, block_given?) (*args) do |name, , mapper| = { type: :array, group: true }.update() if mapper attributes_from_mapper(mapper, name, ) else dsl(name, , &block) end end end |
#header ⇒ Header
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Generate a header from attribute definitions
347 348 349 |
# File 'lib/rom/mapper/attribute_dsl.rb', line 347 def header Header.coerce(attributes, copy_keys: copy_keys, model: model, reject_keys: reject_keys) end |
#prefix(value = Undefined) ⇒ Object
Redefine the prefix for the following attributes
42 43 44 45 46 47 48 |
# File 'lib/rom/mapper/attribute_dsl.rb', line 42 def prefix(value = Undefined) if value.equal?(Undefined) @prefix else @prefix = value end end |
#prefix_separator(value = Undefined) ⇒ Object
Redefine the prefix separator for the following attributes
58 59 60 61 62 63 64 |
# File 'lib/rom/mapper/attribute_dsl.rb', line 58 def prefix_separator(value = Undefined) if value.equal?(Undefined) @prefix_separator else @prefix_separator = value end end |
#step(options = EMPTY_HASH, &block) ⇒ Object
Perform transformations sequentially
100 101 102 |
# File 'lib/rom/mapper/attribute_dsl.rb', line 100 def step( = EMPTY_HASH, &block) steps << new(, &block) end |
#unfold(name, options = EMPTY_HASH) ⇒ Object
Define an embedded hash attribute that requires “unfold” transformation
Typically this is used in non-sql context to convert array of values (like in Cassandra ‘SET’ or ‘LIST’ types) to array of tuples.
Source values are assigned to the first key, the other keys being left blank.
300 301 302 303 304 305 306 307 308 |
# File 'lib/rom/mapper/attribute_dsl.rb', line 300 def unfold(name, = EMPTY_HASH) (name, ) do || old_name = .fetch(:from, name) dsl(old_name, type: :array, unfold: true) do attribute name, yield if block_given? end end end |
#ungroup(*args, &block) ⇒ Object
Define an embedded array attribute that requires “ungrouping” transformation
Typically this is used in non-sql context being prepared for import to sql.
253 254 255 256 257 258 |
# File 'lib/rom/mapper/attribute_dsl.rb', line 253 def ungroup(*args, &block) (*args) do |name, , *| = { type: :array, ungroup: true }.update() dsl(name, , &block) end end |
#unwrap(*args, &block) ⇒ Object
Define an embedded hash attribute that requires “unwrapping” transformation
Typically this is used in no-sql context to normalize data before inserting to sql gateway.
199 200 201 202 203 204 205 206 207 208 209 |
# File 'lib/rom/mapper/attribute_dsl.rb', line 199 def unwrap(*args, &block) (*args) do |name, , mapper| = { type: :hash, unwrap: true }.update() if mapper attributes_from_mapper(mapper, name, ) else dsl(name, , &block) end end end |
#wrap(*args, &block) ⇒ Object
Define an embedded hash attribute that requires “wrapping” transformation
Typically this is used in sql context when relation is a join.
166 167 168 169 170 171 172 173 174 175 176 177 178 |
# File 'lib/rom/mapper/attribute_dsl.rb', line 166 def wrap(*args, &block) ensure_mapper_configuration('wrap', args, block_given?) (*args) do |name, , mapper| = { type: :hash, wrap: true }.update() if mapper attributes_from_mapper(mapper, name, ) else dsl(name, , &block) end end end |