class BetterErrors::CodeFormatter

@private

Attributes

context[R]
filename[R]
line[R]

Public Class Methods

new(filename, line, context = 5) click to toggle source
# File lib/better_errors/code_formatter.rb, line 9
def initialize(filename, line, context = 5)
  @filename = filename
  @line     = line
  @context  = context
end

Public Instance Methods

context_lines() click to toggle source
# File lib/better_errors/code_formatter.rb, line 27
def context_lines
  range = line_range
  source_lines[(range.begin - 1)..(range.end - 1)] or raise Errno::EINVAL
end
line_range() click to toggle source
# File lib/better_errors/code_formatter.rb, line 21
def line_range
  min = [line - context, 1].max
  max = [line + context, source_lines.count].min
  min..max
end
output() click to toggle source
# File lib/better_errors/code_formatter.rb, line 15
def output
  formatted_code
rescue Errno::ENOENT, Errno::EINVAL
  source_unavailable
end

Private Instance Methods

each_line_of(lines) { |current_line == line| ... } click to toggle source
# File lib/better_errors/code_formatter.rb, line 38
def each_line_of(lines, &blk)
  line_range.zip(lines).map { |current_line, str|
    yield (current_line == line), current_line, str
  }
end
formatted_code() click to toggle source
# File lib/better_errors/code_formatter.rb, line 34
def formatted_code
  formatted_lines.join
end
source() click to toggle source
# File lib/better_errors/code_formatter.rb, line 44
def source
  @source ||= File.read(filename)
end
source_lines() click to toggle source
# File lib/better_errors/code_formatter.rb, line 48
def source_lines
  @source_lines ||= source.lines
end