class StaticMatic::TemplateError

Constants

SOURCE_CODE_RADIUS

Attributes

backtrace[R]
original_exception[R]

Public Class Methods

new(template, original_exception) click to toggle source
# File lib/staticmatic/template_error.rb, line 6
def initialize(template, original_exception)
  @template, @original_exception = template, original_exception
  @backtrace = original_exception.backtrace
  
  if template
    @source = File.read(template)
  else 
    @source = ""
  end
end

Public Instance Methods

filename() click to toggle source
# File lib/staticmatic/template_error.rb, line 22
def filename
  @template
end
line_number() click to toggle source

TODO: Replace 'haml|sass' with any registered engines

# File lib/staticmatic/template_error.rb, line 18
def line_number
  @line_number ||= $2 if backtrace.find { |line| line =~ /\((haml|sass|scss)\)\:(\d+)/ }
end
source_extract(indentation = 0) click to toggle source
# File lib/staticmatic/template_error.rb, line 26
def source_extract(indentation = 0)
  return "" unless num = line_number
  num = num.to_i

  source_code = @source.split("\n")

  start_on_line = [ num - SOURCE_CODE_RADIUS - 1, 0 ].max
  end_on_line   = [ num + SOURCE_CODE_RADIUS - 1, source_code.length].min

  indent = ' ' * indentation
  line_counter = start_on_line
  return unless source_code = source_code[start_on_line..end_on_line]

  source_code.collect do |line|
    line_counter += 1
    "#{indent}#{line_counter}: #{line}\n"
  end.to_s
end