From: Makoto Kuwata Date: 2011-02-23T22:05:24+09:00 Subject: [ruby-list:47922] Erubis新機能予告 (Re: eRuby における % 行) 桑田です。Erubisについてのお知らせです。 以前、5.5氏が、  ぶっちゃけ、「<% %>」より「%」だけのほうが簡単じゃね? という話をされてましたが、確かに一理あると思い、Erubisの次の リリースでは行頭に「%」を使う記法を拡張し、インデントできる ようにします。また記号も選べるようにします。 input = < % for item in @items
  • <%= item %>
  • % end # インデント可能 END class MyEruby < Erubis::Eruby include Erubis::PrefixedLineEnhancer end eruby = MyEruby.new(input, :prefixchar=>'%') # デフォルトは '%' print eruby.evaluate(:items=>%w[Haruhi Mikuru Yuki]) もうひとつの新機能として、変換後のRubyコードで使われるバッファ 変数の名前を、デフォルトの '_buf' から変更できるようにします。 これは、Padrino (Sinatraを拡張したフレームワーク) 方面からの 要請です。 # '_buf' のかわりに '@_out' を使う eruby = Erubis::Eruby.new(input, :bufname=>'@_out') ほかに「こんな機能が欲しい」というのがもしあれば、今のうちに おしらせください。 2010/10/2 5.5 <5.5@moji.gr.jp>: >>> module Erubis >>> class Eruby >>> include PercentLineEnhancer >>> end >>> end >> >> これはうまくいかないでしょう。 >> Erubis::Erubyのサブクラスを作って、そこにincludeしないとだめなはず。 >> 理由:PercentLineEnhancerは、Erubyクラスのメソッドを上書きすることで >> 機能を実現しています。しかしErubyクラスに直接includeしても >> Erubyクラスのメソッドを上書きすることにはなりません。 >> (逆に、PercentLineEnhancerのメソッドをErubyクラスが上書きする格好になる。) > > えっ!? そうですか。いままで自分のスクリプトでは以下のよう > に include して使っていました。 > > ---- > ..(snip)... > ---- > > これで期待どおりに動いています。 > 余裕ができたら Erubis のソースを見て考えてみます。 これはこちらのほうが間違ってました。 Erubis::Erubyは、その機能のほとんどを、別のモジュールをinclude することで実現しています。そのため、Erubis::Erubyのサブクラスを 作らなくても、Erubis::Erubyにincludeしてやれば、うまく動作します。 というか、サブクラスを作らなくても済むような設計になってますね。 やるなあErubis。 > 5.5 です。Erubis にお世話になっているほか,Perl のお仕事で > Tenjin を使わせていただいております。 なんという勇者。 余談ですが、開発バージョンのPerl Tenjinは、Ruby TenjinやPython Tenjinと 比べて、ベンチマークでなんと4倍以上の速度を叩きだしました。 あまりの速さにびっくりです。 #ベンチマーク結果は http://slidesha.re/h05Vjm の54枚目にあります。 あとRailsで「%」記法を使うやり方は調べてません。すみません。 -- regards, makoto kuwata