class ActionView::OptimizedFileSystemResolver

:nodoc:
An Optimized resolver for Rails’ most common case.

def build_regex(path, details)

def build_regex(path, details)
  query = Regexp.escape(File.join(@path, path))
  exts = EXTENSIONS.map do |ext, prefix|
    match =
      if ext == :variants && details[ext] == :any
        ".*?"
      else
        arr = details[ext].compact
        arr.uniq!
        arr.map! { |e| Regexp.escape(e) }
        arr.join("|")
      end
    prefix = Regexp.escape(prefix)
    "(#{prefix}(?<#{ext}>#{match}))?"
  end.join
  %r{\A#{query}#{exts}\z}
end

def find_candidate_template_paths(path)

def find_candidate_template_paths(path)
  # Instead of checking for every possible path, as our other globs would
  # do, scan the directory for files with the right prefix.
  query = "#{escape_entry(File.join(@path, path))}*"
  Dir[query].reject do |filename|
    File.directory?(filename)
  end
end

def find_template_paths_from_details(path, details)

def find_template_paths_from_details(path, details)
  if path.name.include?(".")
    # Fall back to the unoptimized resolver, which will warn
    return super
  end
  candidates = find_candidate_template_paths(path)
  regex = build_regex(path, details)
  candidates.uniq.reject do |filename|
    # This regex match does double duty of finding only files which match
    # details (instead of just matching the prefix) and also filtering for
    # case-insensitive file systems.
    !regex.match?(filename) ||
      File.directory?(filename)
  end.sort_by do |filename|
    # Because we scanned the directory, instead of checking for files
    # one-by-one, they will be returned in an arbitrary order.
    # We can use the matches found by the regex and sort by their index in
    # details.
    match = filename.match(regex)
    EXTENSIONS.keys.map do |ext|
      if ext == :variants && details[ext] == :any
        match[ext].nil? ? 0 : 1
      elsif match[ext].nil?
        # No match should be last
        details[ext].length
      else
        found = match[ext].to_sym
        details[ext].index(found)
      end
    end
  end
end

def initialize(path)

:nodoc:
An Optimized resolver for Rails' most common case.
def initialize(path)
  super(path)
end