Class: Natsuzora::TemplateLoader

Inherits:
Object
  • Object
show all
Defined in:
lib/natsuzora/template_loader.rb

Defined Under Namespace

Classes: IncludePathResolver

Instance Method Summary collapse

Constructor Details

#initialize(include_root) ⇒ TemplateLoader

Returns a new instance of TemplateLoader.

Raises:

  • (ArgumentError)


68
69
70
71
72
73
74
# File 'lib/natsuzora/template_loader.rb', line 68

def initialize(include_root)
  raise ArgumentError, 'include_root is required' if include_root.nil?

  @path_resolver = IncludePathResolver.new(include_root)
  @cache = {}
  @include_stack = []
end

Instance Method Details

#load(name) ⇒ Object

Raises:



76
77
78
79
80
81
82
# File 'lib/natsuzora/template_loader.rb', line 76

def load(name)
  validate_name!(name)

  raise IncludeError, "Circular include detected: #{name}" if @include_stack.include?(name)

  @cache[name] ||= load_and_parse(name)
end

#with_include(name) ⇒ Object



84
85
86
87
88
89
90
91
# File 'lib/natsuzora/template_loader.rb', line 84

def with_include(name)
  @include_stack.push(name)
  yield
rescue StandardError => e
  raise e.class, "#{e.message}\n  within include #{include_stack_trace}", e.backtrace
ensure
  @include_stack.pop
end