Project

General

Profile

Actions

Bug #7286

closed

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

Added by hsbt (Hiroshi SHIBATA) over 11 years ago. Updated over 11 years ago.

Status:
Closed
Target version:
ruby -v:
ruby 2.0.0dev (2012-11-06 trunk 37486) [x86_64-darwin12.2.0]
Backport:
[ruby-dev:46412]

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 1 (0 open1 closed)

Related to Ruby master - Bug #7110: CGI: Add support for HTML5 <header> tagClosedxibbar (Takeyuki FUJIOKA)10/05/2012Actions

Updated by naruse (Yui NARUSE) over 11 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) over 11 years ago

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

うーむ。

Updated by knu (Akinori MUSHA) over 11 years ago

CGIのHTML出力機能を使っているスクリプトで cgi.header を使っているものは少なくないと思うので、この変更は痛いですね。
妥協案としては、3を採用しつつ、

  • ブロックが渡されていたらタグを出力する
    および
  • 他のタグ生成メソッドのブロック内ではタグを出力する
    ようにしておいて、ブロックなしの呼出には(将来変わるかもしれないからhttp_headerを使えと)警告を入れるということでどうでしょう。

Updated by mame (Yusuke Endoh) over 11 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

Updated by xibbar (Takeyuki FUJIOKA) over 11 years ago

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

Updated by mame (Yusuke Endoh) over 11 years ago

xibbar (Takeyuki Fujioka) wrote:

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

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

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

--
Yusuke Endoh

Updated by xibbar (Takeyuki FUJIOKA) over 11 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 = ''

Actions #8

Updated by xibbar (Takeyuki FUJIOKA) over 11 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]
Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0Like0Like0Like0Like0