diff options
author | Godfrey Chan <godfreykfc@gmail.com> | 2013-11-19 19:17:55 -0800 |
---|---|---|
committer | Godfrey Chan <godfreykfc@gmail.com> | 2013-11-26 09:51:51 -0800 |
commit | 4d02296cfbd69b4d2757dfd20f23d778bb23b81b (patch) | |
tree | 8199425bb07b4e92ba4cfa986f2059989ce0b552 | |
parent | ca12db0efbf07c1a3182556e99af4ebbfcd59dee (diff) | |
download | rails-4d02296cfbd69b4d2757dfd20f23d778bb23b81b.tar.gz rails-4d02296cfbd69b4d2757dfd20f23d778bb23b81b.tar.bz2 rails-4d02296cfbd69b4d2757dfd20f23d778bb23b81b.zip |
Removed support for encoding BigDecimal as a JSON number
This is because the new encoder will no longer support encode_json.
Therefore our only choice is to return `to_i` or `to_s` in
`BigDecimal#as_json`. Since casting a BigDecimal to an integer is
most likely a lossy operation, we chose to encode it as a string.
Support for encoding BigDecimal as a string will return via the
`activesupport-json_encoder` gem.
-rw-r--r-- | activesupport/lib/active_support/core_ext/object/json.rb | 9 | ||||
-rw-r--r-- | activesupport/lib/active_support/json/encoding.rb | 6 | ||||
-rw-r--r-- | activesupport/test/json/encoding_test.rb | 11 |
3 files changed, 1 insertions, 25 deletions
diff --git a/activesupport/lib/active_support/core_ext/object/json.rb b/activesupport/lib/active_support/core_ext/object/json.rb index 7c11d44f57..bae9190687 100644 --- a/activesupport/lib/active_support/core_ext/object/json.rb +++ b/activesupport/lib/active_support/core_ext/object/json.rb @@ -132,15 +132,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.encode_big_decimal_as_string = 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 diff --git a/activesupport/lib/active_support/json/encoding.rb b/activesupport/lib/active_support/json/encoding.rb index 0e1c379b5b..5fad5887c6 100644 --- a/activesupport/lib/active_support/json/encoding.rb +++ b/activesupport/lib/active_support/json/encoding.rb @@ -7,7 +7,6 @@ module ActiveSupport class << self delegate :use_standard_json_time_format, :use_standard_json_time_format=, :escape_html_entities_in_json, :escape_html_entities_in_json=, - :encode_big_decimal_as_string, :encode_big_decimal_as_string=, :to => :'ActiveSupport::JSON::Encoding' end @@ -69,10 +68,6 @@ module ActiveSupport # to the Active Support legacy format. attr_accessor :use_standard_json_time_format - # If false, serializes BigDecimal objects as numeric instead of wrapping - # them in a string. - attr_accessor :encode_big_decimal_as_string - attr_accessor :escape_regex attr_reader :escape_html_entities_in_json @@ -118,7 +113,6 @@ module ActiveSupport self.use_standard_json_time_format = true self.escape_html_entities_in_json = true - self.encode_big_decimal_as_string = true end end end diff --git a/activesupport/test/json/encoding_test.rb b/activesupport/test/json/encoding_test.rb index 1e32830ced..335023e2c3 100644 --- a/activesupport/test/json/encoding_test.rb +++ b/activesupport/test/json/encoding_test.rb @@ -399,17 +399,6 @@ class TestJSONEncoding < ActiveSupport::TestCase ActiveSupport::JSON.decode(json_string_and_date)) end - def test_opt_out_big_decimal_string_serialization - big_decimal = BigDecimal('2.5') - - begin - ActiveSupport.encode_big_decimal_as_string = false - assert_equal big_decimal.to_s, big_decimal.to_json - ensure - ActiveSupport.encode_big_decimal_as_string = true - end - end - def test_nil_true_and_false_represented_as_themselves assert_equal nil, nil.as_json assert_equal true, true.as_json |