class Airbrake::CodeHunk
Represents a small hunk of code consisting of a base line and a couple lines around it @api private
Constants
- MAX_LINE_LEN
@return [Integer] the maximum length of a line
- NLINES
@return [Integer] how many lines should be read around the base line
Public Instance Methods
get(file, line)
click to toggle source
@param [String] file The file to read @param [Integer] line The base line in the file @return [Hash{Integer=>String}, nil] lines of code around the base line
# File lib/airbrake-ruby/code_hunk.rb, line 17 def get(file, line) return unless File.exist?(file) return unless line lines = get_lines(file, [line - NLINES, 1].max, line + NLINES) || {} return { 1 => '' } if lines.empty? lines end
Private Instance Methods
get_from_cache(file)
click to toggle source
# File lib/airbrake-ruby/code_hunk.rb, line 29 def get_from_cache(file) Airbrake::FileCache[file] ||= File.foreach(file) rescue StandardError => ex logger.error( "#{self.class.name}: can't read code hunk for #{file}: #{ex}", ) nil end
get_lines(file, start_line, end_line)
click to toggle source
# File lib/airbrake-ruby/code_hunk.rb, line 38 def get_lines(file, start_line, end_line) return unless (cached_file = get_from_cache(file)) lines = {} cached_file.with_index(1) do |l, i| next if i < start_line break if i > end_line lines[i] = l[0...MAX_LINE_LEN].rstrip end lines end