Ruby on Railsで独自のテンプレートハンドラを追加する

viewにおいて普通は拡張子 .erbをつけてると思いますが、これはerbをハンドルするハンドラで描画するという意味。ここに独自のハンドラを追加するにはこうやるとよいようです

適当にハンドラクラス(たとえばHoge::Handler)というのを作り

ActionView::Template.register_template_handler(:hoge, Hoge::Handler)

で登録する。これで拡張子hogeのついたviewはHoge::Handlerで描画します。はい終了。Rails3.2で確認しました

で、肝心のHoge::Handlerなんですが

module Hoge
  class Handler
    def self.call(template)
      new.call(template)
    end

    def call(template)
      "'" + template.source "';"
    end
  end
end

のように self.callを実装するだけでよいようです。(何も変換せずにそのまま出力するコードですが) なお、上のコードだとシングルクオートやバックスラッシュが入ってきたときにエラーになるので、そこのとこだけちょっと工夫する必要がありますが本質的ではないので割愛しました。