aboutsummaryrefslogtreecommitdiffstats
path: root/activesupport
diff options
context:
space:
mode:
authorRafael Mendonça França <rafaelmfranca@gmail.com>2017-10-23 15:33:16 -0400
committerRafael Mendonça França <rafaelmfranca@gmail.com>2017-10-23 15:33:16 -0400
commit9c5c0596f137c396b6356416a3f92a3a082c53f6 (patch)
tree2aeea8ba25b27f03969a4d5e253e662b48dbcacd /activesupport
parentc085a2a1a2a9ecfe8f9acfc177798046087c269e (diff)
parent813f8e333dabb2050d6b668b7bdd68b4979e8af4 (diff)
downloadrails-9c5c0596f137c396b6356416a3f92a3a082c53f6.tar.gz
rails-9c5c0596f137c396b6356416a3f92a3a082c53f6.tar.bz2
rails-9c5c0596f137c396b6356416a3f92a3a082c53f6.zip
Merge pull request #30953 from rohitpaulk/fix-io-to-json
Fix #to_json for IO objects, fixes #26132
Diffstat (limited to 'activesupport')
-rw-r--r--activesupport/CHANGELOG.md8
-rw-r--r--activesupport/lib/active_support/core_ext/object/json.rb6
-rw-r--r--activesupport/test/json/encoding_test.rb4
3 files changed, 18 insertions, 0 deletions
diff --git a/activesupport/CHANGELOG.md b/activesupport/CHANGELOG.md
index f57b9ce5ab..8e8e9b9440 100644
--- a/activesupport/CHANGELOG.md
+++ b/activesupport/CHANGELOG.md
@@ -1,3 +1,11 @@
+* `IO#to_json` now returns the `to_s` representation, rather than
+ attempting to convert to an array. This fixes a bug where `IO#to_json`
+ would raise an `IOError` when called on an unreadable object.
+
+ Fixes #26132.
+
+ *Paul Kuruvilla*
+
* Remove deprecated `halt_callback_chains_on_return_false` option.
*Rafael Mendonça França*
diff --git a/activesupport/lib/active_support/core_ext/object/json.rb b/activesupport/lib/active_support/core_ext/object/json.rb
index 0a3b875f24..f7c623fe13 100644
--- a/activesupport/lib/active_support/core_ext/object/json.rb
+++ b/activesupport/lib/active_support/core_ext/object/json.rb
@@ -135,6 +135,12 @@ module Enumerable
end
end
+class IO
+ def as_json(options = nil) #:nodoc:
+ to_s
+ end
+end
+
class Range
def as_json(options = nil) #:nodoc:
to_s
diff --git a/activesupport/test/json/encoding_test.rb b/activesupport/test/json/encoding_test.rb
index eafa2e1712..96ad8dfbdb 100644
--- a/activesupport/test/json/encoding_test.rb
+++ b/activesupport/test/json/encoding_test.rb
@@ -454,6 +454,10 @@ EXPECTED
assert_equal '{"number":null}', NaNNumber.new.to_json
end
+ def test_to_json_works_on_io_objects
+ assert_equal STDOUT.to_s.to_json, STDOUT.to_json
+ end
+
private
def object_keys(json_object)