module ActionView::LookupContext::ViewPaths

Helpers related to template lookup using the lookup context information.

Attributes

html_fallback_for_js[R]
view_paths[R]

Public Instance Methods

any?(name, prefixes = [], partial = false) click to toggle source
# File lib/action_view/lookup_context.rb, line 143
def any?(name, prefixes = [], partial = false)
  name, prefixes = normalize_name(name, prefixes)
  details, details_key = detail_args_for_any
  @view_paths.exists?(name, prefixes, partial, details, details_key, [])
end
Also aliased as: any_templates?
any_templates?(name, prefixes = [], partial = false)
Alias for: any?
exists?(name, prefixes = [], partial = false, keys = [], **options) click to toggle source
# File lib/action_view/lookup_context.rb, line 136
def exists?(name, prefixes = [], partial = false, keys = [], **options)
  name, prefixes = normalize_name(name, prefixes)
  details, details_key = detail_args_for(options)
  @view_paths.exists?(name, prefixes, partial, details, details_key, keys)
end
Also aliased as: template_exists?
find(name, prefixes = [], partial = false, keys = [], options = {}) click to toggle source
# File lib/action_view/lookup_context.rb, line 123
def find(name, prefixes = [], partial = false, keys = [], options = {})
  name, prefixes = normalize_name(name, prefixes)
  details, details_key = detail_args_for(options)
  @view_paths.find(name, prefixes, partial, details, details_key, keys)
end
Also aliased as: find_template
find_all(name, prefixes = [], partial = false, keys = [], options = {}) click to toggle source
# File lib/action_view/lookup_context.rb, line 130
def find_all(name, prefixes = [], partial = false, keys = [], options = {})
  name, prefixes = normalize_name(name, prefixes)
  details, details_key = detail_args_for(options)
  @view_paths.find_all(name, prefixes, partial, details, details_key, keys)
end
find_template(name, prefixes = [], partial = false, keys = [], options = {})
Alias for: find
template_exists?(name, prefixes = [], partial = false, keys = [], **options)
Alias for: exists?

Private Instance Methods

build_view_paths(paths) click to toggle source

Whenever setting view paths, makes a copy so that we can manipulate them in instance objects as we wish.

# File lib/action_view/lookup_context.rb, line 153
def build_view_paths(paths)
  ActionView::PathSet.new(Array(paths))
end
detail_args_for(options) click to toggle source

Compute details hash and key according to user options (e.g. passed from render).

# File lib/action_view/lookup_context.rb, line 158
def detail_args_for(options) # :doc:
  return @details, details_key if options.empty? # most common path.
  user_details = @details.merge(options)

  if @cache
    details_key = DetailsKey.details_cache_key(user_details)
  else
    details_key = nil
  end

  [user_details, details_key]
end
detail_args_for_any() click to toggle source
# File lib/action_view/lookup_context.rb, line 171
def detail_args_for_any
  @detail_args_for_any ||= begin
    details = {}

    LookupContext.registered_details.each do |k|
      if k == :variants
        details[k] = :any
      else
        details[k] = Accessors::DEFAULT_PROCS[k].call
      end
    end

    if @cache
      [details, DetailsKey.details_cache_key(details)]
    else
      [details, nil]
    end
  end
end
normalize_name(name, prefixes) click to toggle source

Fix when prefix is specified as part of the template name

# File lib/action_view/lookup_context.rb, line 192
def normalize_name(name, prefixes)
  name = name.to_s
  idx = name.rindex("/")
  return name, prefixes.presence || [""] unless idx

  path_prefix = name[0, idx]
  path_prefix = path_prefix.from(1) if path_prefix.start_with?("/")
  name = name.from(idx + 1)

  if !prefixes || prefixes.empty?
    prefixes = [path_prefix]
  else
    prefixes = prefixes.map { |p| "#{p}/#{path_prefix}" }
  end

  return name, prefixes
end