class Kojo::Template

The Template class handles a single template file, and processes it for:

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