[flori/json] Make OpenStruct support as optional
https://github.com/flori/json/commit/202ffe2335
This commit is contained in:
parent
f3df218f48
commit
7c8f9603b1
@ -2,7 +2,10 @@
|
|||||||
unless defined?(::JSON::JSON_LOADED) and ::JSON::JSON_LOADED
|
unless defined?(::JSON::JSON_LOADED) and ::JSON::JSON_LOADED
|
||||||
require 'json'
|
require 'json'
|
||||||
end
|
end
|
||||||
require 'ostruct'
|
begin
|
||||||
|
require 'ostruct'
|
||||||
|
rescue LoadError
|
||||||
|
end
|
||||||
|
|
||||||
class OpenStruct
|
class OpenStruct
|
||||||
|
|
||||||
@ -48,4 +51,4 @@ class OpenStruct
|
|||||||
def to_json(*args)
|
def to_json(*args)
|
||||||
as_json.to_json(*args)
|
as_json.to_json(*args)
|
||||||
end
|
end
|
||||||
end
|
end if defined?(::OpenStruct)
|
||||||
|
@ -1,5 +1,8 @@
|
|||||||
#frozen_string_literal: false
|
#frozen_string_literal: false
|
||||||
require 'ostruct'
|
begin
|
||||||
|
require 'ostruct'
|
||||||
|
rescue LoadError
|
||||||
|
end
|
||||||
|
|
||||||
module JSON
|
module JSON
|
||||||
class GenericObject < OpenStruct
|
class GenericObject < OpenStruct
|
||||||
@ -67,5 +70,5 @@ module JSON
|
|||||||
def to_json(*a)
|
def to_json(*a)
|
||||||
as_json.to_json(*a)
|
as_json.to_json(*a)
|
||||||
end
|
end
|
||||||
end
|
end if defined?(::OpenStruct)
|
||||||
end
|
end
|
||||||
|
@ -190,7 +190,7 @@ class JSONAdditionTest < Test::Unit::TestCase
|
|||||||
# XXX this won't work; o.foo = { :bar => true }
|
# XXX this won't work; o.foo = { :bar => true }
|
||||||
o.foo = { 'bar' => true }
|
o.foo = { 'bar' => true }
|
||||||
assert_equal o, parse(JSON(o), :create_additions => true)
|
assert_equal o, parse(JSON(o), :create_additions => true)
|
||||||
end
|
end if defined?(::OpenStruct)
|
||||||
|
|
||||||
def test_set
|
def test_set
|
||||||
s = Set.new([:a, :b, :c, :a])
|
s = Set.new([:a, :b, :c, :a])
|
||||||
|
@ -79,4 +79,4 @@ class JSONGenericObjectTest < Test::Unit::TestCase
|
|||||||
ensure
|
ensure
|
||||||
JSON::GenericObject.json_creatable = false
|
JSON::GenericObject.json_creatable = false
|
||||||
end
|
end
|
||||||
end
|
end if defined?(JSON::GenericObject)
|
||||||
|
@ -3,7 +3,10 @@
|
|||||||
require_relative 'test_helper'
|
require_relative 'test_helper'
|
||||||
require 'stringio'
|
require 'stringio'
|
||||||
require 'tempfile'
|
require 'tempfile'
|
||||||
require 'ostruct'
|
begin
|
||||||
|
require 'ostruct'
|
||||||
|
rescue LoadError
|
||||||
|
end
|
||||||
begin
|
begin
|
||||||
require 'bigdecimal'
|
require 'bigdecimal'
|
||||||
rescue LoadError
|
rescue LoadError
|
||||||
@ -412,21 +415,6 @@ EOT
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
class SubOpenStruct < OpenStruct
|
|
||||||
def [](k)
|
|
||||||
__send__(k)
|
|
||||||
end
|
|
||||||
|
|
||||||
def []=(k, v)
|
|
||||||
@item_set = true
|
|
||||||
__send__("#{k}=", v)
|
|
||||||
end
|
|
||||||
|
|
||||||
def item_set?
|
|
||||||
@item_set
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def test_parse_object_custom_hash_derived_class
|
def test_parse_object_custom_hash_derived_class
|
||||||
res = parse('{"foo":"bar"}', :object_class => SubHash)
|
res = parse('{"foo":"bar"}', :object_class => SubHash)
|
||||||
assert_equal({"foo" => "bar"}, res)
|
assert_equal({"foo" => "bar"}, res)
|
||||||
@ -434,24 +422,41 @@ EOT
|
|||||||
assert res.item_set?
|
assert res.item_set?
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_parse_object_custom_non_hash_derived_class
|
if defined?(::OpenStruct)
|
||||||
res = parse('{"foo":"bar"}', :object_class => SubOpenStruct)
|
class SubOpenStruct < OpenStruct
|
||||||
assert_equal "bar", res.foo
|
def [](k)
|
||||||
assert_equal(SubOpenStruct, res.class)
|
__send__(k)
|
||||||
assert res.item_set?
|
end
|
||||||
end
|
|
||||||
|
|
||||||
def test_parse_generic_object
|
def []=(k, v)
|
||||||
res = parse(
|
@item_set = true
|
||||||
'{"foo":"bar", "baz":{}}',
|
__send__("#{k}=", v)
|
||||||
:object_class => JSON::GenericObject
|
end
|
||||||
)
|
|
||||||
assert_equal(JSON::GenericObject, res.class)
|
def item_set?
|
||||||
assert_equal "bar", res.foo
|
@item_set
|
||||||
assert_equal "bar", res["foo"]
|
end
|
||||||
assert_equal "bar", res[:foo]
|
end
|
||||||
assert_equal "bar", res.to_hash[:foo]
|
|
||||||
assert_equal(JSON::GenericObject, res.baz.class)
|
def test_parse_object_custom_non_hash_derived_class
|
||||||
|
res = parse('{"foo":"bar"}', :object_class => SubOpenStruct)
|
||||||
|
assert_equal "bar", res.foo
|
||||||
|
assert_equal(SubOpenStruct, res.class)
|
||||||
|
assert res.item_set?
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_parse_generic_object
|
||||||
|
res = parse(
|
||||||
|
'{"foo":"bar", "baz":{}}',
|
||||||
|
:object_class => JSON::GenericObject
|
||||||
|
)
|
||||||
|
assert_equal(JSON::GenericObject, res.class)
|
||||||
|
assert_equal "bar", res.foo
|
||||||
|
assert_equal "bar", res["foo"]
|
||||||
|
assert_equal "bar", res[:foo]
|
||||||
|
assert_equal "bar", res.to_hash[:foo]
|
||||||
|
assert_equal(JSON::GenericObject, res.baz.class)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_generate_core_subclasses_with_new_to_json
|
def test_generate_core_subclasses_with_new_to_json
|
||||||
|
Loading…
x
Reference in New Issue
Block a user