aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGodfrey Chan <godfreykfc@gmail.com>2013-11-19 19:17:55 -0800
committerGodfrey Chan <godfreykfc@gmail.com>2013-11-26 09:51:51 -0800
commit4d02296cfbd69b4d2757dfd20f23d778bb23b81b (patch)
tree8199425bb07b4e92ba4cfa986f2059989ce0b552
parentca12db0efbf07c1a3182556e99af4ebbfcd59dee (diff)
downloadrails-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.rb9
-rw-r--r--activesupport/lib/active_support/json/encoding.rb6
-rw-r--r--activesupport/test/json/encoding_test.rb11
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