シェアコード

準備する

私たちの設定(apps/web/application.rb)には、アプリケーションのすべてのビューのコードを共有できるコードブロックがあります。ビューにWeb::Viewモジュールが含まれている場合、そのブロックコードはそのクラスのコンテキスト内で生成されます。これはRubyモジュールとそのincludedフックに大きく影響されています。

JSONだけをレンダリングするアプリケーションがあるとします。各ビューについて、処理される形式を指定する必要があります。これは手間がかかりますが、コードを簡単に削除することができます。

私たちはモジュールを作りapps/web/views/accept_json.rbます。

# apps/web/views/accept_json.rb
module Web::Views
  module AcceptJson
    def self.included(view)
      view.class_eval do
        format :json
      end
    end
  end
end

その後、私たちは、アプリケーションのすべてのビューにviaを含めview.prepareます。

# apps/web/application.rb
module Web
  class Application < Hanami::Application
    configure do
      # ...
      view.prepare do
        include Web::Views::AcceptJson
      end
    end
  end
end

via prepareに含まれるコードは、アプリケーションのすべてのビューで使用できます。