class Deas::TemplateSource
Attributes
engines[R]
path[R]
Public Class Methods
new(path, logger = nil)
click to toggle source
# File lib/deas/template_source.rb, line 10 def initialize(path, logger = nil) @path = path.to_s @default_engine_opts = { 'source_path' => @path, 'logger' => logger || Deas::NullLogger.new, 'default_template_source' => self } @engines = Hash.new do |hash, ext| # cache null template exts so we don't repeatedly call this block for # known null template exts hash[ext.to_s] = Deas::NullTemplateEngine.new(@default_engine_opts) end @engine_exts = [] @ext_lists = Hash.new do |hash, template_name| # An ext list is an array of non-template-name extensions that have engines # configured. The first ext in the list is the most precedent. Its engine # is used to do the initial render from the named template file. Any # further exts are used to compile rendered content from upsteam engines. hash[template_name] = parse_ext_list(template_name) end end
Public Instance Methods
engine(input_ext, engine_class, registered_opts = nil)
click to toggle source
# File lib/deas/template_source.rb, line 32 def engine(input_ext, engine_class, registered_opts = nil) @engine_exts << input_ext.to_s engine_opts = @default_engine_opts.merge(registered_opts || {}) engine_opts['ext'] = input_ext.to_s @engines[input_ext.to_s] = engine_class.new(engine_opts) end
engine_for?(ext)
click to toggle source
# File lib/deas/template_source.rb, line 40 def engine_for?(ext) @engine_exts.include?(ext.to_s) end
partial(template_name, locals, &content)
click to toggle source
# File lib/deas/template_source.rb, line 56 def partial(template_name, locals, &content) compile(template_name) do |engine| engine.partial(template_name, locals, &content) end end
render(template_name, view_handler, locals, &content)
click to toggle source
# File lib/deas/template_source.rb, line 44 def render(template_name, view_handler, locals, &content) [ view_handler.layouts, template_name ].flatten.reverse.inject(content) do |render_proc, name| proc do compile(name) do |engine| engine.render(name, view_handler, locals, &render_proc) end end end.call end
Private Instance Methods
compile(name) { |engines[ext_lists) do |c, e| compile| ... }
click to toggle source
# File lib/deas/template_source.rb, line 64 def compile(name) @ext_lists[name].drop(1).inject(yield @engines[@ext_lists[name].first]) do |c, e| @engines[e].compile(name, c) end