Module: Dry::Transformer::ArrayTransformations
- Extended by:
- Registry
- Defined in:
- lib/dry/transformer/array_transformations.rb,
lib/dry/transformer/array_transformations/combine.rb
Overview
Transformation functions for Array objects
Defined Under Namespace
Classes: Combine
Class Method Summary collapse
-
.add_keys(array, keys) ⇒ Array
Adds missing keys with nil value to all tuples in array.
- .combine(array, mappings) ⇒ Object
-
.extract_key(array, key) ⇒ Array
Converts the array of hashes to array of values, extracted by given key.
-
.group(array, key, keys) ⇒ Array
Group array values using provided root key and value keys.
-
.insert_key(array, key) ⇒ Array
Wraps every value of the array to tuple with given key.
-
.map_array(array, fn) ⇒ Array
Map array values using transformation function.
-
.ungroup(array, key, keys) ⇒ Array
Ungroup array values using provided root key and value keys.
-
.wrap(array, key, keys) ⇒ Array
Wrap array values using HashTransformations.nest function.
Methods included from Registry
[], contain?, fetch, import, register, store
Class Method Details
.add_keys(array, keys) ⇒ Array
Adds missing keys with nil value to all tuples in array
173 174 175 176 |
# File 'lib/dry/transformer/array_transformations.rb', line 173 def self.add_keys(array, keys) base = keys.inject({}) { |a, e| a.merge(e => nil) } map_array(array, ->(v) { base.merge(v) }) end |
.combine(array, mappings) ⇒ Object
121 122 123 |
# File 'lib/dry/transformer/array_transformations.rb', line 121 def self.combine(array, mappings) Combine.combine(array, mappings) end |
.extract_key(array, key) ⇒ Array
Converts the array of hashes to array of values, extracted by given key
142 143 144 |
# File 'lib/dry/transformer/array_transformations.rb', line 142 def self.extract_key(array, key) map_array(array, ->(v) { v[key] }) end |
.group(array, key, keys) ⇒ Array
Group array values using provided root key and value keys
82 83 84 85 86 87 88 89 90 91 92 93 94 95 |
# File 'lib/dry/transformer/array_transformations.rb', line 82 def self.group(array, key, keys) grouped = Hash.new { |h, k| h[k] = [] } array.each do |hash| hash = Hash[hash] old_group = Coercions.to_tuples(hash.delete(key)) new_group = keys.inject({}) { |a, e| a.merge(e => hash.delete(e)) } grouped[hash] << old_group.map { |item| item.merge(new_group) } end grouped.map do |root, children| root.merge(key => children.flatten) end end |
.insert_key(array, key) ⇒ Array
Wraps every value of the array to tuple with given key
The transformation partially inverses the ‘extract_key`.
161 162 163 |
# File 'lib/dry/transformer/array_transformations.rb', line 161 def self.insert_key(array, key) map_array(array, ->(v) { {key => v} }) end |
.map_array(array, fn) ⇒ Array
Map array values using transformation function
40 41 42 |
# File 'lib/dry/transformer/array_transformations.rb', line 40 def self.map_array(array, fn) Array(array).map { |value| fn[value] } end |
.ungroup(array, key, keys) ⇒ Array
Ungroup array values using provided root key and value keys
117 118 119 |
# File 'lib/dry/transformer/array_transformations.rb', line 117 def self.ungroup(array, key, keys) array.flat_map { |item| HashTransformations.split(item, key, keys) } end |
.wrap(array, key, keys) ⇒ Array
Wrap array values using HashTransformations.nest function
59 60 61 62 |
# File 'lib/dry/transformer/array_transformations.rb', line 59 def self.wrap(array, key, keys) nest = HashTransformations[:nest, key, keys] array.map { |element| nest.call(element) } end |