From d98acaecd9391e21e2fe1a0771ab8b93b3b4bdf1 Mon Sep 17 00:00:00 2001 From: Florian Frank Date: Thu, 25 Aug 2011 08:52:47 +0200 Subject: Add (de-)serialisation methods f. Complex/Rational --- lib/json/add/core.rb | 42 ++++++++++++++++++++++++++++++++++++++++-- tests/test_json_addition.rb | 5 +++++ 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 -- cgit v1.2.1