lib/raven/linecache.rb in sentry-raven-2.1.4 vs lib/raven/linecache.rb in sentry-raven-2.2.0

- old
+ new

@@ -1,27 +1,41 @@ module Raven class LineCache - class << self - CACHE = {} # rubocop:disable Style/MutableConstant + def initialize + @cache = {} + end - def valid_file?(path) - lines = getlines(path) - !lines.nil? + # Any linecache you provide to Raven must implement this method. + # Returns an Array of Strings representing the lines in the source + # file. The number of lines retrieved is (2 * context) + 1, the middle + # line should be the line requested by lineno. See specs for more information. + def get_file_context(filename, lineno, context) + return nil, nil, nil unless valid_path?(filename) + lines = Array.new(2 * context + 1) do |i| + getline(filename, lineno - context + i) end + [lines[0..(context - 1)], lines[context], lines[(context + 1)..-1]] + end - def getlines(path) - CACHE[path] ||= begin - IO.readlines(path) - rescue - nil - end - end + private - def getline(path, n) - return nil if n < 1 - lines = getlines(path) - return nil if lines.nil? - lines[n - 1] + def valid_path?(path) + lines = getlines(path) + !lines.nil? + end + + def getlines(path) + @cache[path] ||= begin + IO.readlines(path) + rescue + nil end + end + + def getline(path, n) + return nil if n < 1 + lines = getlines(path) + return nil if lines.nil? + lines[n - 1] end end end