okkez
okkez****@gmail*****
2009年 8月 30日 (日) 00:14:56 JST
okkez です。 デッドコピーというとこんな感じでしょうか? また他の似たようなメソッドはいいんでしょうか? できれば、Hiki::Util#escape, Hiki::Util#unescape にしときたいなぁ、と思うのですが いかがでしょうか。 今のプラグインでは CGI.escape も String#escape も使われているので、どうせ修正するなら Hiki::Util のメソッドを使うように修正しておきたいです。 Rack を使っている時に CGI というクラスが定義されているのがあまり気持ちよくないです。 ちなみに手元では、プラグインも attach を含めてほぼ全てのプラグインが Rack を使った実装で 動くようになりました。 diff --git a/hiki/util.rb b/hiki/util.rb index 8372928..7669e9f 100644 --- a/hiki/util.rb +++ b/hiki/util.rb @@ -8,6 +8,32 @@ require 'erb' autoload( :Document, 'docdiff' ) autoload( :Diff, 'docdiff' ) +if const_defined?(:Encoding) + require 'cgi/util' +else + # dead copy from cgi.rb for Ruby1.8 + class CGI + # URL-encode a string. + # url_encoded_string = CGI::escape("'Stop!' said Fred") + # # => "%27Stop%21%27+said+Fred" + def CGI::escape(string) + string.gsub(/([^ a-zA-Z0-9_.-]+)/n) do + '%' + $1.unpack('H2' * $1.size).join('%').upcase + end.tr(' ', '+') + end + + + # URL-decode a string. + # string = CGI::unescape("%27Stop%21%27+said+Fred") + # # => "'Stop!' said Fred" + def CGI::unescape(string) + string.tr('+', ' ').gsub(/((?:%[0-9a-fA-F]{2})+)/n) do + [$1.delete('%')].pack('H*') + end + end + end +end + class String # all instance methods added in String class will be obsoleted in the # future release. -- okkez okkez****@gmail*****