mirror of
https://github.com/github/rails.git
synced 2026-04-26 03:00:59 -04:00
Add yajl-ruby as a JSON parsing backend
[#2666 state:committed] Signed-off-by: Jeremy Kemper <jeremy@bitsweat.net>
This commit is contained in:
committed by
Jeremy Kemper
parent
c548e21365
commit
a96bf4ab5e
@@ -1,5 +1,10 @@
|
||||
*Rails 3.0 (pending)*
|
||||
|
||||
* JSON backend for YAJL. #2666 [Brian Lopez]
|
||||
|
||||
|
||||
*Rails 3.0.0 [beta] (February 4, 2010)*
|
||||
|
||||
* Introduce class_attribute to declare inheritable class attributes. Writing an attribute on a subclass behaves just like overriding the superclass reader method. Unifies and replaces most usage of cattr_accessor, class_inheritable_attribute, superclass_delegating_attribute, and extlib_inheritable_attribute. [Jeremy Kemper, Yehuda Katz]
|
||||
|
||||
* Time#- with a DateTime argument behaves the same as with a Time argument, i.e. returns the difference between self and arg as a Float #3476 [Geoff Buesing]
|
||||
|
||||
40
activesupport/lib/active_support/json/backends/yajl.rb
Normal file
40
activesupport/lib/active_support/json/backends/yajl.rb
Normal file
@@ -0,0 +1,40 @@
|
||||
require 'yajl-ruby' unless defined?(Yajl)
|
||||
|
||||
module ActiveSupport
|
||||
module JSON
|
||||
module Backends
|
||||
module Yajl
|
||||
ParseError = ::Yajl::ParseError
|
||||
extend self
|
||||
|
||||
# Parses a JSON string or IO and convert it into an object
|
||||
def decode(json)
|
||||
data = ::Yajl::Parser.new.parse(json)
|
||||
if ActiveSupport.parse_json_times
|
||||
convert_dates_from(data)
|
||||
else
|
||||
data
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
def convert_dates_from(data)
|
||||
case data
|
||||
when nil
|
||||
nil
|
||||
when DATE_REGEX
|
||||
DateTime.parse(data)
|
||||
when Array
|
||||
data.map! { |d| convert_dates_from(d) }
|
||||
when Hash
|
||||
data.each do |key, value|
|
||||
data[key] = convert_dates_from(value)
|
||||
end
|
||||
else
|
||||
data
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -49,6 +49,7 @@ class TestJSONDecoding < ActiveSupport::TestCase
|
||||
|
||||
backends = %w(Yaml)
|
||||
backends << "JSONGem" if defined?(::JSON)
|
||||
backends << "Yajl" if defined?(::Yajl)
|
||||
|
||||
backends.each do |backend|
|
||||
TESTS.each do |json, expected|
|
||||
|
||||
Reference in New Issue
Block a user