Bug #7286

CGI#header が 1.9.3 と異なる挙動となっている

Added by Hiroshi SHIBATA over 1 year ago. Updated over 1 year ago.

[ruby-dev:46412]
Status:Closed
Priority:Normal
Assignee:Takeyuki FUJIOKA
Category:core
Target version:2.0.0
ruby -v:ruby 2.0.0dev (2012-11-06 trunk 37486) [x86_64-darwin12.2.0] Backport:

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リリース後にした方が良いと思います。


Related issues

Related to ruby-trunk - Bug #7110: CGI: Add support for HTML5 <header> tag Closed 10/05/2012

Associated revisions

Revision 37535
Added by Takeyuki FUJIOKA over 1 year ago

  • lib/cgi/core.rb: alias CGI#http_header to CGI#header . [Bug #7286]

History

#1 Updated by Yui NARUSE over 1 year 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%互換とかただの根拠のない噂なので、あまり広めないでください!

#2 Updated by Takeyuki FUJIOKA over 1 year ago

  1. 現状のまま
  2. HTML4以前の時のみ、CGI#headerの挙動を変える
  3. HTML5の時のみ、CGI#headerの挙動を変える

うーむ。

#3 Updated by Akinori MUSHA over 1 year ago

CGIのHTML出力機能を使っているスクリプトで cgi.header を使っているものは少なくないと思うので、この変更は痛いですね。
妥協案としては、3を採用しつつ、
- ブロックが渡されていたらタグを出力する
および
- 他のタグ生成メソッドのブロック内ではタグを出力する
ようにしておいて、ブロックなしの呼出には(将来変わるかもしれないからhttp_headerを使えと)警告を入れるということでどうでしょう。

#4 Updated by Yusuke Endoh over 1 year 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

#5 Updated by Takeyuki FUJIOKA over 1 year ago

ちょっと方針を誤解していたことと、やはりインパクトが大きいので、
3にするコードを書いてみて、英語圏の方に議論してくれている2人と
redmineでやりとりしてみましょうか。

#6 Updated by Yusuke Endoh over 1 year ago

xibbar (Takeyuki Fujioka) wrote:

ちょっと方針を誤解していたことと、やはりインパクトが大きいので、
3にするコードを書いてみて、英語圏の方に議論してくれている2人と
redmineでやりとりしてみましょうか。

いいと思います。よろしくおねがいします。

方針について余談ですが、「100% 互換」のスローガンは、機能の議論を加速させるのに大変役立ったと思っています。
しかし一般ユーザに対する売り文句としては、衆目を集めるメリットより、ちょっとしたことで失望させるデメリットの方が大きそうなので、あんまり声高に主張しないほうがいいんじゃないかと思っています。(preview1 のリリースアナウンスでも書いてません)

Yusuke Endoh mame@tsg.ne.jp

#7 Updated by Takeyuki FUJIOKA over 1 year ago

CGI#httpheaderを新設という方向は変えずに、
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 # httpheader()
+ alias :header :http
header

def headerforstring(contenttype) #:nodoc:
buf = ''

#8 Updated by Takeyuki FUJIOKA over 1 year 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]

Also available in: Atom PDF