summaryrefslogtreecommitdiff
path: root/lib/json
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 /lib/json
parent9320a2a18a4d09f8e8a83129db793057968928b1 (diff)
downloadjson-d98acaecd9391e21e2fe1a0771ab8b93b3b4bdf1.tar.gz
Add (de-)serialisation methods f. Complex/Rational
Diffstat (limited to 'lib/json')
-rw-r--r--lib/json/add/core.rb42
1 files changed, 40 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