Class: Fend::Plugins::DataProcessing::Process

Inherits:
Object
  • Object
show all
Defined in:
lib/fend/plugins/data_processing.rb

Constant Summary collapse

HASH_OR_ARRAY =
->(a) { a.is_a?(Hash) || a.is_a?(Array) }.freeze
NESTED_ARRAY =
->(a) { a.is_a?(Array) && a.any? { |member| HASH_OR_ARRAY[member] } }.freeze
NESTED_HASH =
->(a) { a.is_a?(Hash)  && a.any? { |_, value| HASH_OR_ARRAY[value] } }.freeze

Class Method Summary collapse

Class Method Details

.duplicate(data, opts = {}) ⇒ Object



161
162
163
164
165
166
167
168
169
170
171
172
173
174
# File 'lib/fend/plugins/data_processing.rb', line 161

def self.duplicate(data, opts = {})
  return data unless HASH_OR_ARRAY[data]

  case data
  when NESTED_HASH
    data.each_with_object({}) { |(key, value), result| result[key] = duplicate(value) }
  when NESTED_ARRAY
    data.map(&method(:duplicate))
  when HASH_OR_ARRAY
    data.dup
  else
    data
  end
end

.frost(data) ⇒ Object



176
177
178
179
180
181
182
183
184
185
186
187
188
189
# File 'lib/fend/plugins/data_processing.rb', line 176

def self.frost(data)
  return data unless HASH_OR_ARRAY[data]

  case data
  when NESTED_HASH
    data.each_with_object({}) { |(key, value), result| result[key] = frost(value) }.freeze
  when NESTED_ARRAY
    data.map(&method(:frost)).freeze
  when HASH_OR_ARRAY
    data.dup.freeze
  else
    data
  end
end

.stringify_keys(data) ⇒ Object



153
154
155
156
157
158
159
# File 'lib/fend/plugins/data_processing.rb', line 153

def self.stringify_keys(data)
  return data unless HASH_OR_ARRAY[data]

  transformation = ->(key) { key.is_a?(Symbol) ? key.to_s : key }

  deep_transform_keys(data, transformation)
end

.symbolize_keys(data) ⇒ Object



145
146
147
148
149
150
151
# File 'lib/fend/plugins/data_processing.rb', line 145

def self.symbolize_keys(data)
  return data unless HASH_OR_ARRAY[data]

  transformation = ->(key) { key.is_a?(String) ? key.to_sym : key }

  deep_transform_keys(data, transformation)
end