summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFlorian Frank <flori@ping.de>2011-08-25 08:52:47 +0200
committerFlorian Frank <flori@ping.de>2011-08-25 08:52:47 +0200
commitd98acaecd9391e21e2fe1a0771ab8b93b3b4bdf1 (patch)
tree17efd9856023fc39e2ddeb31500be797886cfccb
parent9320a2a18a4d09f8e8a83129db793057968928b1 (diff)
downloadjson-d98acaecd9391e21e2fe1a0771ab8b93b3b4bdf1.tar.gz
Add (de-)serialisation methods f. Complex/Rational
-rw-r--r--lib/json/add/core.rb42
-rwxr-xr-xtests/test_json_addition.rb5
2 files changed, 45 insertions, 2 deletions
diff --git a/lib/json/add/core.rb b/lib/json/add/core.rb
index e9850af..fde53a4 100644
--- a/lib/json/add/core.rb
+++ b/lib/json/add/core.rb
@@ -5,6 +5,8 @@ unless defined?(::JSON::JSON_LOADED) and ::JSON::JSON_LOADED
require 'json'
end
require 'date'
+require 'complex'
+require 'rational'
# Symbol serialization/deserialization
class Symbol
@@ -230,8 +232,8 @@ class Regexp
def as_json(*)
{
JSON.create_id => self.class.name,
- 'o' => options,
- 's' => source,
+ 'o' => options,
+ 's' => source,
}
end
@@ -241,3 +243,39 @@ class Regexp
as_json.to_json
end
end
+
+class Rational
+ def self.json_create(object)
+ Rational(object['n'], object['d'])
+ end
+
+ def as_json(*)
+ {
+ JSON.create_id => self.class.name,
+ 'n' => numerator,
+ 'd' => denominator,
+ }
+ end
+
+ def to_json(*)
+ as_json.to_json
+ end
+end
+
+class Complex
+ def self.json_create(object)
+ Complex(object['r'], object['i'])
+ end
+
+ def as_json(*)
+ {
+ JSON.create_id => self.class.name,
+ 'r' => real,
+ 'i' => imag,
+ }
+ end
+
+ def to_json(*)
+ as_json.to_json
+ end
+end
diff --git a/tests/test_json_addition.rb b/tests/test_json_addition.rb
index a8181e8..f28f228 100755
--- a/tests/test_json_addition.rb
+++ b/tests/test_json_addition.rb
@@ -164,4 +164,9 @@ class TC_JSONAddition < Test::Unit::TestCase
d = DateTime.civil(2008, 6, 17, 11, 48, 32, Rational(12,24))
assert_equal d, JSON.parse(d.to_json)
end
+
+ def test_rational_complex
+ assert_equal Rational(2, 9), JSON(JSON(Rational(2, 9)))
+ assert_equal Complex(2, 9), JSON(JSON(Complex(2, 9)))
+ end
end