class Curly::TemplateHandler

Public Class Methods

cache_if_key_is_not_nil(context, presenter) { || ... } click to toggle source
# File lib/curly/template_handler.rb, line 30
def cache_if_key_is_not_nil(context, presenter)
  if key = presenter.cache_key
    if presenter.class.respond_to?(:cache_key)
      presenter_key = presenter.class.cache_key
    else
      presenter_key = nil
    end

    cache_options = presenter.cache_options || {}
    cache_options[:expires_in] ||= presenter.cache_duration

    context.cache([key, presenter_key].compact, cache_options) do
      yield
    end
  else
    yield
  end
end
call(template) click to toggle source
# File lib/curly/template_handler.rb, line 17
def call(template)
  instrument(template) do
    compile_for_actionview5(template)
  end
end

Private Class Methods

compile(template, source) click to toggle source
# File lib/curly/template_handler.rb, line 55
    def compile(template, source)
      # Template source is empty, so there's no need to initialize a presenter.
      return %("") if source.empty?

      path = template.virtual_path
      presenter_class = Curly::Presenter.presenter_for_path(path)

      raise Curly::PresenterNotFound.new(path) if presenter_class.nil?

      compiled_source = Curly.compile(source, presenter_class)

      <<-RUBY
      if local_assigns.empty?
        options = assigns
      else
        options = local_assigns
      end

      presenter = ::#{presenter_class}.new(self, options)
      presenter.setup!

      @output_buffer = output_buffer || ActiveSupport::SafeBuffer.new

      Curly::TemplateHandler.cache_if_key_is_not_nil(self, presenter) do
        result = #{compiled_source}
        safe_concat(result)
      end

      @output_buffer
      RUBY
    end
compile_for_actionview5(template) click to toggle source
# File lib/curly/template_handler.rb, line 51
def compile_for_actionview5(template)
  compile(template, template.source)
end
instrument(template, &block) click to toggle source
# File lib/curly/template_handler.rb, line 87
def instrument(template, &block)
  payload = { path: template.virtual_path }
  ActiveSupport::Notifications.instrument("compile.curly", payload, &block)
end