Exception: TemplateError

Inherits:
StandardError
  • Object
show all
Defined in:
lib/texas/template/template_error.rb

Direct Known Subclasses

TemplateNotFound

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(template, message, original = nil) ⇒ TemplateError

Returns a new instance of TemplateError.



4
5
6
7
8
9
# File 'lib/texas/template/template_error.rb', line 4

def initialize(template, message, original = nil)
  super(message)
  self.template = template
  self.original = original
  parse_backtrace_for_origin
end

Instance Attribute Details

#originalObject

Returns the value of attribute original.



2
3
4
# File 'lib/texas/template/template_error.rb', line 2

def original
  @original
end

#templateObject

Returns the value of attribute template.



2
3
4
# File 'lib/texas/template/template_error.rb', line 2

def template
  @template
end

Instance Method Details

#__backtrace__Object



11
12
13
# File 'lib/texas/template/template_error.rb', line 11

def __backtrace__
  original ? original.backtrace : backtrace
end

#filenameObject



15
16
17
# File 'lib/texas/template/template_error.rb', line 15

def filename
  template.filename.gsub(template.build_path, '')
end

#messageObject



45
46
47
# File 'lib/texas/template/template_error.rb', line 45

def message
  super + "\n#{pre_erb_backtrace}#{origin.cyan}"
end

#originObject



32
33
34
# File 'lib/texas/template/template_error.rb', line 32

def origin
  "#{filename}:#{@line_number}"
end

#parse_backtrace_for_originObject



19
20
21
22
23
24
25
26
27
28
29
30
# File 'lib/texas/template/template_error.rb', line 19

def parse_backtrace_for_origin
  arr = __backtrace__ || []
  arr.each_with_index do |line, index| 
    if line =~ /\(erb\):(\d+)/ 
      @pre_erb_backtrace = arr[0...index]
      @line_number = $1.to_i
      line_before = arr[index-1]
      @method_name = line_before =~ /\d+:in\s+`([^\)]+)'/ && $1
      return
    end
  end
end

#pre_erb_backtraceObject



36
37
38
39
40
41
42
43
# File 'lib/texas/template/template_error.rb', line 36

def pre_erb_backtrace
  if @pre_erb_backtrace
    arr = @pre_erb_backtrace.map do |line| 
      line.gsub(template.build.root, '.')
    end
    str = arr.empty? ? "" : arr.join("\n").dark + "\n"
  end
end