From 0dd975a6ea54b63adc7af4d1fd40b8f9ab95cf46 Mon Sep 17 00:00:00 2001 From: Florian Frank Date: Tue, 30 Aug 2011 18:56:44 +0200 Subject: 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. --- .gitignore | 1 + lib/json/add/complex.rb | 22 ++++++++++++++++++++++ lib/json/add/core.rb | 38 -------------------------------------- lib/json/add/rational.rb | 22 ++++++++++++++++++++++ tests/test_json_addition.rb | 4 +++- 5 files changed, 48 insertions(+), 39 deletions(-) create mode 100644 lib/json/add/complex.rb create mode 100644 lib/json/add/rational.rb diff --git a/.gitignore b/.gitignore index 7557261..726ffce 100644 --- a/.gitignore +++ b/.gitignore @@ -5,3 +5,4 @@ pkg .idea java/Json.iml Gemfile.lock +.rvmrc diff --git a/lib/json/add/complex.rb b/lib/json/add/complex.rb new file mode 100644 index 0000000..d7ebebf --- /dev/null +++ b/lib/json/add/complex.rb @@ -0,0 +1,22 @@ +unless defined?(::JSON::JSON_LOADED) and ::JSON::JSON_LOADED + require 'json' +end +defined?(::Complex) or require 'complex' + +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/lib/json/add/core.rb b/lib/json/add/core.rb index fde53a4..1ae00d0 100644 --- a/lib/json/add/core.rb +++ b/lib/json/add/core.rb @@ -5,8 +5,6 @@ unless defined?(::JSON::JSON_LOADED) and ::JSON::JSON_LOADED require 'json' end require 'date' -require 'complex' -require 'rational' # Symbol serialization/deserialization class Symbol @@ -243,39 +241,3 @@ 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/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 diff --git a/tests/test_json_addition.rb b/tests/test_json_addition.rb index f28f228..9f578a4 100755 --- a/tests/test_json_addition.rb +++ b/tests/test_json_addition.rb @@ -3,7 +3,9 @@ require 'test/unit' require File.join(File.dirname(__FILE__), 'setup_variant') -load 'json/add/core.rb' +require 'json/add/core' +require 'json/add/complex' +require 'json/add/rational' require 'date' class TC_JSONAddition < Test::Unit::TestCase -- cgit v1.2.1