class Shrink::Wrap::Transformer::Symbolize

Constants

DEFAULT_DEPTH

Public Instance Methods

transform(input) click to toggle source
# File lib/shrink/wrap/transformer/symbolize.rb, line 9
def transform(input)
  symbolize(input, 0)
end

Private Instance Methods

symbolize(element, depth, symbolize_singular = false) click to toggle source

rubocop:disable Style/OptionalBooleanParameter

# File lib/shrink/wrap/transformer/symbolize.rb, line 16
def symbolize(element, depth, symbolize_singular = false)
  return element if depth > options.fetch(:depth) { DEFAULT_DEPTH }

  case element
  when Hash
    symbolize_hash(element, depth + 1)
  when Enumerable
    symbolize_enumerable(element, depth)
  else
    symbolize_singular ? to_sym(element) : element
  end
end
symbolize_enumerable(array, depth) click to toggle source

rubocop:enable Style/OptionalBooleanParameter

# File lib/shrink/wrap/transformer/symbolize.rb, line 30
def symbolize_enumerable(array, depth)
  array.map { |i| symbolize(i, depth) }
end
symbolize_hash(hash, next_depth) click to toggle source
# File lib/shrink/wrap/transformer/symbolize.rb, line 34
def symbolize_hash(hash, next_depth)
  hash.each_with_object({}) do |(key, value), memo|
    new_key = symbolize(key, next_depth, true)
    new_value = symbolize(value, next_depth, false)
    memo[new_key] = new_value
  end
end
to_sym(element) click to toggle source
# File lib/shrink/wrap/transformer/symbolize.rb, line 42
def to_sym(element)
  element.respond_to?(:to_sym) ? element.to_sym : element
end