59 lines
1.3 KiB
Ruby
59 lines
1.3 KiB
Ruby
class Templates::Engine
|
|
class <<self
|
|
# don't forget to implement initialize for your engine.
|
|
# @initialized must be set to true or false like return:
|
|
# return: true: engine can be provieded
|
|
# false: engine can not be provieded (lib not found for example)
|
|
def initialize
|
|
raise ImplementationExpected, "Implementation for #{name}.initialize needed"
|
|
end
|
|
|
|
def require_template_library *libs
|
|
libs.each {|lib| require lib }
|
|
true
|
|
rescue LoadError
|
|
return false
|
|
end
|
|
|
|
def initialized?() @initialized end
|
|
|
|
def register *exts
|
|
@extentions = exts
|
|
Templates.register self, *exts
|
|
end
|
|
end
|
|
|
|
attr_reader :options, :filename, :line, :data
|
|
|
|
def initialize options = nil
|
|
@options = options.nil? ? {} : options.dup
|
|
@options[:filename] ||= @options[:file].nil? ? '`(_}-{_)`' : @options[:file].path
|
|
@filename = @options[:filename]
|
|
@line = @options[:line] || 1
|
|
@data = if @options[:content]
|
|
@options[:content]
|
|
elsif @options[:file]
|
|
@options[:file].read
|
|
elsif @options[:filename]
|
|
File.read @options[:filename]
|
|
end
|
|
end
|
|
|
|
def evaluate
|
|
raise ImplementationExpected, "Implementation for #{name}#evaluate needed"
|
|
end
|
|
|
|
def prepare
|
|
raise ImplementationExpected, "Implementation for #{name}#prepare needed"
|
|
end
|
|
|
|
def output
|
|
@output ||= evaluate
|
|
end
|
|
|
|
def render
|
|
prepare
|
|
output
|
|
end
|
|
end
|