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
John Hawthorn a7048ac9e2 Perform template glob and checks at same time
Previously we would check that our paths were safe and inside the app
right before building templates. Instead we can do this, and reject
directories at the same time as we perform the glob.

Co-authored-by: Kasper Timm Hansen <kaspth@gmail.com>
2021-04-19 16:40:35 -07:00

46 lines
1.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 < FileSystemResolver
def initialize(hash = {})
super("")
@hash = hash
@path = ""
end
def data
@hash
end
def to_s
@hash.keys.join(", ")
end
private
def template_glob(glob)
@hash.keys.select do |path|
File.fnmatch(glob, path)
end.map do |fixture|
"/#{fixture}"
end
end
def source_for_template(template)
@hash[template.from(1)]
end
end
class NullResolver < Resolver
def find_templates(name, prefix, partial, details, locals = [])
path = Path.build(name, prefix, partial)
handler = ActionView::Template::Handlers::Raw
[ActionView::Template.new("Template generated by Null Resolver", path.virtual, handler, virtual_path: path.virtual, format: nil, variant: nil, locals: locals)]
end
end
end