diff options
author | Florian Frank <flori@ping.de> | 2012-10-02 15:57:21 +0200 |
---|---|---|
committer | Florian Frank <flori@ping.de> | 2012-10-02 15:57:21 +0200 |
commit | 7fd0a67e8645bc20b2cec4f0a21029c5e03ce9ed (patch) | |
tree | f480da1f3bfb85a3a44e27ba9a1d9a6faa23f639 | |
parent | 0d8c4b944ba49df57ffb69d81179d2ae949cd51d (diff) | |
download | json-7fd0a67e8645bc20b2cec4f0a21029c5e03ce9ed.tar.gz |
Add JSON::GenericObject.from_hashes
This method transforms hashes of hashes into GenericObject structures.
-rw-r--r-- | json.gemspec | 2 | ||||
-rw-r--r-- | json_pure.gemspec | 2 | ||||
-rw-r--r-- | lib/json/generic_object.rb | 12 | ||||
-rw-r--r-- | tests/test_json_generic_object.rb | 7 |
4 files changed, 21 insertions, 2 deletions
diff --git a/json.gemspec b/json.gemspec index 39addce..6870652 100644 --- a/json.gemspec +++ b/json.gemspec @@ -6,7 +6,7 @@ Gem::Specification.new do |s| s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version= s.authors = ["Florian Frank"] - s.date = "2012-08-17" + s.date = "2012-10-02" s.description = "This is a JSON implementation as a Ruby extension in C." s.email = "flori@ping.de" s.extensions = ["ext/json/ext/generator/extconf.rb", "ext/json/ext/parser/extconf.rb"] diff --git a/json_pure.gemspec b/json_pure.gemspec index 33b0231..715c8ac 100644 --- a/json_pure.gemspec +++ b/json_pure.gemspec @@ -6,7 +6,7 @@ Gem::Specification.new do |s| s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version= s.authors = ["Florian Frank"] - s.date = "2012-08-17" + s.date = "2012-10-02" s.description = "This is a JSON implementation in pure Ruby." s.email = "flori@ping.de" s.extra_rdoc_files = ["README.rdoc"] diff --git a/lib/json/generic_object.rb b/lib/json/generic_object.rb index 7f3dbbd..636ea33 100644 --- a/lib/json/generic_object.rb +++ b/lib/json/generic_object.rb @@ -10,6 +10,18 @@ module JSON data.delete JSON.create_id 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 + end + end + result + end end def to_hash diff --git a/tests/test_json_generic_object.rb b/tests/test_json_generic_object.rb index e13a492..abeb8df 100644 --- a/tests/test_json_generic_object.rb +++ b/tests/test_json_generic_object.rb @@ -32,4 +32,11 @@ class TestJSONGenericObject < Test::Unit::TestCase l = JSON('{ "a": { "b": 2 } }', :object_class => GenericObject) assert_equal 2, l.a.b end + + def test_from_hashes + result = GenericObject.from_hashes(:foo => { :bar => { :baz => true } }) + assert_kind_of GenericObject, result.foo + assert_kind_of GenericObject, result.foo.bar + assert_equal true, result.foo.bar.baz + end end |