| Class | Limelight::DSL::BuildException |
| In: |
lib/limelight/dsl/build_exception.rb
|
| Parent: | Exception |
An Exception used by many of the DSL Builders. Allows nice errors messages, with line numbers, to be printed.
| filename | [R] | |
| line_number | [R] |
# File lib/limelight/dsl/build_exception.rb, line 14
14: def initialize(filename, file_contents, e)
15: @filename = filename
16: @file_contents = file_contents
17: @original_exception = e
18: @line_number = find_line_number
19: super(build_error_message)
20: set_backtrace(e.backtrace)
21: end
# File lib/limelight/dsl/build_exception.rb, line 36
36: def build_error_message
37: lines = @file_contents.split("\n")
38: if @line_number
39: start_line = @line_number - 4 < 0 ? 0 : @line_number - 4
40: end_line = @line_number + 2 >= lines.size ? lines.size - 1: @line_number + 2
41: message = "#{@filename}:#{@line_number}: #{@original_exception.message}"
42: message << "\n\t----- #{@filename} lines #{start_line + 1} - #{end_line + 1} -----"
43: (start_line..end_line).each do |i|
44: message << "\n\t#{i == @line_number - 1 ? "*": " "} #{i+1}: #{lines[i]}"
45: end
46: else
47: message = "#{@filename}:? : #{@original_exception.message}"
48: end
49: message << "\n"
50: return message
51: end
# File lib/limelight/dsl/build_exception.rb, line 23
23: def find_line_number
24: lines = [@original_exception.message].concat @original_exception.backtrace
25: line_number = nil
26: lines.each do |line|
27: match = line.match(/\(eval\):(\d+):/)
28: if (match)
29: line_number = match[1].to_i
30: break
31: end
32: end
33: return line_number
34: end