class Kojo::Template
The Template
class handles a single template file, and processes it for:
-
Variables (using +%{var}+ syntax)
-
ERB
-
+@import+ statements
Attributes
args[R]
dir[R]
extension[R]
file[R]
import_base[RW]
Public Class Methods
new(file)
click to toggle source
# File lib/kojo/template.rb, line 12 def initialize(file) @file = file @extension = File.extname file @dir = File.dirname file @import_base = dir end
Public Instance Methods
render(args = {})
click to toggle source
# File lib/kojo/template.rb, line 19 def render(args = {}) @args = args evaluate file end
Protected Instance Methods
eval_imports(content)
click to toggle source
# File lib/kojo/template.rb, line 39 def eval_imports(content) result = [] content.lines.each do |line| line.chomp! spaces = line[/^\s*/].size if line =~ /^\s*@import ([^(\s]*)\s*(?:\((.*)\))?\s*/ file = $1 args = $2 || '' args = instance_eval("{#{args}}") imported = import file, args line = indent imported, spaces end result.push line end result.join "\n" end
evaluate(file)
click to toggle source
# File lib/kojo/template.rb, line 26 def evaluate(file) content = read_file file content = content.eval_erb args, file content = content.eval_vars args, file content = eval_imports content content end
import(file, import_args={})
click to toggle source
# File lib/kojo/template.rb, line 60 def import(file, import_args={}) filename = File.expand_path "#{file}#{extension}", import_base all_args = args.merge import_args self.class.new(filename).render(all_args) end
indent(text, spaces)
click to toggle source
# File lib/kojo/template.rb, line 66 def indent(text, spaces) text.lines.collect { |line| "#{' ' * spaces}#{line}" }.join end
read_file(file)
click to toggle source
# File lib/kojo/template.rb, line 34 def read_file(file) raise Kojo::NotFoundError, "File not found: #{file}" unless File.exist? file File.read file end