* ext/json: Update github/flori/json from 1.4.2+ to

e22b2f2bdfe6a9b0. this fixes some bugs.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@30003 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
naruse 2010-12-01 16:26:13 +00:00
parent b60cc77902
commit 4a84c27e3e
16 changed files with 570 additions and 1695 deletions

View file

@ -11,9 +11,9 @@ module JSON
# generate and parse for their documentation.
def [](object, opts = {})
if object.respond_to? :to_str
JSON.parse(object.to_str, opts => {})
JSON.parse(object.to_str, opts)
else
JSON.generate(object, opts => {})
JSON.generate(object, opts)
end
end
@ -40,8 +40,8 @@ module JSON
else
begin
p.const_missing(c)
rescue NameError
raise ArgumentError, "can't find const #{path}"
rescue NameError => e
raise ArgumentError, "can't get const #{path}: #{e}"
end
end
end
@ -49,6 +49,7 @@ module JSON
# Set the module _generator_ to be used by JSON.
def generator=(generator) # :nodoc:
old, $VERBOSE = $VERBOSE, nil
@generator = generator
generator_methods = generator::GeneratorMethods
for const in generator_methods.constants
@ -63,20 +64,22 @@ module JSON
end
self.state = generator::State
const_set :State, self.state
const_set :SAFE_STATE_PROTOTYPE, State.new.freeze
const_set :SAFE_STATE_PROTOTYPE, State.new
const_set :FAST_STATE_PROTOTYPE, State.new(
:indent => '',
:space => '',
:object_nl => "",
:array_nl => "",
:max_nesting => false
).freeze
)
const_set :PRETTY_STATE_PROTOTYPE, State.new(
:indent => ' ',
:space => ' ',
:object_nl => "\n",
:array_nl => "\n"
).freeze
)
ensure
$VERBOSE = old
end
# Returns the JSON generator modul, that is used by JSON. This might be
@ -196,6 +199,7 @@ module JSON
# amount of sanity checks, and the pretty_generate method for some
# defaults for a pretty output.
def generate(obj, opts = nil)
state = SAFE_STATE_PROTOTYPE.dup
if opts
if opts.respond_to? :to_hash
opts = opts.to_hash
@ -204,10 +208,7 @@ module JSON
else
raise TypeError, "can't convert #{opts.class} into Hash"
end
state = SAFE_STATE_PROTOTYPE.dup
state = state.configure(opts)
else
state = SAFE_STATE_PROTOTYPE
end
state.generate(obj)
end
@ -225,6 +226,7 @@ module JSON
# *WARNING*: Be careful not to pass any Ruby data structures with circles as
# _obj_ argument, because this will cause JSON to go into an infinite loop.
def fast_generate(obj, opts = nil)
state = FAST_STATE_PROTOTYPE.dup
if opts
if opts.respond_to? :to_hash
opts = opts.to_hash
@ -233,10 +235,7 @@ module JSON
else
raise TypeError, "can't convert #{opts.class} into Hash"
end
state = FAST_STATE_PROTOTYPE.dup
state.configure(opts)
else
state = FAST_STATE_PROTOTYPE
end
state.generate(obj)
end
@ -254,6 +253,7 @@ module JSON
# The _opts_ argument can be used to configure the generator, see the
# generate method for a more detailed explanation.
def pretty_generate(obj, opts = nil)
state = PRETTY_STATE_PROTOTYPE.dup
if opts
if opts.respond_to? :to_hash
opts = opts.to_hash
@ -262,10 +262,7 @@ module JSON
else
raise TypeError, "can't convert #{opts.class} into Hash"
end
state = PRETTY_STATE_PROTOTYPE.dup
state.configure(opts)
else
state = PRETTY_STATE_PROTOTYPE
end
state.generate(obj)
end
@ -377,11 +374,11 @@ module ::Kernel
#
# The _opts_ argument is passed through to generate/parse respectively, see
# generate and parse for their documentation.
def JSON(object, opts = {})
def JSON(object, *args)
if object.respond_to? :to_str
JSON.parse(object.to_str, opts)
JSON.parse(object.to_str, args.first)
else
JSON.generate(object, opts)
JSON.generate(object, args.first)
end
end
end