2011年2月23日

[ruby-list:47922] Erubis新機能予告 (Re: eRuby における % 行)

桑田です。Erubisについてのお知らせです。

以前、5.5氏が、

 ぶっちゃけ、「<% %>」より「%」だけのほうが簡単じゃね?

という話をされてましたが、確かに一理あると思い、Erubisの次の
リリースでは行頭に「%」を使う記法を拡張し、インデントできる

ようにします。また記号も選べるようにします。

input = <<END
<ul>
% for item in @items
<li><%= item %></li>
% end # インデント可能
</ul>
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@xxxxx>:
>>> 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


投稿者 xml-rpc : 2011年2月23日 22:05
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/102253
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。