Issue #7767 has been reported by kyanagi (Kouhei Y.).
Feature #7767: Tempfileで自動的にファイルを削除する
Author: kyanagi (Kouhei Y.)
Status: Open
Priority: Normal
Assignee:
Category:
Target version:
ソースコードのコメント(tempfile.rbのGood practicesの項)にも書かれている通り、
Tempfileは使用後、明示的に削除することが推奨されています。
しかし、Tempfile.openにブロックを渡すと自動的にcloseするところまではやってくれるのに、
削除をわざわざ明示的に書かないといけないというのは少し残念な気もします。
Tempfile.openの類推で、ブロックを抜けると自動的にclose!してくれるメソッドがあると、
削除に気を使わなくてもよくなり、使いやすいのではないかと思いましたがいかがでしょうか。
メソッド名ですが、
- 使いやすさを考えると、openと同じくらいに書きやすい(短い)ものがよい
- Tempfile.openはブロックを抜けるときにcloseするが、提案する新メソッドではclose!する
という点を考えて、ひとまずTempfile.open!を提案してみます。
Index: lib/tempfile.rb
— lib/tempfile.rb (revision 39003)
+++ lib/tempfile.rb (working copy)
@@ -305,6 +305,9 @@
#
# In any case, all arguments (+*args+) will be passed to
Tempfile.new.
#
-
+open!+ is same as +open+, except that the file will be deleted
immediately
-
after the block terminates.
-
Tempfile.open(‘foo’, ‘/home/temp’) do |f|
… do something with f …
end
@@ -316,14 +319,23 @@
# ensure
# f.close
# end
-
def open(*args, &block)
-
_open(false, *args, &block)
-
end
-
-
def open!(*args, &block)
-
_open(true, *args, &block)
-
end
-
-
private
-
def _open(unlink_at_block_end, *args, &block)
tempfile = new(*args)
if block_given?
begin
yield(tempfile)
ensure
Index: test/test_tempfile.rb
— test/test_tempfile.rb (revision 39003)
+++ test/test_tempfile.rb (working copy)
@@ -304,5 +304,13 @@
assert_equal(0600, t.stat.mode & 0777)
end
end
+
- def test_open_bang_with_block
- path = nil
- Tempfile.open!(‘foo’) do |f|
-
path = f.path
- end
- assert !File.exist?(path)
- end
end
2013/2/1 kyanagi (Kouhei Y.) [email protected]:
$B$7$+$7!“(BTempfile.open$B$K%V%m%C%/$rEO$9$H<+F0E*$K(Bclose$B$9$k$H$3$m$^$G$O$d$C$F$/$l$k$N$K!”(B
$B:o=|$r$o$6$o$6L@<(E*$K=q$+$J$$$H$$$1$J$$$H$$$&$N$O>/$7;DG0$J5$$b$7$^$9!#(B
Tempfile.open$B$NN`?d$G!“%V%m%C%/$rH4$1$k$H<+F0E*$K(Bclose!$B$7$F$/$l$k%a%=%C%I$,$”$k$H!"(B
$B:o=|$K5$$r;H$o$J$/$F$b$h$/$J$j!";H$$$d$9$$$N$G$O$J$$$+$H;W$$$^$7$?$,$$$+$,$G$7$g$&$+!#(B
$B$h$$$H;W$&$N$G$9$,!“%V%m%C%/$rH4$1$k$H$-$K>C$9$J$i!”(BGC
$B$G>C$9I,MW$O$J$$$N$G$O$J$$$G$7$g$&$+!#(B
Tempfile $B$N%$%s%9%?%s%9$G$“$kI,MW$b$J$$$G$9$h$M!”(B
$B$H$$$&$3$H$G!“(Bhttp://bugs.ruby-lang.org/issues/5707
$B$rDs0F$7$?$s$G$9$,!”(B
$BL>A0$,LdBj$G;_$^$C$F$$$^$9!#(B
$B%a%=%C%IL>$G$9$,!"(B
- $B;H$$$d$9$5$r9M$($k$H!"(Bopen$B$HF1$8$/$i$$$K=q$-$d$9$$!JC;$$!K$b$N$,$h$$(B
-
Tempfile.open$B$O%V%m%C%/$rH4$1$k$H$-$K(Bclose$B$9$k$,!"Ds0F$9$k?7%a%=%C%I$G$O(Bclose!$B$9$k(B
$B$H$$$&E@$r9M$($F!"$R$H$^$:(BTempfile.open!$B$rDs0F$7$F$_$^$9!#(B
$BL>A0$,DL$k$H$$$$$G$9$M$'!#(B
Issue #7767 has been updated by yhara (Yutaka HARA).
Category set to lib
Target version set to next minor
Feature #7767: Tempfileで自動的にファイルを削除する
Author: kyanagi (Kouhei Y.)
Status: Open
Priority: Normal
Assignee:
Category: lib
Target version: next minor
ソースコードのコメント(tempfile.rbのGood practicesの項)にも書かれている通り、
Tempfileは使用後、明示的に削除することが推奨されています。
しかし、Tempfile.openにブロックを渡すと自動的にcloseするところまではやってくれるのに、
削除をわざわざ明示的に書かないといけないというのは少し残念な気もします。
Tempfile.openの類推で、ブロックを抜けると自動的にclose!してくれるメソッドがあると、
削除に気を使わなくてもよくなり、使いやすいのではないかと思いましたがいかがでしょうか。
メソッド名ですが、
- 使いやすさを考えると、openと同じくらいに書きやすい(短い)ものがよい
- Tempfile.openはブロックを抜けるときにcloseするが、提案する新メソッドではclose!する
という点を考えて、ひとまずTempfile.open!を提案してみます。
Index: lib/tempfile.rb
— lib/tempfile.rb (revision 39003)
+++ lib/tempfile.rb (working copy)
@@ -305,6 +305,9 @@
#
# In any case, all arguments (+*args+) will be passed to
Tempfile.new.
#
-
+open!+ is same as +open+, except that the file will be deleted
immediately
-
after the block terminates.
-
Tempfile.open(‘foo’, ‘/home/temp’) do |f|
… do something with f …
end
@@ -316,14 +319,23 @@
# ensure
# f.close
# end
-
def open(*args, &block)
-
_open(false, *args, &block)
-
end
-
-
def open!(*args, &block)
-
_open(true, *args, &block)
-
end
-
-
private
-
def _open(unlink_at_block_end, *args, &block)
tempfile = new(*args)
if block_given?
begin
yield(tempfile)
ensure
Index: test/test_tempfile.rb
— test/test_tempfile.rb (revision 39003)
+++ test/test_tempfile.rb (working copy)
@@ -304,5 +304,13 @@
assert_equal(0600, t.stat.mode & 0777)
end
end
+
- def test_open_bang_with_block
- path = nil
- Tempfile.open!(‘foo’) do |f|
-
path = f.path
- end
- assert !File.exist?(path)
- end
end
Issue #7767 has been updated by akr (Akira T.).
Parent task set to #5707
Feature #7767: Tempfileで自動的にファイルを削除する
Author: kyanagi (Kouhei Y.)
Status: Open
Priority: Normal
Assignee: akr (Akira T.)
Category: lib
Target version: next minor
ソースコードのコメント(tempfile.rbのGood practicesの項)にも書かれている通り、
Tempfileは使用後、明示的に削除することが推奨されています。
しかし、Tempfile.openにブロックを渡すと自動的にcloseするところまではやってくれるのに、
削除をわざわざ明示的に書かないといけないというのは少し残念な気もします。
Tempfile.openの類推で、ブロックを抜けると自動的にclose!してくれるメソッドがあると、
削除に気を使わなくてもよくなり、使いやすいのではないかと思いましたがいかがでしょうか。
メソッド名ですが、
- 使いやすさを考えると、openと同じくらいに書きやすい(短い)ものがよい
- Tempfile.openはブロックを抜けるときにcloseするが、提案する新メソッドではclose!する
という点を考えて、ひとまずTempfile.open!を提案してみます。
Index: lib/tempfile.rb
— lib/tempfile.rb (revision 39003)
+++ lib/tempfile.rb (working copy)
@@ -305,6 +305,9 @@
#
# In any case, all arguments (+*args+) will be passed to
Tempfile.new.
#
-
+open!+ is same as +open+, except that the file will be deleted
immediately
-
after the block terminates.
-
Tempfile.open(‘foo’, ‘/home/temp’) do |f|
… do something with f …
end
@@ -316,14 +319,23 @@
# ensure
# f.close
# end
-
def open(*args, &block)
-
_open(false, *args, &block)
-
end
-
-
def open!(*args, &block)
-
_open(true, *args, &block)
-
end
-
-
private
-
def _open(unlink_at_block_end, *args, &block)
tempfile = new(*args)
if block_given?
begin
yield(tempfile)
ensure
Index: test/test_tempfile.rb
— test/test_tempfile.rb (revision 39003)
+++ test/test_tempfile.rb (working copy)
@@ -304,5 +304,13 @@
assert_equal(0600, t.stat.mode & 0777)
end
end
+
- def test_open_bang_with_block
- path = nil
- Tempfile.open!(‘foo’) do |f|
-
path = f.path
- end
- assert !File.exist?(path)
- end
end
Issue #7767 has been updated by shugo (Shugo M.).
akr (Akira T.) wrote:
メソッド名ですが、
- 使いやすさを考えると、openと同じくらいに書きやすい(短い)ものがよい
- Tempfile.openはブロックを抜けるときにcloseするが、提案する新メソッドではclose!する
という点を考えて、ひとまずTempfile.open!を提案してみます。
名前が通るといいですねぇ。
Tempfile.openとTempfile.open!で違うクラスのインスタンスが作成されるのは
ちょっとわかりにくいような気がしますので、openから派生した名前でない方がよいの
ではないでしょうか。
例えば、Tempfile.createはどうでしょう。
Feature #7767: Tempfileで自動的にファイルを削除する
Author: kyanagi (Kouhei Y.)
Status: Open
Priority: Normal
Assignee: akr (Akira T.)
Category: lib
Target version: next minor
ソースコードのコメント(tempfile.rbのGood practicesの項)にも書かれている通り、
Tempfileは使用後、明示的に削除することが推奨されています。
しかし、Tempfile.openにブロックを渡すと自動的にcloseするところまではやってくれるのに、
削除をわざわざ明示的に書かないといけないというのは少し残念な気もします。
Tempfile.openの類推で、ブロックを抜けると自動的にclose!してくれるメソッドがあると、
削除に気を使わなくてもよくなり、使いやすいのではないかと思いましたがいかがでしょうか。
メソッド名ですが、
- 使いやすさを考えると、openと同じくらいに書きやすい(短い)ものがよい
- Tempfile.openはブロックを抜けるときにcloseするが、提案する新メソッドではclose!する
という点を考えて、ひとまずTempfile.open!を提案してみます。
Index: lib/tempfile.rb
— lib/tempfile.rb (revision 39003)
+++ lib/tempfile.rb (working copy)
@@ -305,6 +305,9 @@
#
# In any case, all arguments (+*args+) will be passed to
Tempfile.new.
#
-
+open!+ is same as +open+, except that the file will be deleted
immediately
-
after the block terminates.
-
Tempfile.open(‘foo’, ‘/home/temp’) do |f|
… do something with f …
end
@@ -316,14 +319,23 @@
# ensure
# f.close
# end
-
def open(*args, &block)
-
_open(false, *args, &block)
-
end
-
-
def open!(*args, &block)
-
_open(true, *args, &block)
-
end
-
-
private
-
def _open(unlink_at_block_end, *args, &block)
tempfile = new(*args)
if block_given?
begin
yield(tempfile)
ensure
Index: test/test_tempfile.rb
— test/test_tempfile.rb (revision 39003)
+++ test/test_tempfile.rb (working copy)
@@ -304,5 +304,13 @@
assert_equal(0600, t.stat.mode & 0777)
end
end
+
- def test_open_bang_with_block
- path = nil
- Tempfile.open!(‘foo’) do |f|
-
path = f.path
- end
- assert !File.exist?(path)
- end
end
2013$BG/(B4$B7n(B4$BF|(B 18:34 shugo (Shugo M.)
[email protected]:
Tempfile.open$B$H(BTempfile.open!$B$G0c$&%/%i%9$N%$%s%9%?%s%9$,:n@.$5$l$k$N$O(B
$B$A$g$C$H$o$+$j$K$/$$$h$&$J5$$,$7$^$9$N$G!"(Bopen$B$+$iGI@8$7$?L>A0$G$J$$J}$,$h$$$N(B
$B$G$O$J$$$G$7$g$&$+!#(B
$BNc$($P!"(BTempfile.create$B$O$I$&$G$7$g$&!#(B
$B$$$$$h$&$J5$$,$7$^$9!#$=$&$7$^$9$+!#(B
Issue #7767 has been updated by ko1 (Koichi Sasada).
Assignee set to akr (Akira T.)
誰にアサインすればわからなかったのですが、
詳しそうな田中さんにアサインさせて頂きます。
Feature #7767: Tempfileで自動的にファイルを削除する
Author: kyanagi (Kouhei Y.)
Status: Open
Priority: Normal
Assignee: akr (Akira T.)
Category: lib
Target version: next minor
ソースコードのコメント(tempfile.rbのGood practicesの項)にも書かれている通り、
Tempfileは使用後、明示的に削除することが推奨されています。
しかし、Tempfile.openにブロックを渡すと自動的にcloseするところまではやってくれるのに、
削除をわざわざ明示的に書かないといけないというのは少し残念な気もします。
Tempfile.openの類推で、ブロックを抜けると自動的にclose!してくれるメソッドがあると、
削除に気を使わなくてもよくなり、使いやすいのではないかと思いましたがいかがでしょうか。
メソッド名ですが、
- 使いやすさを考えると、openと同じくらいに書きやすい(短い)ものがよい
- Tempfile.openはブロックを抜けるときにcloseするが、提案する新メソッドではclose!する
という点を考えて、ひとまずTempfile.open!を提案してみます。
Index: lib/tempfile.rb
— lib/tempfile.rb (revision 39003)
+++ lib/tempfile.rb (working copy)
@@ -305,6 +305,9 @@
#
# In any case, all arguments (+*args+) will be passed to
Tempfile.new.
#
-
+open!+ is same as +open+, except that the file will be deleted
immediately
-
after the block terminates.
-
Tempfile.open(‘foo’, ‘/home/temp’) do |f|
… do something with f …
end
@@ -316,14 +319,23 @@
# ensure
# f.close
# end
-
def open(*args, &block)
-
_open(false, *args, &block)
-
end
-
-
def open!(*args, &block)
-
_open(true, *args, &block)
-
end
-
-
private
-
def _open(unlink_at_block_end, *args, &block)
tempfile = new(*args)
if block_given?
begin
yield(tempfile)
ensure
Index: test/test_tempfile.rb
— test/test_tempfile.rb (revision 39003)
+++ test/test_tempfile.rb (working copy)
@@ -304,5 +304,13 @@
assert_equal(0600, t.stat.mode & 0777)
end
end
+
- def test_open_bang_with_block
- path = nil
- Tempfile.open!(‘foo’) do |f|
-
path = f.path
- end
- assert !File.exist?(path)
- end
end
Issue #7767 has been updated by akr (Akira T.).
Status changed from Open to Closed
Feature #7767: Tempfileで自動的にファイルを削除する
Author: kyanagi (Kouhei Y.)
Status: Closed
Priority: Normal
Assignee: akr (Akira T.)
Category: lib
Target version: next minor
ソースコードのコメント(tempfile.rbのGood practicesの項)にも書かれている通り、
Tempfileは使用後、明示的に削除することが推奨されています。
しかし、Tempfile.openにブロックを渡すと自動的にcloseするところまではやってくれるのに、
削除をわざわざ明示的に書かないといけないというのは少し残念な気もします。
Tempfile.openの類推で、ブロックを抜けると自動的にclose!してくれるメソッドがあると、
削除に気を使わなくてもよくなり、使いやすいのではないかと思いましたがいかがでしょうか。
メソッド名ですが、
- 使いやすさを考えると、openと同じくらいに書きやすい(短い)ものがよい
- Tempfile.openはブロックを抜けるときにcloseするが、提案する新メソッドではclose!する
という点を考えて、ひとまずTempfile.open!を提案してみます。
Index: lib/tempfile.rb
— lib/tempfile.rb (revision 39003)
+++ lib/tempfile.rb (working copy)
@@ -305,6 +305,9 @@
#
# In any case, all arguments (+*args+) will be passed to
Tempfile.new.
#
-
+open!+ is same as +open+, except that the file will be deleted
immediately
-
after the block terminates.
-
Tempfile.open(‘foo’, ‘/home/temp’) do |f|
… do something with f …
end
@@ -316,14 +319,23 @@
# ensure
# f.close
# end
-
def open(*args, &block)
-
_open(false, *args, &block)
-
end
-
-
def open!(*args, &block)
-
_open(true, *args, &block)
-
end
-
-
private
-
def _open(unlink_at_block_end, *args, &block)
tempfile = new(*args)
if block_given?
begin
yield(tempfile)
ensure
Index: test/test_tempfile.rb
— test/test_tempfile.rb (revision 39003)
+++ test/test_tempfile.rb (working copy)
@@ -304,5 +304,13 @@
assert_equal(0600, t.stat.mode & 0777)
end
end
+
- def test_open_bang_with_block
- path = nil
- Tempfile.open!(‘foo’) do |f|
-
path = f.path
- end
- assert !File.exist?(path)
- end
end