diff options
author | Jeremy Kemper <jeremy@bitsweat.net> | 2010-02-05 10:16:30 -0800 |
---|---|---|
committer | Jeremy Kemper <jeremy@bitsweat.net> | 2010-02-05 10:22:45 -0800 |
commit | 63bb955a99eb46e257655c93dd64e86ebbf05651 (patch) | |
tree | 034b65b1706964e402f5c9622be27f87be2de352 /activesupport/lib | |
parent | a96bf4ab5e73fccdafb78b99e8a122cc2172b505 (diff) | |
download | rails-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')
-rw-r--r-- | activesupport/lib/active_support/json/decoding.rb | 17 |
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 |