summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFlorian Frank <flori@ping.de>2012-10-02 15:57:21 +0200
committerFlorian Frank <flori@ping.de>2012-10-02 15:57:21 +0200
commit7fd0a67e8645bc20b2cec4f0a21029c5e03ce9ed (patch)
treef480da1f3bfb85a3a44e27ba9a1d9a6faa23f639
parent0d8c4b944ba49df57ffb69d81179d2ae949cd51d (diff)
downloadjson-7fd0a67e8645bc20b2cec4f0a21029c5e03ce9ed.tar.gz
Add JSON::GenericObject.from_hashes
This method transforms hashes of hashes into GenericObject structures.
-rw-r--r--json.gemspec2
-rw-r--r--json_pure.gemspec2
-rw-r--r--lib/json/generic_object.rb12
-rw-r--r--tests/test_json_generic_object.rb7
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