class Deas::Erubis::Source
Constants
- BUFVAR_NAME
- DEFAULT_ERUBY
Attributes
cache[R]
context_class[R]
eruby_class[R]
ext[R]
root[R]
Public Class Methods
new(root, opts)
click to toggle source
# File lib/deas-erubis/source.rb, line 15 def initialize(root, opts) @root = Pathname.new(root.to_s) @ext = opts[:ext] ? ".#{opts[:ext]}" : nil @eruby_class = opts[:eruby] || DEFAULT_ERUBY @cache = opts[:cache] ? Hash.new : NullCache.new @context_class = build_context_class(opts) @default_source = opts[:default_source] end
Public Instance Methods
compile(template_name, content)
click to toggle source
# File lib/deas-erubis/source.rb, line 29 def compile(template_name, content) template(template_name, content).evaluate(@context_class.new(@default_source, {})) end
inspect()
click to toggle source
# File lib/deas-erubis/source.rb, line 40 def inspect "#<#{self.class}:#{'0x0%x' % (object_id << 1)}"\ " @root=#{@root.inspect}"\ " @eruby=#{@eruby_class.inspect}>" end
render(template_name, locals, &content)
click to toggle source
# File lib/deas-erubis/source.rb, line 25 def render(template_name, locals, &content) load(template_name).evaluate(@context_class.new(@default_source, locals), &content) end
template(filename, content)
click to toggle source
# File lib/deas-erubis/source.rb, line 33 def template(filename, content) Template.new(@eruby_class.new(content, { :bufvar => BUFVAR_NAME, :filename => filename })) end
Private Instance Methods
build_context_class(opts)
click to toggle source
# File lib/deas-erubis/source.rb, line 69 def build_context_class(opts) Class.new do include ::Deas::Erubis::TemplateHelpers [*(opts[:helpers] || [])].each{ |helper| include helper } (opts[:locals] || {}).each{ |k, v| define_method(k){ v } } def initialize(default_source, locals) @default_source = default_source metaclass = class << self; self; end metaclass.class_eval do locals.each do |key, value| define_method(key){ value } end end end end end
load(template_name)
click to toggle source
# File lib/deas-erubis/source.rb, line 48 def load(template_name) @cache[template_name] ||= begin if (filename = source_file_path(template_name)).nil? template_desc = "a template file named #{template_name.inspect}" if !@ext.nil? template_desc += " that ends in #{@ext.inspect}" end raise ArgumentError, "#{template_desc} does not exist" end template(filename, File.read(filename.to_s)) end end
source_file_glob_string(name)
click to toggle source
# File lib/deas-erubis/source.rb, line 65 def source_file_glob_string(name) !@ext.nil? && name.end_with?(@ext) ? name : "#{name}*#{@ext}" end
source_file_path(name)
click to toggle source
# File lib/deas-erubis/source.rb, line 61 def source_file_path(name) Dir.glob(self.root.join(source_file_glob_string(name))).first end