aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorrick <technoweenie@gmail.com>2009-05-17 19:16:11 -0700
committerrick <technoweenie@gmail.com>2009-05-17 19:18:00 -0700
commite89241c92fbcf68b59d9efb50c21c5040e9f3156 (patch)
tree163f0fb1b9d048e7610bec789bf08eb0ada40c95
parentb0de061e7b8d3c291a328f6b0b9bfc5f48b2f907 (diff)
downloadrails-e89241c92fbcf68b59d9efb50c21c5040e9f3156.tar.gz
rails-e89241c92fbcf68b59d9efb50c21c5040e9f3156.tar.bz2
rails-e89241c92fbcf68b59d9efb50c21c5040e9f3156.zip
load the JSON Backend lazily. If the JSON gem is already loaded, use the JSONGem backend by default.
-rw-r--r--activesupport/lib/active_support/json.rb11
-rw-r--r--activesupport/lib/active_support/json/backends/jsongem.rb4
-rw-r--r--activesupport/lib/active_support/json/backends/yaml.rb4
-rw-r--r--activesupport/test/json/decoding_test.rb3
4 files changed, 17 insertions, 5 deletions
diff --git a/activesupport/lib/active_support/json.rb b/activesupport/lib/active_support/json.rb
index 5072992cdf..1e8ded12da 100644
--- a/activesupport/lib/active_support/json.rb
+++ b/activesupport/lib/active_support/json.rb
@@ -40,9 +40,15 @@ module ActiveSupport
end
class << self
- attr_reader :backend
delegate :decode, :to => :backend
-
+
+ def backend
+ @backend || begin
+ self.backend = defined?(::JSON) ? "JSONGem" : "Yaml"
+ @backend
+ end
+ end
+
def backend=(name)
if name.is_a?(Module)
@backend = name
@@ -77,6 +83,5 @@ module ActiveSupport
end
ActiveSupport.escape_html_entities_in_json = true
-ActiveSupport::JSON.backend = 'Yaml'
require 'active_support/json/encoding'
diff --git a/activesupport/lib/active_support/json/backends/jsongem.rb b/activesupport/lib/active_support/json/backends/jsongem.rb
index d1a1cdd7d7..649e6301d1 100644
--- a/activesupport/lib/active_support/json/backends/jsongem.rb
+++ b/activesupport/lib/active_support/json/backends/jsongem.rb
@@ -1,6 +1,8 @@
+require 'json' unless defined?(JSON)
+
module ActiveSupport
module JSON
- ParseError = ::JSON::ParserError
+ ParseError = ::JSON::ParserError unless const_defined?(:ParseError)
module Backends
module JSONGem
diff --git a/activesupport/lib/active_support/json/backends/yaml.rb b/activesupport/lib/active_support/json/backends/yaml.rb
index 1c18fc4801..667016f45d 100644
--- a/activesupport/lib/active_support/json/backends/yaml.rb
+++ b/activesupport/lib/active_support/json/backends/yaml.rb
@@ -2,7 +2,9 @@ require 'active_support/core_ext/string/starts_ends_with'
module ActiveSupport
module JSON
- class ParseError < StandardError
+ unless const_defined?(:ParseError)
+ class ParseError < StandardError
+ end
end
module Backends
diff --git a/activesupport/test/json/decoding_test.rb b/activesupport/test/json/decoding_test.rb
index 7e1bfcca84..09fd0d09ba 100644
--- a/activesupport/test/json/decoding_test.rb
+++ b/activesupport/test/json/decoding_test.rb
@@ -36,6 +36,9 @@ class TestJSONDecoding < ActiveSupport::TestCase
%q({"b":["\u003ci\u003e","\u003cb\u003e","\u003cu\u003e"]}) => {'b' => ["<i>","<b>","<u>"]}
}
+ # load the default JSON backend
+ ActiveSupport::JSON.backend
+
backends = %w(Yaml)
begin
gem 'json', '>= 1.1'