summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFlorian Frank <flori@ping.de>2010-08-05 03:10:21 +0200
committerFlorian Frank <flori@ping.de>2010-08-05 03:10:21 +0200
commit646cc01a6677905fe0ef7fb35aff7bca4fd68123 (patch)
tree719aba3257f09dcf3c9ccddb71ea04e8199aa856
parentf0a14faf1d59a5ea86a79d3a5780e8433bfc9e16 (diff)
downloadjson-646cc01a6677905fe0ef7fb35aff7bca4fd68123.tar.gz
Revert "use method dispatch for generation again"
This reverts commit f0a14faf1d59a5ea86a79d3a5780e8433bfc9e16.
-rw-r--r--ext/json/ext/generator/generator.c2
-rwxr-xr-xtests/test_json.rb36
2 files changed, 8 insertions, 30 deletions
diff --git a/ext/json/ext/generator/generator.c b/ext/json/ext/generator/generator.c
index 3786b65..7658acd 100644
--- a/ext/json/ext/generator/generator.c
+++ b/ext/json/ext/generator/generator.c
@@ -453,7 +453,7 @@ static VALUE mHash_to_json(int argc, VALUE *argv, VALUE self)
rb_raise(eNestingError, "nesting of %ld is too deep", depth);
}
fbuffer_append_char(buffer, '{');
- keys = rb_funcall(self, i_keys, 0);
+ keys = rb_funcall(self, rb_intern("keys"), 0);
for(i = 0; i < RARRAY_LEN(keys); i++) {
if (i > 0) fbuffer_append(buffer, delim, delim_len);
if (object_nl) {
diff --git a/tests/test_json.rb b/tests/test_json.rb
index a88049a..19b742f 100755
--- a/tests/test_json.rb
+++ b/tests/test_json.rb
@@ -160,20 +160,6 @@ class TC_JSON < Test::Unit::TestCase
class SubArray < Array; end
- class SubArray2 < Array
- def to_json(*a)
- {
- JSON.create_id => self.class.name,
- 'ary' => to_a,
- }.to_json(*a)
- end
-
- def self.json_create(o)
- o.delete JSON.create_id
- o['ary']
- end
- end
-
def test_parse_array_custom_class
res = parse('[]', :array_class => SubArray)
assert_equal([], res)
@@ -187,9 +173,7 @@ class TC_JSON < Test::Unit::TestCase
assert_equal({'foo'=>'bar'}, parse(' { "foo" : "bar" } '))
end
- class SubHash < Hash; end
-
- class SubHash2 < Hash
+ class SubHash < Hash
def to_json(*a)
{
JSON.create_id => self.class.name,
@@ -203,25 +187,19 @@ class TC_JSON < Test::Unit::TestCase
end
def test_parse_object_custom_class
- res = parse('{}', :object_class => SubHash2)
+ res = parse('{}', :object_class => SubHash)
assert_equal({}, res)
- assert_equal(SubHash2, res.class)
+ assert_equal(SubHash, res.class)
end
- def test_generation_of_core_subclasses_with_new_to_json
- obj = SubHash2.new.merge( "foo" => SubHash2.new.merge("bar" => true))
+ def test_generation_of_core_subclasses
+ obj = SubHash.new.merge( "foo" => SubHash.new.merge("bar" => true))
obj_json = JSON(obj)
obj_again = JSON(obj_json)
- assert_kind_of SubHash2, obj_again
- assert_kind_of SubHash2, obj_again['foo']
+ assert_kind_of SubHash, obj_again
+ assert_kind_of SubHash, obj_again['foo']
assert obj_again['foo']['bar']
assert_equal obj, obj_again
- assert_equal ["foo"], JSON(JSON(SubArray2["foo"]))
- end
-
- def test_generation_of_core_subclasses_with_default_to_json
- assert_equal '{"foo":"bar"}', JSON(SubHash["foo" => "bar"])
- assert_equal '["foo"]', JSON(SubArray["foo"])
end
def test_parser_reset