Skip to content
Browse files

Merge pull request #6546 from erichmenge/patch-as-json

True, False, and Nil should be represented in as_json as themselves.
  • Loading branch information...
2 parents 669694f + 1e335ad commit 70bc0d7a4f60ee9c5ca7538eb55b4dae96d7a985 @jeremy jeremy committed
Showing with 15 additions and 9 deletions.
  1. +9 −9 activesupport/lib/active_support/json/encoding.rb
  2. +6 −0 activesupport/test/json/encoding_test.rb
View
18 activesupport/lib/active_support/json/encoding.rb
@@ -159,18 +159,18 @@ def as_json(options = nil)
end
class TrueClass
- AS_JSON = ActiveSupport::JSON::Variable.new('true').freeze
- def as_json(options = nil) AS_JSON end #:nodoc:
+ def as_json(options = nil) self end #:nodoc:
+ def encode_json(encoder) to_s end #:nodoc:
end
class FalseClass
- AS_JSON = ActiveSupport::JSON::Variable.new('false').freeze
- def as_json(options = nil) AS_JSON end #:nodoc:
+ def as_json(options = nil) self end #:nodoc:
+ def encode_json(encoder) to_s end #:nodoc:
end
class NilClass
- AS_JSON = ActiveSupport::JSON::Variable.new('null').freeze
- def as_json(options = nil) AS_JSON end #:nodoc:
+ def as_json(options = nil) self end #:nodoc:
+ def encode_json(encoder) 'null' end #:nodoc:
end
class String
@@ -189,8 +189,8 @@ def encode_json(encoder) to_s end #:nodoc:
class Float
# Encoding Infinity or NaN to JSON should return "null". The default returns
- # "Infinity" or "NaN" what breaks parsing the JSON. E.g. JSON.parse('[NaN]').
- def as_json(options = nil) finite? ? self : NilClass::AS_JSON end #:nodoc:
+ # "Infinity" or "NaN" breaks parsing the JSON. E.g. JSON.parse('[NaN]').
+ def as_json(options = nil) finite? ? self : nil end #:nodoc:
end
class BigDecimal
@@ -208,7 +208,7 @@ def as_json(options = nil) #:nodoc:
if finite?
ActiveSupport.encode_big_decimal_as_string ? to_s : self
else
- NilClass::AS_JSON
+ nil
end
end
end
View
6 activesupport/test/json/encoding_test.rb
@@ -285,6 +285,12 @@ def test_opt_out_big_decimal_string_serialization
end
end
+ def test_nil_true_and_false_represented_as_themselves
+ assert_equal nil, nil.as_json
+ assert_equal true, true.as_json
+ assert_equal false, false.as_json
+ end
+
protected
def object_keys(json_object)

0 comments on commit 70bc0d7

Please sign in to comment.
Something went wrong with that request. Please try again.