lib/dry/view/renderer.rb in dry-view-0.6.0 vs lib/dry/view/renderer.rb in dry-view-0.7.0

- old
+ new

@@ -1,9 +1,10 @@ # frozen_string_literal: true require "dry/core/cache" require "dry/equalizer" +require_relative "errors" require_relative "tilt" module Dry class View # @api private @@ -13,34 +14,37 @@ extend Dry::Core::Cache include Dry::Equalizer(:paths, :format, :engine_mapping, :options) - TemplateNotFoundError = Class.new(StandardError) - attr_reader :paths, :format, :engine_mapping, :options def initialize(paths, format:, engine_mapping: nil, **options) @paths = paths @format = format @engine_mapping = engine_mapping || {} @options = options end - def template(name, scope, &block) - path = lookup(name) + def template(name, scope, **lookup_options, &block) + path = lookup(name, **lookup_options) if path render(path, scope, &block) else - msg = "Template #{name.inspect} could not be found in paths:\n#{paths.map { |pa| "- #{pa.to_s}" }.join("\n")}" - raise TemplateNotFoundError, msg + raise TemplateNotFoundError.new(name, paths) end end def partial(name, scope, &block) - template(name_for_partial(name), scope, &block) + template( + name_for_partial(name), + scope, + child_dirs: %w[shared], + parent_dir: true, + &block + ) end def render(path, scope, &block) tilt(path).render(scope, &block) end @@ -49,17 +53,17 @@ new_paths = paths.map { |path| path.chdir(dirname) } self.class.new(new_paths, format: format, **options) end - def lookup(name) - paths.inject(false) { |_, path| - result = path.lookup(name, format, include_shared: false) + private + + def lookup(name, **options) + paths.inject(nil) { |_, path| + result = path.lookup(name, format, **options) break result if result } end - - private def name_for_partial(name) name_segments = name.to_s.split(PATH_DELIMITER) name_segments[0..-2].push("#{PARTIAL_PREFIX}#{name_segments[-1]}").join(PATH_DELIMITER) end