aboutsummaryrefslogtreecommitdiffstats
path: root/activesupport/lib/active_support/json
diff options
context:
space:
mode:
authorJeremy Kemper <jeremy@bitsweat.net>2010-02-05 10:16:30 -0800
committerJeremy Kemper <jeremy@bitsweat.net>2010-02-05 10:22:45 -0800
commit63bb955a99eb46e257655c93dd64e86ebbf05651 (patch)
tree034b65b1706964e402f5c9622be27f87be2de352 /activesupport/lib/active_support/json
parenta96bf4ab5e73fccdafb78b99e8a122cc2172b505 (diff)
downloadrails-63bb955a99eb46e257655c93dd64e86ebbf05651.tar.gz
rails-63bb955a99eb46e257655c93dd64e86ebbf05651.tar.bz2
rails-63bb955a99eb46e257655c93dd64e86ebbf05651.zip
Automatically prefer Yajl or JSON backend over Yaml, if available
Diffstat (limited to 'activesupport/lib/active_support/json')
-rw-r--r--activesupport/lib/active_support/json/decoding.rb17
1 files changed, 16 insertions, 1 deletions
diff --git a/activesupport/lib/active_support/json/decoding.rb b/activesupport/lib/active_support/json/decoding.rb
index a5908365af..e357b6837a 100644
--- a/activesupport/lib/active_support/json/decoding.rb
+++ b/activesupport/lib/active_support/json/decoding.rb
@@ -6,12 +6,15 @@ module ActiveSupport
mattr_accessor :parse_json_times
module JSON
+ # Listed in order of preference.
+ DECODERS = %w(Yajl JSONGem Yaml)
+
class << self
attr_reader :parse_error
delegate :decode, :to => :backend
def backend
- self.backend = "Yaml" unless defined?(@backend)
+ set_default_backend unless defined?(@backend)
@backend
end
@@ -31,6 +34,18 @@ module ActiveSupport
ensure
self.backend = old_backend
end
+
+ def set_default_backend
+ DECODERS.find do |name|
+ begin
+ self.backend = name
+ true
+ rescue LoadError
+ # Try next decoder.
+ false
+ end
+ end
+ end
end
end
end