mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
a7048ac9e2
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>
46 lines
1.2 KiB
Ruby
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
|