diff options
author | Jeremy Kemper <jeremy@bitsweat.net> | 2012-05-29 21:22:55 -0700 |
---|---|---|
committer | Jeremy Kemper <jeremy@bitsweat.net> | 2012-05-29 21:22:55 -0700 |
commit | 70bc0d7a4f60ee9c5ca7538eb55b4dae96d7a985 (patch) | |
tree | 0fc5d6e806f71a504811f3338dbfba8b5ddb9239 | |
parent | 669694fe888053ccc86e9a9d1d19adb8dba5fafb (diff) | |
parent | 1e335ad1380f85e016260a8a3e38013376e1c109 (diff) | |
download | rails-70bc0d7a4f60ee9c5ca7538eb55b4dae96d7a985.tar.gz rails-70bc0d7a4f60ee9c5ca7538eb55b4dae96d7a985.tar.bz2 rails-70bc0d7a4f60ee9c5ca7538eb55b4dae96d7a985.zip |
Merge pull request #6546 from erichmenge/patch-as-json
True, False, and Nil should be represented in as_json as themselves.
-rw-r--r-- | activesupport/lib/active_support/json/encoding.rb | 18 | ||||
-rw-r--r-- | activesupport/test/json/encoding_test.rb | 6 |
2 files changed, 15 insertions, 9 deletions
diff --git a/activesupport/lib/active_support/json/encoding.rb b/activesupport/lib/active_support/json/encoding.rb index a6e4e7ced2..41fe61e790 100644 --- a/activesupport/lib/active_support/json/encoding.rb +++ b/activesupport/lib/active_support/json/encoding.rb @@ -159,18 +159,18 @@ class Struct #:nodoc: 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 @@ end 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 @@ class BigDecimal if finite? ActiveSupport.encode_big_decimal_as_string ? to_s : self else - NilClass::AS_JSON + nil end end end diff --git a/activesupport/test/json/encoding_test.rb b/activesupport/test/json/encoding_test.rb index 0566ebf291..212ee262a3 100644 --- a/activesupport/test/json/encoding_test.rb +++ b/activesupport/test/json/encoding_test.rb @@ -285,6 +285,12 @@ class TestJSONEncoding < ActiveSupport::TestCase 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) |