Config = { # 対応するメディアタイプの拡張子 :typemap => %w(xhtml html atom json) } class Resource Config[:typemap].each do |i| # Resource#to_xhtml, Resource#to_html, ... を定義する define_method("to_#{i}") do # Resource#to_xml はコアで対応させておく xslt_processor.load(:source => self.to_xml, :template => open("flavour.#{i}.xslt")) xslt_processor.transform end end def xslt_processor @xslt_processor ||= XSLT::Processor.new # てきとーなラッパ end end def get resource = Resource.new media_type = headers.negotiate(:accept) # 適切な to_hoge メソッドへ resource.__send__("to_#{media_type}") end
ビューっぽいけどモデルっぽいような気もする。とか MVC をきっちり理解していないやつが言う。
Resource#xslt_processor みたいなアクセサの書き方をよくするんだけど、どうなんだろう。いや、 ||= という代入の仕方はメジャーだとおもうけど、アクセサではどうなんだろうっていう。
HTTP のリクエスト (とリクエスト) をあらわすクラスを作って、コントローラにそれぞれのインスタンスを持たせるようにしているんだけど、リクエストのインスタンスに触る必要がまったくないとき (単に Hello World するときとか) はインスタンスを作らないようにするという。
gdgd と説明ぽいことしたけど、よくかんがえたらありふれているよなあ。ばかばかしい。
でも ||= がどういうもんなのかを知った上で勝手に思いついたので気に入っている。おれってあたまいーみたいな。