class Test::Unit::CodeSnippetFetcher
Public Class Methods
new()
click to toggle source
# File lib/test/unit/code-snippet-fetcher.rb, line 4 def initialize @sources = {} end
Public Instance Methods
fetch(path, line, options={})
click to toggle source
# File lib/test/unit/code-snippet-fetcher.rb, line 8 def fetch(path, line, options={}) n_context_line = options[:n_context_line] || 3 lines = source(path) return [] if lines.nil? min_line = [line - n_context_line, 1].max max_line = [line + n_context_line, lines.length].min window = min_line..max_line window.collect do |n| attributes = {:target_line? => (n == line)} [n, lines[n - 1].chomp, attributes] end end
source(path)
click to toggle source
# File lib/test/unit/code-snippet-fetcher.rb, line 21 def source(path) @sources[path] ||= read_source(path) end
Private Instance Methods
detect_encoding(first_line)
click to toggle source
# File lib/test/unit/code-snippet-fetcher.rb, line 41 def detect_encoding(first_line) return nil unless first_line.respond_to?(:ascii_only?) return nil unless first_line.ascii_only? if /\b(?:en)?coding[:=]\s*([a-z\d_-]+)/i =~ first_line begin Encoding.find($1) rescue ArgumentError nil end else nil end end
read_source(path)
click to toggle source
# File lib/test/unit/code-snippet-fetcher.rb, line 26 def read_source(path) return nil unless File.exist?(path) lines = [] File.open(path, "rb") do |file| first_line = file.gets break if first_line.nil? encoding = detect_encoding(first_line) || Encoding::UTF_8 first_line.force_encoding(encoding) file.set_encoding(encoding) lines << first_line lines.concat(file.readlines) end lines end