module MultiJson::ConvertibleHashKeys

Private Instance Methods

prepare_object(object, &key_modifier) click to toggle source
# File lib/multi_json/convertible_hash_keys.rb, line 17
def prepare_object(object, &key_modifier)
  return object unless block_given?
  case object
  when Array
    object.map do |value|
      prepare_object(value, &key_modifier)
    end
  when Hash
    object.inject({}) do |result, (key, value)|
      new_key   = key_modifier.call(key)
      new_value = prepare_object(value, &key_modifier)
      result.merge! new_key => new_value
    end
  when String, Numeric, true, false, nil
    object
  else
    if object.respond_to?(:to_json)
      object
    elsif object.respond_to?(:to_s)
      object.to_s
    else
      object
    end
  end
end
stringify_keys(object) click to toggle source
# File lib/multi_json/convertible_hash_keys.rb, line 11
def stringify_keys(object)
  prepare_object(object) do |key|
    key.respond_to?(:to_s) ? key.to_s : key
  end
end
symbolize_keys(object) click to toggle source
# File lib/multi_json/convertible_hash_keys.rb, line 5
def symbolize_keys(object)
  prepare_object(object) do |key|
    key.respond_to?(:to_sym) ? key.to_sym : key
  end
end