summaryrefslogtreecommitdiff
path: root/lib/json/add/rational.rb
diff options
context:
space:
mode:
authorFlorian Frank <flori@ping.de>2011-08-30 18:56:44 +0200
committerFlorian Frank <flori@ping.de>2011-08-30 18:56:44 +0200
commit0dd975a6ea54b63adc7af4d1fd40b8f9ab95cf46 (patch)
treefbf9f1bfaadb5faea0776ccb16fc3b9f5f6595f9 /lib/json/add/rational.rb
parent2149f4185c598fb97db1cabb03d3a786bdb79385 (diff)
downloadjson-0dd975a6ea54b63adc7af4d1fd40b8f9ab95cf46.tar.gz
Move rational and complex additions in own files
Also do not require Ruby's complex.rb and rational.rb if the top level constants are already defined. This means Ruby 1.9 implementations are extendend, but Ruby 1.8 implementations will require rational/complex before they are extended. Having rational and complex additions in their own files is an especially good thing, if one wants to avoid loading complex and rational under Ruby 1.8.
Diffstat (limited to 'lib/json/add/rational.rb')
-rw-r--r--lib/json/add/rational.rb22
1 files changed, 22 insertions, 0 deletions
diff --git a/lib/json/add/rational.rb b/lib/json/add/rational.rb
new file mode 100644
index 0000000..867cd92
--- /dev/null
+++ b/lib/json/add/rational.rb
@@ -0,0 +1,22 @@
+unless defined?(::JSON::JSON_LOADED) and ::JSON::JSON_LOADED
+ require 'json'
+end
+defined?(::Rational) or require 'rational'
+
+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