class ActionView::FixtureResolver

Use FixtureResolver in your tests to simulate the presence of files on the file system. This is used internally by Rails' own test suite, and is useful for testing extensions that have no way of knowing what the file system will look like at runtime.

Public Class Methods

new(hash = {}, pattern = nil) click to toggle source
Calls superclass method ActionView::FileSystemResolver.new
# File lib/action_view/testing/resolvers.rb, line 10
def initialize(hash = {}, pattern = nil)
  super("")
  if pattern
    ActiveSupport::Deprecation.warn "Specifying a custom path for #{self.class} is deprecated. Implement a custom Resolver subclass instead."
    @pattern = pattern
  end
  @hash = hash
  @path = ""
end

Public Instance Methods

data() click to toggle source
# File lib/action_view/testing/resolvers.rb, line 20
def data
  @hash
end
to_s() click to toggle source
# File lib/action_view/testing/resolvers.rb, line 24
def to_s
  @hash.keys.join(", ")
end

Private Instance Methods

query(path, exts, _, locals, cache:) click to toggle source
# File lib/action_view/testing/resolvers.rb, line 30
def query(path, exts, _, locals, cache:)
  regex = build_regex(path, exts)

  @hash.select do |_path, _|
    ("/" + _path).match?(regex)
  end.map do |_path, source|
    handler, format, variant = extract_handler_and_format_and_variant(_path)

    Template.new(source, _path, handler,
      virtual_path: path.virtual,
      format: format,
      variant: variant,
      locals: locals
    )
  end.sort_by do |t|
    match = ("/" + t.identifier).match(regex)
    EXTENSIONS.keys.reverse.map do |ext|
      if ext == :variants && exts[ext] == :any
        match[ext].nil? ? 0 : 1
      elsif match[ext].nil?
        exts[ext].length
      else
        found = match[ext].to_sym
        exts[ext].index(found)
      end
    end
  end
end