2011-11-13 18:08:03 -08:00
|
|
|
require "vendor/multi_json/vendor/ok_json" unless defined?(::OkJson)
|
2011-11-10 12:21:35 -08:00
|
|
|
|
|
|
|
module MultiJson
|
|
|
|
module Engines
|
|
|
|
class OkJson
|
|
|
|
ParseError = ::OkJson::Error
|
|
|
|
|
|
|
|
def self.decode(string, options = {}) #:nodoc:
|
|
|
|
string = string.read if string.respond_to?(:read)
|
|
|
|
result = ::OkJson.decode(string)
|
|
|
|
options[:symbolize_keys] ? symbolize_keys(result) : result
|
|
|
|
end
|
|
|
|
|
|
|
|
def self.encode(object) #:nodoc:
|
|
|
|
::OkJson.valenc(stringify_keys(object))
|
|
|
|
end
|
|
|
|
|
|
|
|
def self.symbolize_keys(object) #:nodoc:
|
|
|
|
modify_keys(object) do |key|
|
|
|
|
key.is_a?(String) ? key.to_sym : key
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
def self.stringify_keys(object) #:nodoc:
|
|
|
|
modify_keys(object) do |key|
|
|
|
|
key.is_a?(Symbol) ? key.to_s : key
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
def self.modify_keys(object, &modifier) #:nodoc:
|
|
|
|
case object
|
|
|
|
when Array
|
|
|
|
object.map do |value|
|
|
|
|
modify_keys(value, &modifier)
|
|
|
|
end
|
|
|
|
when Hash
|
|
|
|
object.inject({}) do |result, (key, value)|
|
|
|
|
new_key = modifier.call(key)
|
|
|
|
new_value = modify_keys(value, &modifier)
|
|
|
|
result.merge! new_key => new_value
|
|
|
|
end
|
|
|
|
else
|
|
|
|
object
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|