仕事で、サブドメインやドメインごとに、レンダリングするテンプレートを切り替えたい事があり、せっかくなので、Gemにしてみた。
既にどっかにありそうな感じが凄くするのだが、パっとググってもgemは見つからなかった。
最近、こんな感じの非常にしょぼいGemを作るのが趣味になってきた気がする。
GitHub - joker1007/template-switcher: Rails template switcher.
中身は、initializerで定義しておいたpathのマッピングに合わせて、prepend_view_pathしているだけ。
マッピングの定義やテンプレートの用意が無ければ、普通にapp/viewsの下を見にいくので、基本的には共通のテンプレを使いつつ、特定の処理だけテンプレごと差し替えたい、という時に使う・・・のかな?
initializerでこんな感じに書いておいて、
TemplateSwitcher.mapping = { "abc.example.domain" => "abc_views", "xyz.example.domain" => "xyz_views", }
controllerでモジュールをincludeする
class PostsController < ApplicationController include TemplateSwitcher::AutoRenderSwitcher def index render "index" end private def template_selector request.host end end
そうすれば、renderのタイミングで勝手に、app/abc_viewsとか見にいってくれる。
今回、gemの中身はさておき、テストをどうやって書くのかで、非常に勉強になった。
deviseとkaminariを参考に、フェイクのRailsアプリを作り、rspec-railsが用意しているコントローラーテスト向けの拡張を手動でインクルードして、
という感じで、テスト環境の構築の方が実装の倍ぐらい時間かかった。