Sha256: 893ac7f87f214bf9eedd16b4b2562b407600aff2cbd925f0874fb4599d7939cb

Contents?: true

Size: 1.76 KB

Versions: 6

Compression:

Stored size: 1.76 KB

Contents

require 'coprl/presenters/views'

class CoprlTemplateHandler
  if Rails.version.starts_with?('5')
    def call(template)
      erb = ActionView::Template.registered_template_handler(:erb)
      web_erb = File.read(Coprl::Presenters::Views.web_erb_path)
      template = ActionView::Template.new(web_erb, Coprl::Presenters::Views.web_erb, erb, {})
      source = erb.call(template)
      presenter_template(source)
    end
  else ## Rails 6 and greater
    def call(template, _source)
      erb = ActionView::Template.registered_template_handler(:erb)
      web_erb = File.read(Coprl::Presenters::Views.web_erb_path)
      source = erb.call(template, web_erb)
      presenter_template(source)
    end
  end

  def presenter_template(source)
    # Magic -- we must return callable ruby -- by putting a begin and end block around the erb evalulation/call above it works.
    # Without the begin;;end -- no go
    <<-SOURCE
      begin
      unless @pom
        # if we are called as a partial fetch the presenter name passed 
        # otherwise we need to get the presenter name built from params
        presenter_name = local_assigns[:presenter] ? presenter : namespaced_presenter(params)
        presenter = Coprl::Presenters::App[presenter_name].call
        context = self.controller.prepare_context(params)
        router = Coprl::Presenters::WebClient::Router.new(base_url: request.base_url)
        plugins = self.controller.class.plugins
      
        @pom = presenter.expand(router: router, context: context, plugins: plugins)
      end
      #{source}
      end
    SOURCE
  end
end

ActiveSupport.on_load(:action_controller){ append_view_path(Coprl::Presenters::Views.view_path) if respond_to?(:append_view_path) }
ActionView::Template.register_template_handler(:pom, CoprlTemplateHandler.new)

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
coprl-3.0.0.beta.12 rails-engine/config/initializers/presenters.rb
coprl-3.0.0.beta.11 rails-engine/config/initializers/presenters.rb
coprl-3.0.0.beta.10 rails-engine/config/initializers/presenters.rb
coprl-3.0.0.beta.9 rails-engine/config/initializers/presenters.rb
coprl-3.0.0.beta.8 rails-engine/config/initializers/presenters.rb
coprl-3.0.0.beta.7 rails-engine/config/initializers/presenters.rb