From 01a5165bee5c8cf199e37b3ccc90f1f824d41783 Mon Sep 17 00:00:00 2001 From: Florian Frank Date: Tue, 2 Oct 2012 16:27:29 +0200 Subject: Renamed method and handle arrays --- lib/json/generic_object.rb | 19 +++++++++++-------- tests/test_json_generic_object.rb | 8 ++++++-- 2 files changed, 17 insertions(+), 10 deletions(-) diff --git a/lib/json/generic_object.rb b/lib/json/generic_object.rb index 636ea33..cd93e1a 100644 --- a/lib/json/generic_object.rb +++ b/lib/json/generic_object.rb @@ -11,16 +11,19 @@ module JSON self[data] end - def from_hashes(hash) - result = new - hash.to_hash.each do |key, value| - if value.respond_to?(:to_hash) - result[key] = from_hashes(value) - else - result[key] = value + def from_hash(object) + case + when object.respond_to?(:to_hash) + result = new + object.to_hash.each do |key, value| + result[key] = from_hash(value) end + result + when object.respond_to?(:to_ary) + object.to_ary.map { |a| from_hash(a) } + else + object end - result end end diff --git a/tests/test_json_generic_object.rb b/tests/test_json_generic_object.rb index abeb8df..1cec795 100644 --- a/tests/test_json_generic_object.rb +++ b/tests/test_json_generic_object.rb @@ -33,10 +33,14 @@ class TestJSONGenericObject < Test::Unit::TestCase assert_equal 2, l.a.b end - def test_from_hashes - result = GenericObject.from_hashes(:foo => { :bar => { :baz => true } }) + def test_from_hash + result = GenericObject.from_hash( + :foo => { :bar => { :baz => true }, :quux => [ { :foobar => true } ] }) assert_kind_of GenericObject, result.foo assert_kind_of GenericObject, result.foo.bar assert_equal true, result.foo.bar.baz + assert_kind_of GenericObject, result.foo.quux.first + assert_equal true, result.foo.quux.first.foobar + assert_equal true, GenericObject.from_hash(true) end end -- cgit v1.2.1