String#{escape_html, unescape_html, escape, unescape} をつけたい
cgi/util にはいろんな人が使っているだろうメソッドがあって、
CGI::escape_html, CGI::unescape_html, CGI::escape, CGI::unescapeです。
これはStringに関する操作なのですが、
やっぱり関数的なのは好きじゃなくて、長年好きじゃないなと思っていました。
なので、require 'cgi/util' されたら
Stringにメソッドがくっついてしまうというのは
よいのではないかと思い、実装してみました。
--- a/lib/cgi/util.rb +++ b/lib/cgi/util.rb @@ -195,4 +195,26 @@ class CGI end lines.gsub(/^((?:#{Regexp::quote(shift)})*)__(?=<\/?\w)/, '\1') end + + class ::String + def escapeHTML + CGI::escapeHTML(self) + end + + def unescapeHTML + CGI::unescapeHTML(self) + end + + alias escape_html escapeHTML + alias unescape_html unescapeHTML + + def escape + CGI::escape(self) + end + + def unescape(charset=nil) + charset ? CGI::unescape(self, charset) : CGI::unescape(self) + end + + end end
こうやると、
% ruby -rcgi/util -e "puts CGI::unescape('%E7%99%BD%E3%81%A0%E3%81%97')" 白だし
こんな書き方をしていたのが、
% ruby -rcgi/util -e "puts '%E7%99%BD%E3%81%A0%E3%81%97'.unescape" 白だし
と書けるわけです。
Stringにくっつけるので、慎重にやらなければいけないのですが、
カッコイイと思う人はどれくらいいますかね。
requireするだけでくっつくのはやめとけという意見もあると思うので
その時は include CGI::Util とかでStringにくっつけるとか。
賛同者が多かったら
テスト書いて、ドキュメント書いて、Changelog書いてコミットだ。