Sha256: d49eadc278258f5622b11dccd436c1ecba60a77ed5bbf78d95ff6683db38e201

Contents?: true

Size: 1.04 KB

Versions: 8

Compression:

Stored size: 1.04 KB

Contents

class StaticMatic::TemplateError < StandardError
  SOURCE_CODE_RADIUS = 3
  
  attr_reader :original_exception, :backtrace

  def initialize(template, original_exception)
    @template, @original_exception = template, original_exception
    @backtrace = original_exception.backtrace

    @source = File.read(template)
  end
  
  # TODO: Replace 'haml|sass' with any registered engines
  def line_number
    @line_number ||= $2 if backtrace.find { |line| line =~ /\((haml|sass)\)\:(\d+)/ }
  end
  
  def filename
    @template
  end
  
  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
end

Version data entries

8 entries across 8 versions & 1 rubygems

Version Path
staticmatic-0.11.0.alpha.6 lib/staticmatic/template_error.rb
staticmatic-0.11.0.alpha.5 lib/staticmatic/template_error.rb
staticmatic-0.11.0.alpha.4 lib/staticmatic/template_error.rb
staticmatic-0.11.0.alpha.3 lib/staticmatic/template_error.rb
staticmatic-0.11.0.alpha.1 lib/staticmatic/template_error.rb
staticmatic-0.11.0.alpha.0 lib/staticmatic/template_error.rb
staticmatic-0.10.8 lib/staticmatic/template_error.rb
staticmatic-0.10.7 lib/staticmatic/template_error.rb