mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
38d78f99d5
Before this patch, every request in development caused the template to be compiled, regardless if it was updated in the filesystem or not. This patch now checks the timestamp and only compiles it again if any change was done. While this probably won't show any difference for current setups, but it will be useful for asset template handlers (like SASS), as compiling their templates is slower than ERb, Haml, etc.
46 lines
1.4 KiB
Ruby
46 lines
1.4 KiB
Ruby
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 < PathResolver
|
|
attr_reader :hash
|
|
|
|
def initialize(hash = {})
|
|
super()
|
|
@hash = hash
|
|
end
|
|
|
|
private
|
|
|
|
def query(path, exts, formats)
|
|
query = ""
|
|
exts.each do |ext|
|
|
query << '(' << ext.map {|e| e && Regexp.escape(".#{e}") }.join('|') << '|)'
|
|
end
|
|
query = /^(#{Regexp.escape(path)})#{query}$/
|
|
|
|
templates = []
|
|
@hash.each do |_path, array|
|
|
source, updated_at = array
|
|
next unless _path =~ query
|
|
handler, format = extract_handler_and_format(_path, formats)
|
|
templates << Template.new(source, _path, handler,
|
|
:virtual_path => $1, :format => format, :updated_at => updated_at)
|
|
end
|
|
|
|
templates.sort_by {|t| -t.identifier.match(/^#{query}$/).captures.reject(&:blank?).size }
|
|
end
|
|
end
|
|
|
|
class NullResolver < PathResolver
|
|
def query(path, exts, formats)
|
|
handler, format = extract_handler_and_format(path, formats)
|
|
[ActionView::Template.new("Template generated by Null Resolver", path, handler, :virtual_path => path, :format => format)]
|
|
end
|
|
end
|
|
|
|
end
|
|
|