|
2 | 2 | require_relative 'test_helper' |
3 | 3 | require 'stringio' |
4 | 4 | require 'tempfile' |
5 | | -begin |
6 | | - require 'ostruct' |
7 | | -rescue LoadError |
8 | | -end |
9 | 5 | begin |
10 | 6 | require 'bigdecimal' |
11 | 7 | rescue LoadError |
@@ -772,44 +768,33 @@ def test_parse_object_custom_hash_derived_class |
772 | 768 | assert res.item_set? |
773 | 769 | end |
774 | 770 |
|
775 | | - if defined?(::OpenStruct) |
776 | | - class SubOpenStruct < OpenStruct |
777 | | - def [](k) |
778 | | - __send__(k) |
779 | | - end |
780 | | - |
781 | | - def []=(k, v) |
782 | | - @item_set = true |
783 | | - __send__("#{k}=", v) |
784 | | - end |
| 771 | + class OpenStructLike |
| 772 | + def initialize |
| 773 | + @attrs = {} |
| 774 | + end |
785 | 775 |
|
786 | | - def item_set? |
787 | | - @item_set |
788 | | - end |
| 776 | + def [](k) |
| 777 | + @attrs[k.to_sym] |
789 | 778 | end |
790 | 779 |
|
791 | | - def test_parse_object_custom_non_hash_derived_class |
792 | | - res = parse('{"foo":"bar"}', :object_class => SubOpenStruct) |
793 | | - assert_equal "bar", res.foo |
794 | | - assert_equal "bar", res[:foo] |
795 | | - assert_equal(SubOpenStruct, res.class) |
796 | | - assert res.item_set? |
| 780 | + def []=(k, v) |
| 781 | + @attrs[k.to_sym] = v |
797 | 782 | end |
798 | 783 |
|
799 | | - def test_parse_generic_object |
800 | | - res = parse( |
801 | | - '{"foo":"bar", "baz":{}}', |
802 | | - :object_class => JSON::GenericObject |
803 | | - ) |
804 | | - assert_equal(JSON::GenericObject, res.class) |
805 | | - assert_equal "bar", res.foo |
806 | | - assert_equal "bar", res["foo"] |
807 | | - assert_equal "bar", res[:foo] |
808 | | - assert_equal "bar", res.to_hash[:foo] |
809 | | - assert_equal(JSON::GenericObject, res.baz.class) |
| 784 | + def method_missing(name, ...) |
| 785 | + @attrs.fetch(name) do |
| 786 | + super |
| 787 | + end |
810 | 788 | end |
811 | 789 | end |
812 | 790 |
|
| 791 | + def test_parse_object_custom_non_hash_derived_class |
| 792 | + res = parse('{"foo":"bar"}', :object_class => OpenStructLike) |
| 793 | + assert_equal "bar", res.foo |
| 794 | + assert_equal "bar", res[:foo] |
| 795 | + assert_equal(OpenStructLike, res.class) |
| 796 | + end |
| 797 | + |
813 | 798 | def test_generate_core_subclasses_with_default_to_json |
814 | 799 | assert_equal '{"foo":"bar"}', JSON(SubHash["foo" => "bar"]) |
815 | 800 | assert_equal '["foo"]', JSON(SubArray["foo"]) |
|
0 commit comments