Class: SuperTemplate::Compiler

Inherits:
Object
  • Object
show all
Defined in:
lib/super_template/compiler.rb

Instance Method Summary collapse

Constructor Details

#initialize(template_class) ⇒ Compiler

Returns a new instance of Compiler.



7
8
9
10
# File 'lib/super_template/compiler.rb', line 7

def initialize(template_class)
  @template_class = template_class
  @redefinition_lock = Mutex.new
end

Instance Method Details

#compile(raise_errors: false, force: false) ⇒ Object



12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# File 'lib/super_template/compiler.rb', line 12

def compile(raise_errors: false, force: false)
  return if template_class.compiled? && !force
  return if template_class == SuperTemplate::Base
  template_class.superclass.compile(raise_errors: raise_errors)

  redefinition_lock.synchronize do
    templates = []
    templates = find_sidecar_templates
    templates << template_class.inline_template if template_class.inline_template
    raise TemplateError, "There are #{templates.size} templates defined for #{self}" if templates.size >= 2
    unless templates.empty?
      compile_template(templates[0])
    end
  end
  return true
end