2015-08-03 13:09:07 +01:00
|
|
|
require "vendor/okjson"
|
2013-06-22 16:51:08 -05:00
|
|
|
|
|
|
|
module Utils
|
|
|
|
module JSON
|
2016-09-23 17:36:27 +02:00
|
|
|
module_function
|
2013-06-22 16:51:08 -05:00
|
|
|
|
|
|
|
Error = Class.new(StandardError)
|
|
|
|
|
|
|
|
def load(str)
|
2013-06-22 16:51:09 -05:00
|
|
|
Vendor::OkJson.decode(str)
|
|
|
|
rescue Vendor::OkJson::Error => e
|
2013-06-22 16:51:08 -05:00
|
|
|
raise Error, e.message
|
|
|
|
end
|
|
|
|
|
|
|
|
def dump(obj)
|
2013-06-22 16:51:09 -05:00
|
|
|
Vendor::OkJson.encode(stringify_keys(obj))
|
|
|
|
end
|
|
|
|
|
|
|
|
def stringify_keys(obj)
|
|
|
|
case obj
|
|
|
|
when Array
|
|
|
|
obj.map { |val| stringify_keys(val) }
|
|
|
|
when Hash
|
|
|
|
obj.inject({}) do |result, (key, val)|
|
|
|
|
key = key.respond_to?(:to_s) ? key.to_s : key
|
|
|
|
val = stringify_keys(val)
|
2015-12-26 23:00:38 +01:00
|
|
|
result.merge!(key => val)
|
2013-06-22 16:51:09 -05:00
|
|
|
end
|
|
|
|
else
|
|
|
|
obj
|
|
|
|
end
|
2013-06-22 16:51:08 -05:00
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|