[#47529] ruby1.9.2 にて、 IO#reopen で第2引数を省略したときにモードが引き継がれない — jugyo kohno <kkohno@...>

jugyo と申します

11 messages 2010/10/08
[#47562] Re: ruby1.9.2 にて、 IO#reopen で第2引数を省略したときにモードが引き継がれない — "Y. NOBUOKA" <nobuoka@...> 2010/10/15

信岡です。

[#47537] Excel用のxmlssファイルを作成するライブラリ exlap_c — "YOSHIIZUMI" <t-yoshiizumi@...>

 吉泉といいます。

11 messages 2010/10/10

[ruby-list:47514] Re: eRuby における % 行

From: "5.5" <5.5@...>
Date: 2010-10-02 14:19:34 UTC
List: ruby-list #47514
5.5 です。Erubis にお世話になっているほか,Perl のお仕事で
Tenjin を使わせていただいております。

>> ・なぜ % 行記法がダメなのか
> 
> 推測しますと、「%」は行頭にないとだめでインデントはできないから、
> インデントしまくりのHTMLとは相性が悪いからじゃないでしょうか。

なるほど,そういう見方もあるのですね。
私の目には,「%」自体は行頭でも,そのあとをインデントすれ
ば読みやすいと感じ,むしろ <% -%> で囲むほうがごちゃごちゃ
して読みづらい気がするのですが,人によりけりなのでしょうね。
※あ,ちなみに私の目には,HTML タグのインデントと Ruby の
インデントが独立でも一向に構わないのですが,人によってはそ
ういう書き方は読みにくいのでしょうね。

>> module Erubis
>>   class Eruby
>>     include PercentLineEnhancer
>>   end
>> end
> 
> これはうまくいかないでしょう。
> Erubis::Erubyのサブクラスを作って、そこにincludeしないとだめなはず。
> 理由:PercentLineEnhancerは、Erubyクラスのメソッドを上書きすることで
> 機能を実現しています。しかしErubyクラスに直接includeしても
> Erubyクラスのメソッドを上書きすることにはなりません。
> (逆に、PercentLineEnhancerのメソッドをErubyクラスが上書きする格好になる。)

えっ!? そうですか。いままで自分のスクリプトでは以下のよう
に include して使っていました。

----
require 'rubygems'
require 'erubis'

module Erubis
  class Eruby
    include PercentLineEnhancer
  end
end

puts Erubis::Eruby.new(<<EOT).result
monolith
% (1..3).each do |i|
 edge <%= i %>: <%= i**2 %>
% end
EOT
----

これで期待どおりに動いています。
余裕ができたら Erubis のソースを見て考えてみます。

>> ・Rails 3(というか Rails の Erubis)で % 行記法を使う方法
>> の二点です。
> 
> 具体的なやり方は自分も分かりませんが、Rails3は内部でErubisを
> カスタマイズしてるので、それを考慮すればできるかもしれません。
> 今、Rails3のソースにgrepをかけると
> actionpack/lib/action_view/template/handlers/erb.rb
> actionpack/test/template/erb/helper.rb
> にErubisをカスタマイズしているコードがありました。

ありがとうございます。
この箇所を見て考えてみます。

-- 
5.5@moji.gr.jp

In This Thread

Prev Next