[ruby-trunk - Feature #8354][Open] lib/cgi/util.rb を関数としても使えるようにしたい

Issue #8354 has been reported by xibbar (Takeyuki FUJIOKA).


Feature #8354: lib/cgi/util.rb を関数としても使えるようにしたい

Author: xibbar (Takeyuki FUJIOKA)
Status: Open
Priority: Normal
Assignee: xibbar (Takeyuki FUJIOKA)
Category: lib
Target version: current: 2.1.0

cgi/util.rb には CGI.escapeHTML などのメソッドがあります。
これらを使うにはCGI.escapeHTML(str) みたいにして
いちいち全部書かなきゃならなくて、
長いと思っています。
erbを使っている人なら include ERB::Util すると h(str) と使えるのですが、
私はerb使わずに素のCGIを書いているので、hが使えず不便でした。
なので、中身をutil.rb の中身を丸ごとmoduleにして
include CGI::Util すれば、escapeHTMLが使えて、
さらにescapeHTML にhをエイリアスにして、
erbと同じように使えるようにしてしまおうかと思います。
すでにerbでそういう名前で短縮名が使われているので、
新規に仕様を作るまでもなく真似します。
また、今は ERB::Util#h は実体がCGI.escapeHTMLですし。

メンテナが私なので反対がなければ入れたいと思います。

Issue #8354 has been updated by mame (Yusuke E.).

escapeHTML を関数として呼び出せるのはいいと思います。

しかし h のエイリアスはあまり賛成でないです。一般的なプログラムの中で

s = h s

みたいなコードを書くことを Ruby が推奨しているとは思わないので。

ERB の h は原則として <%=h … %> というイディオム限定で許されていると
思います。
他に 1 文字メソッドというと p がありますが、こっちはデバッグ時限定で
許されていると思います。(最終的なコードには残さない前提)

一般的なコードの中で h を許したいという動機が何かあるんですかね。


Yusuke E. [email protected]

Feature #8354: lib/cgi/util.rb を関数としても使えるようにしたい

Author: xibbar (Takeyuki FUJIOKA)
Status: Open
Priority: Normal
Assignee: xibbar (Takeyuki FUJIOKA)
Category: lib
Target version: current: 2.1.0

cgi/util.rb には CGI.escapeHTML などのメソッドがあります。
これらを使うにはCGI.escapeHTML(str) みたいにして
いちいち全部書かなきゃならなくて、
長いと思っています。
erbを使っている人なら include ERB::Util すると h(str) と使えるのですが、
私はerb使わずに素のCGIを書いているので、hが使えず不便でした。
なので、中身をutil.rb の中身を丸ごとmoduleにして
include CGI::Util すれば、escapeHTMLが使えて、
さらにescapeHTML にhをエイリアスにして、
erbと同じように使えるようにしてしまおうかと思います。
すでにerbでそういう名前で短縮名が使われているので、
新規に仕様を作るまでもなく真似します。
また、今は ERB::Util#h は実体がCGI.escapeHTMLですし。

メンテナが私なので反対がなければ入れたいと思います。

Issue #8354 has been updated by xibbar (Takeyuki FUJIOKA).

一般的なコードの中でescapeHTMLが多用されるとは思わないのですが、
cgiアプリの中ではある程度escapeHTMLが必要になります。
これが随所に出てきて、
@cgi = CGI.new(“html5”)
login = @cgi[‘login’]
family_name = @cgi[family_name’]
first_name = @cgi[first_name’]
@cgi.out do
@cgi.header do
@cgi.title{“Sample”}+
end+
@cgi.body do
@cgi.div{ CGI.escapeHTML(login) }+
@cgi.div{ CGI.escapeHTML(first_name) }+
@cgi.div{ CGI.escapeHTML(family_name) }
end
end
これ、
include CGI::Util
@cgi = CGI.new(“html5”)
login = @cgi[‘login’]
family_name = @cgi[family_name’]
first_name = @cgi[first_name’]
@cgi.out do
@cgi.header do
@cgi.title{“Sample”}+
end+
@cgi.body do
@cgi.div{ h(login) }+
@cgi.div{ h(first_name) }+
@cgi.div{ h(family_name) }
end
end
とかければいいなと。
※ 動作チェックしないで書いているので、うまく動くかわかんないコードです。
エスケープが面倒なのです。

includeした時しか影響が出ないので、欲しいです。
名前はhじゃなくてもいいですが。

Feature #8354: lib/cgi/util.rb を関数としても使えるようにしたい

Author: xibbar (Takeyuki FUJIOKA)
Status: Open
Priority: Normal
Assignee: xibbar (Takeyuki FUJIOKA)
Category: lib
Target version: current: 2.1.0

cgi/util.rb には CGI.escapeHTML などのメソッドがあります。
これらを使うにはCGI.escapeHTML(str) みたいにして
いちいち全部書かなきゃならなくて、
長いと思っています。
erbを使っている人なら include ERB::Util すると h(str) と使えるのですが、
私はerb使わずに素のCGIを書いているので、hが使えず不便でした。
なので、中身をutil.rb の中身を丸ごとmoduleにして
include CGI::Util すれば、escapeHTMLが使えて、
さらにescapeHTML にhをエイリアスにして、
erbと同じように使えるようにしてしまおうかと思います。
すでにerbでそういう名前で短縮名が使われているので、
新規に仕様を作るまでもなく真似します。
また、今は ERB::Util#h は実体がCGI.escapeHTMLですし。

メンテナが私なので反対がなければ入れたいと思います。

Issue #8354 has been updated by mame (Yusuke E.).

CGI でも、いわゆるロジックっぽい部分で h を使うのは推奨されないと思うんですが、
確かに CGI の html 生成の部分は、ERB と同じ理由で短い名前が欲しそうですね。

納得しました。賛成しないのを取り下げます。


Yusuke E. [email protected]

Feature #8354: lib/cgi/util.rb を関数としても使えるようにしたい

Author: xibbar (Takeyuki FUJIOKA)
Status: Open
Priority: Normal
Assignee: xibbar (Takeyuki FUJIOKA)
Category: lib
Target version: current: 2.1.0

cgi/util.rb には CGI.escapeHTML などのメソッドがあります。
これらを使うにはCGI.escapeHTML(str) みたいにして
いちいち全部書かなきゃならなくて、
長いと思っています。
erbを使っている人なら include ERB::Util すると h(str) と使えるのですが、
私はerb使わずに素のCGIを書いているので、hが使えず不便でした。
なので、中身をutil.rb の中身を丸ごとmoduleにして
include CGI::Util すれば、escapeHTMLが使えて、
さらにescapeHTML にhをエイリアスにして、
erbと同じように使えるようにしてしまおうかと思います。
すでにerbでそういう名前で短縮名が使われているので、
新規に仕様を作るまでもなく真似します。
また、今は ERB::Util#h は実体がCGI.escapeHTMLですし。

メンテナが私なので反対がなければ入れたいと思います。