Issue #13835 has been updated by kernigh (George Koehler).
Turns out that `open(temp_file, 'a')` works with the original open, but fails after loading open-uri.
This is because the instances of Tempfile respond to `to_path`, just like instances of File or Pathname. So `open(temp_file, 'a')` acts like `open(temp_file.to_path, 'a')`. I was confused because the documentation for `Kernel.open` (and other methods like `File.path`) has no mention of `to_path`. I needed to read Ruby's source code to learn about it.
The bug happens after loading open-uri. Then `open(temp_file, 'a')` tries to call `temp_file.open('a')`, but `Tempfile#open` fails to do what open-uri expects, and instead raises the ArgumentError.
----------------------------------------
Bug #13835: Using 'open-uri' with 'tempfile' causes an exception
https://bugs.ruby-lang.org/issues/13835#change-66277
* Author: thorsteneckel (Thorsten Eckel)
* Status: Open
* Priority: Normal
* Assignee:
* Target version:
* ruby -v:
* Backport: 2.2: UNKNOWN, 2.3: UNKNOWN, 2.4: UNKNOWN
----------------------------------------
Hi there,
try this in your current ruby env:
~~~ ruby
require 'tempfile'
require 'open-uri'
temp_file = Tempfile.new
open(temp_file, 'a')
~~~
Get this:
~~~
/Users/~/.rvm/rubies/ruby-2.4.1/lib/ruby/2.4.0/tempfile.rb:142:in `open': wrong number of arguments (given 1, expected 0) (ArgumentError)
from /Users/~/.rvm/rubies/ruby-2.4.1/lib/ruby/2.4.0/open-uri.rb:31:in `open'
from debug.rb:5:in `<main>'
~~~
I created the pull request https://github.com/ruby/ruby/pull/1680 as a proposal. It's based on the previous pull request https://github.com/ruby/ruby/pull/1675 and feedback of @nobu .
Greetings.
--
https://bugs.ruby-lang.org/
Unsubscribe: <mailto:ruby-core-request / ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>