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 actionview/lib/action_view/lookup_context.rb, line 133
def any?(name, prefixes = [], partial = false)
  @view_paths.exists?(*args_for_any(name, prefixes, partial))
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 actionview/lib/action_view/lookup_context.rb, line 128
def exists?(name, prefixes = [], partial = false, keys = [], **options)
  @view_paths.exists?(*args_for_lookup(name, prefixes, partial, keys, options))
end
Also aliased as: template_exists?
find(name, prefixes = [], partial = false, keys = [], options = {}) click to toggle source
# File actionview/lib/action_view/lookup_context.rb, line 115
def find(name, prefixes = [], partial = false, keys = [], options = {})
  @view_paths.find(*args_for_lookup(name, prefixes, partial, keys, options))
end
Also aliased as: find_template
find_all(name, prefixes = [], partial = false, keys = [], options = {}) click to toggle source
# File actionview/lib/action_view/lookup_context.rb, line 124
def find_all(name, prefixes = [], partial = false, keys = [], options = {})
  @view_paths.find_all(*args_for_lookup(name, prefixes, partial, keys, options))
end
find_file(name, prefixes = [], partial = false, keys = [], options = {}) click to toggle source
# File actionview/lib/action_view/lookup_context.rb, line 120
def find_file(name, prefixes = [], partial = false, keys = [], options = {})
  @view_paths.find_file(*args_for_lookup(name, prefixes, partial, keys, options))
end
find_template(name, prefixes = [], partial = false, keys = [], options = {})
Alias for: find
template_exists?(name, prefixes = [], partial = false, keys = [], **options)
Alias for: exists?
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 actionview/lib/action_view/lookup_context.rb, line 111
def view_paths=(paths)
  @view_paths = ActionView::PathSet.new(Array(paths))
end
with_fallbacks() { || ... } click to toggle source

Adds fallbacks to the view paths. Useful in cases when you are rendering a :file.

# File actionview/lib/action_view/lookup_context.rb, line 140
def with_fallbacks
  added_resolvers = 0
  self.class.fallbacks.each do |resolver|
    next if view_paths.include?(resolver)
    view_paths.push(resolver)
    added_resolvers += 1
  end
  yield
ensure
  added_resolvers.times { view_paths.pop }
end

Private Instance Methods

args_for_any(name, prefixes, partial) click to toggle source
# File actionview/lib/action_view/lookup_context.rb, line 174
def args_for_any(name, prefixes, partial)
  name, prefixes = normalize_name(name, prefixes)
  details, details_key = detail_args_for_any
  [name, prefixes, partial || false, details, details_key]
end
args_for_lookup(name, prefixes, partial, keys, details_options) click to toggle source
# File actionview/lib/action_view/lookup_context.rb, line 154
def args_for_lookup(name, prefixes, partial, keys, details_options)
  name, prefixes = normalize_name(name, prefixes)
  details, details_key = detail_args_for(details_options)
  [name, prefixes, partial || false, details, details_key, keys]
end
detail_args_for(options) click to toggle source

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

# File actionview/lib/action_view/lookup_context.rb, line 161
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.get(user_details)
  else
    details_key = nil
  end

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

    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.get(details)]
    else
      [details, nil]
    end
  end
end
normalize_name(name, prefixes) click to toggle source

Support legacy foo.erb names even though we now ignore .erb as well as incorrectly putting part of the path in the template name instead of the prefix.

# File actionview/lib/action_view/lookup_context.rb, line 203
def normalize_name(name, prefixes)
  prefixes = prefixes.presence
  parts    = name.to_s.split("/".freeze)
  parts.shift if parts.first.empty?
  name = parts.pop

  return name, prefixes || [""] if parts.empty?

  parts    = parts.join("/".freeze)
  prefixes = prefixes ? prefixes.map { |p| "#{p}/#{parts}" } : [parts]

  return name, prefixes
end