diff options
Diffstat (limited to 'activesupport/lib/active_support/core_ext/object/json.rb')
-rw-r--r-- | activesupport/lib/active_support/core_ext/object/json.rb | 47 |
1 files changed, 6 insertions, 41 deletions
diff --git a/activesupport/lib/active_support/core_ext/object/json.rb b/activesupport/lib/active_support/core_ext/object/json.rb index 1a1fa1eedd..8e08cfbf26 100644 --- a/activesupport/lib/active_support/core_ext/object/json.rb +++ b/activesupport/lib/active_support/core_ext/object/json.rb @@ -16,12 +16,12 @@ require 'active_support/core_ext/module/aliasing' # otherwise they will always use to_json gem implementation, which is backwards incompatible in # several cases (for instance, the JSON implementation for Hash does not work) with inheritance # and consequently classes as ActiveSupport::OrderedHash cannot be serialized to json. -# +# # On the other hand, we should avoid conflict with ::JSON.{generate,dump}(obj). Unfortunately, the # JSON gem's encoder relies on its own to_json implementation to encode objects. Since it always # passes a ::JSON::State object as the only argument to to_json, we can detect that and forward the # calls to the original to_json method. -# +# # It should be noted that when using ::JSON.{generate,dump} directly, ActiveSupport's encoder is # bypassed completely. This means that as_json won't be invoked and the JSON gem will simply # ignore any options it does not natively understand. This also means that ::JSON.{generate,dump} @@ -62,40 +62,24 @@ class TrueClass def as_json(options = nil) #:nodoc: self end - - def encode_json(encoder) #:nodoc: - to_s - end end class FalseClass def as_json(options = nil) #:nodoc: self end - - def encode_json(encoder) #:nodoc: - to_s - end end class NilClass def as_json(options = nil) #:nodoc: self end - - def encode_json(encoder) #:nodoc: - 'null' - end end class String def as_json(options = nil) #:nodoc: self end - - def encode_json(encoder) #:nodoc: - encoder.escape(self) - end end class Symbol @@ -108,10 +92,6 @@ class Numeric def as_json(options = nil) #:nodoc: self end - - def encode_json(encoder) #:nodoc: - to_s - end end class Float @@ -132,15 +112,8 @@ class BigDecimal # if the other end knows by contract that the data is supposed to be a # BigDecimal, it still has the chance to post-process the string and get the # real value. - # - # Use <tt>ActiveSupport.use_standard_json_big_decimal_format = true</tt> to - # override this behavior. def as_json(options = nil) #:nodoc: - if finite? - ActiveSupport.encode_big_decimal_as_string ? to_s : self - else - nil - end + finite? ? to_s : nil end end @@ -166,10 +139,6 @@ class Array def as_json(options = nil) #:nodoc: map { |v| options ? v.as_json(options.dup) : v.as_json } end - - def encode_json(encoder) #:nodoc: - "[#{map { |v| v.as_json.encode_json(encoder) } * ','}]" - end end class Hash @@ -189,16 +158,12 @@ class Hash Hash[subset.map { |k, v| [k.to_s, options ? v.as_json(options.dup) : v.as_json] }] end - - def encode_json(encoder) #:nodoc: - "{#{map { |k,v| "#{k.as_json.encode_json(encoder)}:#{v.as_json.encode_json(encoder)}" } * ','}}" - end end class Time def as_json(options = nil) #:nodoc: if ActiveSupport.use_standard_json_time_format - xmlschema(3) + xmlschema(ActiveSupport::JSON::Encoding.time_precision) else %(#{strftime("%Y/%m/%d %H:%M:%S")} #{formatted_offset(false)}) end @@ -218,14 +183,14 @@ end class DateTime def as_json(options = nil) #:nodoc: if ActiveSupport.use_standard_json_time_format - xmlschema(3) + xmlschema(ActiveSupport::JSON::Encoding.time_precision) else strftime('%Y/%m/%d %H:%M:%S %z') end end end -class Process::Status +class Process::Status #:nodoc: def as_json(options = nil) { :exitstatus => exitstatus, :pid => pid } end |