summaryrefslogtreecommitdiff
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
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.
-rw-r--r--.gitignore1
-rw-r--r--lib/json/add/complex.rb22
-rw-r--r--lib/json/add/core.rb38
-rw-r--r--lib/json/add/rational.rb22
-rwxr-xr-xtests/test_json_addition.rb4
5 files changed, 48 insertions, 39 deletions
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