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

Add variants to Template class

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