diff options
Diffstat (limited to 'ext/json/lib/json/add')
-rw-r--r-- | ext/json/lib/json/add/core.rb | 42 |
1 files changed, 40 insertions, 2 deletions
diff --git a/ext/json/lib/json/add/core.rb b/ext/json/lib/json/add/core.rb index e9850af8f6..fde53a4d01 100644 --- a/ext/json/lib/json/add/core.rb +++ b/ext/json/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 |