提交 c63b18de 编写于 作者: Ł Łukasz Strzałkowski

Add variants to Template class

上级 0ca6836a
......@@ -97,7 +97,7 @@ class Template
extend Template::Handlers
attr_accessor :locals, :formats, :virtual_path
attr_accessor :locals, :formats, :variants, :virtual_path
attr_reader :source, :identifier, :handler, :original_encoding, :updated_at
......@@ -123,6 +123,7 @@ def initialize(source, identifier, handler, details)
@virtual_path = details[:virtual_path]
@updated_at = details[:updated_at] || Time.now
@formats = Array(format).map { |f| f.respond_to?(:ref) ? f.ref : f }
@variants = [details[:variant]]
@compile_mutex = Mutex.new
end
......
......@@ -155,6 +155,7 @@ def decorate(templates, path_info, details, locals) #:nodoc:
templates.each do |t|
t.locals = locals
t.formats = details[:formats] || [:html] if t.formats.empty?
t.variants = details[:variants] || [] if t.variants.empty?
t.virtual_path ||= (cached ||= build_path(*path_info))
end
end
......@@ -189,13 +190,15 @@ def query(path, details, formats)
}
template_paths.map { |template|
handler, format = extract_handler_and_format(template, formats)
contents = File.binread template
handler, format, variant = extract_handler_and_format_and_variant(template, formats)
contents = File.binread(template)
Template.new(contents, File.expand_path(template), handler,
:virtual_path => path.virtual,
:format => format,
:updated_at => mtime(template))
:variant => variant,
:updated_at => mtime(template)
)
}
end
......@@ -228,7 +231,7 @@ def mtime(p)
# Extract handler and formats from path. If a format cannot be a found neither
# from the path, or the handler, we should return the array of formats given
# to the resolver.
def extract_handler_and_format(path, default_formats)
def extract_handler_and_format_and_variant(path, default_formats)
pieces = File.basename(path).split(".")
pieces.shift
......@@ -240,10 +243,10 @@ def extract_handler_and_format(path, default_formats)
end
handler = Template.handler_for_extension(extension)
format = pieces.last && pieces.last.split(EXTENSIONS[:variants], 2).first # remove variant from format
format, variant = pieces.last.split(EXTENSIONS[:variants], 2) if pieces.last
format &&= Template::Types[format]
[handler, format]
[handler, format, variant]
end
end
......
......@@ -30,9 +30,13 @@ def query(path, exts, formats)
@hash.each do |_path, array|
source, updated_at = array
next unless _path =~ query
handler, format = extract_handler_and_format(_path, formats)
handler, format, variant = extract_handler_and_format_and_variant(_path, formats)
templates << Template.new(source, _path, handler,
:virtual_path => path.virtual, :format => format, :updated_at => updated_at)
:virtual_path => path.virtual,
:format => format,
:variant => variant,
:updated_at => updated_at
)
end
templates.sort_by {|t| -t.identifier.match(/^#{query}$/).captures.reject(&:blank?).size }
......@@ -41,8 +45,8 @@ def query(path, exts, formats)
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)]
handler, format, variant = extract_handler_and_format_and_variant(path, formats)
[ActionView::Template.new("Template generated by Null Resolver", path, handler, :virtual_path => path, :format => format, :variant => variant)]
end
end
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册