diff options
author | rick <technoweenie@gmail.com> | 2009-05-17 19:16:11 -0700 |
---|---|---|
committer | rick <technoweenie@gmail.com> | 2009-05-17 19:18:00 -0700 |
commit | e89241c92fbcf68b59d9efb50c21c5040e9f3156 (patch) | |
tree | 163f0fb1b9d048e7610bec789bf08eb0ada40c95 | |
parent | b0de061e7b8d3c291a328f6b0b9bfc5f48b2f907 (diff) | |
download | rails-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.rb | 11 | ||||
-rw-r--r-- | activesupport/lib/active_support/json/backends/jsongem.rb | 4 | ||||
-rw-r--r-- | activesupport/lib/active_support/json/backends/yaml.rb | 4 | ||||
-rw-r--r-- | activesupport/test/json/decoding_test.rb | 3 |
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' |