Bug #7286
closedCGI#header が 1.9.3 と異なる挙動となっている
Description
http://bugs.ruby-lang.org/issues/show/7110 の変更の結果、CGI#header の挙動が 1.9 系と異なる挙動となっています。
2.0.0 は 100% 互換という方針だったと思うので、今の trunk の CGI#header は 1.9 系に戻して、新しい機能はメソッド名を header_tag 等にするか、変更自体を2.0.0リリース後にした方が良いと思います。
Updated by naruse (Yui NARUSE) about 12 years ago
hsbt (Hiroshi SHIBATA) wrote:
http://bugs.ruby-lang.org/issues/show/7110 の変更の結果、CGI#header の挙動が 1.9 系と異なる挙動となっています。
2.0.0 は 100% 互換という方針だったと思うので、今の trunk の CGI#header は 1.9 系に戻して、新しい機能はメソッド名を header_tag 等にするか、変更自体を2.0.0リリース後にした方が良いと思います。
100%互換とかただの根拠のない噂なので、あまり広めないでください!
Updated by xibbar (Takeyuki FUJIOKA) about 12 years ago
- 現状のまま
- HTML4以前の時のみ、CGI#headerの挙動を変える
- HTML5の時のみ、CGI#headerの挙動を変える
うーむ。
Updated by knu (Akinori MUSHA) about 12 years ago
CGIのHTML出力機能を使っているスクリプトで cgi.header を使っているものは少なくないと思うので、この変更は痛いですね。
妥協案としては、3を採用しつつ、
- ブロックが渡されていたらタグを出力する
および - 他のタグ生成メソッドのブロック内ではタグを出力する
ようにしておいて、ブロックなしの呼出には(将来変わるかもしれないからhttp_headerを使えと)警告を入れるということでどうでしょう。
Updated by mame (Yusuke Endoh) about 12 years ago
- Status changed from Open to Assigned
問題報告ありがとうございます > 柴田さん
ちゃんと考えてなかったので見逃してました (Zachary Scott が文句言ってくれてたのに) 。
これはちょっとまずそうですね。今から cgi.rb で html5 書くユーザと、cgi.rb で
書かれたレガシーコードをメンテする可哀想なユーザ、多分後者の方が多いと思うので。
といいつつ、既存コードで CGI.new("html5").header って書かれてる可能性ってどのくらい
ありますかね。考えにくければ、以下のような感じにするのが素直じゃないでしょうか。
puts CGI.new .header #=> "Content-Type: text/html" + deprecated 警告
puts CGI.new("html4").header #=> "Content-Type: text/html" + deprecated 警告
puts CGI.new("html5").header #=> " "
つまり xibbar さんの 3 ですが。
--
Yusuke Endoh mame@tsg.ne.jp
Updated by xibbar (Takeyuki FUJIOKA) about 12 years ago
ちょっと方針を誤解していたことと、やはりインパクトが大きいので、
3にするコードを書いてみて、英語圏の方に議論してくれている2人と
redmineでやりとりしてみましょうか。
Updated by mame (Yusuke Endoh) about 12 years ago
xibbar (Takeyuki Fujioka) wrote:
ちょっと方針を誤解していたことと、やはりインパクトが大きいので、
3にするコードを書いてみて、英語圏の方に議論してくれている2人と
redmineでやりとりしてみましょうか。
いいと思います。よろしくおねがいします。
方針について余談ですが、「100% 互換」のスローガンは、機能の議論を加速させるのに大変役立ったと思っています。
しかし一般ユーザに対する売り文句としては、衆目を集めるメリットより、ちょっとしたことで失望させるデメリットの方が大きそうなので、あんまり声高に主張しないほうがいいんじゃないかと思っています。(preview1 のリリースアナウンスでも書いてません)
--
Yusuke Endoh mame@tsg.ne.jp
Updated by xibbar (Takeyuki FUJIOKA) about 12 years ago
CGI#http_headerを新設という方向は変えずに、
html4までは
alias :header :http_header
が効くようにして、
html5の時は、
CGI#headerが上書きされるような仕様にしておこうかと思います。
--- a/lib/cgi/core.rb
+++ b/lib/cgi/core.rb
@@ -171,6 +171,7 @@ class CGI
return buf
end
end # http_header()
-
alias :header :http_header
def _header_for_string(content_type) #:nodoc:
buf = ''
Updated by xibbar (Takeyuki FUJIOKA) about 12 years ago
- Status changed from Assigned to Closed
- % Done changed from 0 to 100
This issue was solved with changeset r37535.
Hiroshi, thank you for reporting this issue.
Your contribution to Ruby is greatly appreciated.
May Ruby be with you.
- lib/cgi/core.rb: alias CGI#http_header to CGI#header .
[Bug #7286]