Use OkJson directly

This commit is contained in:
Jack Nagel 2013-06-22 16:51:09 -05:00
parent d8aab8cb04
commit d6929f96a5
4 changed files with 21 additions and 16 deletions

View File

@ -15,10 +15,6 @@ class Option
end
alias_method :to_str, :to_s
def to_json
flag.inspect
end
def <=>(other)
name <=> other.name
end

View File

@ -91,8 +91,8 @@ class Tab < OpenStruct
def to_json
Utils::JSON.dump({
:used_options => used_options.to_a,
:unused_options => unused_options.to_a,
:used_options => used_options.map(&:to_s),
:unused_options => unused_options.map(&:to_s),
:built_as_bottle => built_as_bottle,
:poured_from_bottle => poured_from_bottle,
:tapped_from => tapped_from,

View File

@ -14,10 +14,6 @@ class OptionTests < Test::Unit::TestCase
assert_equal "--foo", @option.to_str
end
def test_to_json
assert_equal %q{"--foo"}, @option.to_json
end
def test_equality
foo = Option.new("foo")
bar = Option.new("bar")

View File

@ -1,4 +1,4 @@
require 'vendor/multi_json'
require 'vendor/okjson'
module Utils
module JSON
@ -7,15 +7,28 @@ module Utils
Error = Class.new(StandardError)
def load(str)
MultiJson.load(str)
rescue MultiJson::DecodeError => e
Vendor::OkJson.decode(str)
rescue Vendor::OkJson::Error => e
raise Error, e.message
end
def dump(obj)
MultiJson.dump(obj)
rescue MultiJson::EncodeError => e
raise Error, e.message
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)
result.merge!(key => val)
end
else
obj
end
end
end
end