module MultiJson::ConvertibleHashKeys

def convert_hash_keys(value, &key_modifier)

Returns:
  • (Object) - converted value

Other tags:
    Yield: - block to transform each key

Parameters:
  • value (Object) -- value to convert

Other tags:
    Api: - private
def convert_hash_keys(value, &key_modifier)
  case value
  when Hash
    value.to_h { |k, v| [key_modifier.call(k), convert_hash_keys(v, &key_modifier)] }
  when Array
    value.map { |v| convert_hash_keys(v, &key_modifier) }
  else
    convert_simple_object(value)
  end
end

def convert_simple_object(obj)

Returns:
  • (Object) - converted object

Parameters:
  • obj (Object) -- object to convert

Other tags:
    Api: - private
def convert_simple_object(obj)
  return obj if simple_object?(obj) || obj.respond_to?(:to_json)
  obj.respond_to?(:to_s) ? obj.to_s : obj
end

def simple_object?(obj)

Returns:
  • (Boolean) - true if object is a simple type

Parameters:
  • obj (Object) -- object to check

Other tags:
    Api: - private
def simple_object?(obj)
  SIMPLE_OBJECT_CLASSES.any? { |klass| obj.is_a?(klass) }
end

def stringify_keys(value)

Returns:
  • (Object) - value with stringified keys

Parameters:
  • value (Object) -- value to convert

Other tags:
    Api: - private
def stringify_keys(value)
  convert_hash_keys(value) { |key| key.respond_to?(:to_s) ? key.to_s : key }
end

def symbolize_keys(value)

Returns:
  • (Object) - value with symbolized keys

Parameters:
  • value (Object) -- value to convert

Other tags:
    Api: - private
def symbolize_keys(value)
  convert_hash_keys(value) { |key| key.respond_to?(:to_sym) ? key.to_sym : key }
end