1
0
Fork 0
mirror of https://github.com/rails/rails.git synced 2022-11-09 12:12:34 -05:00
rails--rails/actionview/lib/action_view/testing/resolvers.rb
2019-06-30 02:23:08 +09:00

66 lines
2 KiB
Ruby

# frozen_string_literal: true
require "action_view/template/resolver"
module ActionView #:nodoc:
# 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.
class FixtureResolver < OptimizedFileSystemResolver
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
def data
@hash
end
def to_s
@hash.keys.join(", ")
end
private
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
end
class NullResolver < PathResolver
def query(path, exts, _, locals, cache:)
handler, format, variant = extract_handler_and_format_and_variant(path)
[ActionView::Template.new("Template generated by Null Resolver", path.virtual, handler, virtual_path: path.virtual, format: format, variant: variant, locals: locals)]
end
end
end