class Hanami::View::Renderer

@api private @since 2.1.0

Constants

CURRENT_PATH_PREFIX

@api private @since 2.1.0

PARTIAL_PREFIX

@api private @since 2.1.0

PATH_DELIMITER

@api private @since 2.1.0

Attributes

config[R]

@api private @since 2.1.0

prefixes[R]

@api private @since 2.1.0

Public Class Methods

new(config) click to toggle source

@api private @since 2.1.0

# File lib/hanami/view/renderer.rb, line 28
def initialize(config)
  @config = config
  @prefixes = [CURRENT_PATH_PREFIX]
end

Public Instance Methods

partial(name, format, scope, &block) click to toggle source

@api private @since 2.1.0

# File lib/hanami/view/renderer.rb, line 52
def partial(name, format, scope, &block)
  template(name_for_partial(name), format, scope, &block)
end
template(name, format, scope, &block) click to toggle source

@api private @since 2.1.0

# File lib/hanami/view/renderer.rb, line 35
def template(name, format, scope, &block)
  old_prefixes = @prefixes.dup

  template_path = lookup(name, format)

  raise TemplateNotFoundError.new(name, format, config.paths) unless template_path

  new_prefix = File.dirname(name)
  @prefixes << new_prefix unless @prefixes.include?(new_prefix)

  render(template_path, scope, &block)
ensure
  @prefixes = old_prefixes
end

Private Instance Methods

lookup(name, format) click to toggle source
# File lib/hanami/view/renderer.rb, line 58
def lookup(name, format)
  View.cache.fetch_or_store(:lookup, name, format, config, prefixes) {
    catch :found do
      config.paths.reduce(nil) do |_, path|
        prefixes.reduce(nil) do |_, prefix|
          result = path.lookup(prefix, name, format)
          throw :found, result if result
        end
      end
    end
  }
end
name_for_partial(name) click to toggle source
# File lib/hanami/view/renderer.rb, line 71
def name_for_partial(name)
  segments = name.to_s.split(PATH_DELIMITER)
  segments[-1] = "#{PARTIAL_PREFIX}#{segments[-1]}"
  segments.join(PATH_DELIMITER)
end
render(path, scope, &block) click to toggle source
# File lib/hanami/view/renderer.rb, line 77
def render(path, scope, &block)
  tilt(path).render(scope, {locals: scope._locals}, &block).html_safe
end
tilt(path) click to toggle source
# File lib/hanami/view/renderer.rb, line 81
def tilt(path)
  View.cache.fetch_or_store(:tilt, path, config) {
    Hanami::View::Tilt[path, config.renderer_engine_mapping, config.renderer_options]
  }
end