Sha256: 4fe7786f1e46b8e8d07fc66dbd0ca76b0ce30965d4aa00c209c34c4ec8ac4913

Contents?: true

Size: 1.89 KB

Versions: 1

Compression:

Stored size: 1.89 KB

Contents

require 'hanami/view/rendering/template_finder'

module Hanami
  module View
    module Rendering
      # Find a partial for the current view context.
      # It's used when a template wants to render a partial.
      #
      # @see Hanami::View::Rendering::Partial
      # @see Hanami::View::Rendering::TemplateFinder
      #
      # @api private
      # @since 0.1.0
      class PartialFinder < TemplateFinder
        # Template file name prefix.
        # By convention a partial file name starts with this prefix.
        #
        # @api private
        # @since 0.1.0
        #
        # @example
        #   "_sidebar.html.erb"
        PREFIX = '_'.freeze

        # Find a template for a partial. Initially it will look for the
        # partial template under the directory of the parent directory 
        # view template, if not found it will search recursivly from 
        # the view root.
        #
        # @return [Hanami::View::Template] the requested template
        #
        # @see Hanami::View::Rendering::TemplateFinder#find
        #
        # @since 0.4.3
        # @api private
        def find
          if path = partial_template_under_view_path
            View::Template.new(path, @view.configuration.default_encoding)
          else
            super
          end
        end

        protected
        # @since 0.4.3
        # @api private
        def partial_template_under_view_path
          _find(view_template_dir).first
        end

        # @since 0.4.3
        # @api private
        def view_template_dir
          *all, _ = @view.template.split(separator)
          all.join(separator)
        end

        def template_name
          *all, last = partial_name.split(separator)
          all.push( last.prepend(prefix) ).join(separator)
        end

        def partial_name
          @options[:partial]
        end

        def prefix
          PREFIX
        end
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
hanami-view-0.6.0 lib/hanami/view/rendering/partial_finder.rb