summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorFlorian Frank <flori@ping.de>2011-11-21 19:45:11 +0100
committerFlorian Frank <flori@ping.de>2011-11-21 19:45:11 +0100
commit1f2e458686fec42a4ee3cf3b7d5ab1b6d9ee4b93 (patch)
tree61870ec7c48cdbbcca94b226c150deb83cf627cb /lib
parent4ee26ac90981bbe5d7b5114ddd5036a5cea24251 (diff)
downloadjson-1f2e458686fec42a4ee3cf3b7d5ab1b6d9ee4b93.tar.gz
Add support for OpenStruct
Diffstat (limited to 'lib')
-rw-r--r--lib/json/add/ostruct.rb31
-rw-r--r--lib/json/ext.rb6
-rw-r--r--lib/json/pure.rb6
3 files changed, 43 insertions, 0 deletions
diff --git a/lib/json/add/ostruct.rb b/lib/json/add/ostruct.rb
new file mode 100644
index 0000000..da81e10
--- /dev/null
+++ b/lib/json/add/ostruct.rb
@@ -0,0 +1,31 @@
+unless defined?(::JSON::JSON_LOADED) and ::JSON::JSON_LOADED
+ require 'json'
+end
+require 'ostruct'
+
+# OpenStruct serialization/deserialization
+class OpenStruct
+
+ # Deserializes JSON string by constructing new Struct object with values
+ # <tt>v</tt> serialized by <tt>to_json</tt>.
+ def self.json_create(object)
+ new(object['t'] || object[:t])
+ end
+
+ # Returns a hash, that will be turned into a JSON object and represent this
+ # object.
+ def as_json(*)
+ klass = self.class.name
+ klass.to_s.empty? and raise JSON::JSONError, "Only named structs are supported!"
+ {
+ JSON.create_id => klass,
+ 't' => table,
+ }
+ end
+
+ # Stores class name (OpenStruct) with this struct's values <tt>v</tt> as a
+ # JSON string.
+ def to_json(*args)
+ as_json.to_json(*args)
+ end
+end
diff --git a/lib/json/ext.rb b/lib/json/ext.rb
index 7264a85..c5f8131 100644
--- a/lib/json/ext.rb
+++ b/lib/json/ext.rb
@@ -1,3 +1,9 @@
+if ENV['SIMPLECOV_COVERAGE'].to_i == 1
+ require 'simplecov'
+ SimpleCov.start do
+ add_filter "/tests/"
+ end
+end
require 'json/common'
module JSON
diff --git a/lib/json/pure.rb b/lib/json/pure.rb
index dbac93c..b68668b 100644
--- a/lib/json/pure.rb
+++ b/lib/json/pure.rb
@@ -1,3 +1,9 @@
+if ENV['SIMPLECOV_COVERAGE'].to_i == 1
+ require 'simplecov'
+ SimpleCov.start do
+ add_filter "/tests/"
+ end
+end
require 'json/common'
require 'json/pure/parser'
require 'json/pure/generator'