読者です 読者をやめる 読者になる 読者になる

String#{escape_html, unescape_html, escape, unescape} をつけたい

Ruby

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書いてコミットだ。