Object
The Diagnoser hooks into load and require and keeps track of when files are required / loaded, and who loaded them. It’s used when you run spork —diagnose
Spork::Diagnoser.install_hook!('/path/env.rb', '/path') require '/path/to/env.rb' Spork::Diagnoser.output_results(STDOUT)
# File lib/spork/diagnoser.rb, line 43 43: def add_included_file(filename, callstack) 44: filename = expand_filename(filename) 45: return unless File.exist?(filename) 46: loaded_files[filename] = filter_callstack(caller) if subdirectory?(filename) 47: end
Installs the diagnoser hook into Kernel#require and Kernel#load
entry_file - The file that is used to load the project. Used to filter the backtrace so anything that happens after it is hidden.
dir - The project directory. Any file loaded outside of this directory will not be logged.
# File lib/spork/diagnoser.rb, line 21 21: def install_hook!(entry_file = nil, dir = Dir.pwd) 22: @dir = File.expand_path(Dir.pwd, dir) 23: @entry_file = entry_file 24: 25: Kernel.class_eval do 26: alias :require_without_diagnoser :require 27: alias :load_without_diagnoser :load 28: 29: def require(string) 30: ::Spork::Diagnoser.add_included_file(string, caller) 31: require_without_diagnoser(string) 32: end 33: private :require 34: 35: def load(string) 36: ::Spork::Diagnoser.add_included_file(string, caller) 37: load_without_diagnoser(string) 38: end 39: private :load 40: end 41: end
# File lib/spork/diagnoser.rb, line 35 35: def load(string) 36: ::Spork::Diagnoser.add_included_file(string, caller) 37: load_without_diagnoser(string) 38: end
# File lib/spork/diagnoser.rb, line 11 11: def loaded_files 12: @loaded_files ||= {} 13: end
output the results of a diagnostic run.
stdout - An IO stream to output the results to.
# File lib/spork/diagnoser.rb, line 67 67: def output_results(stdout) 68: project_prefix = Dir.pwd + "/" 69: minimify = lambda { |f| f.gsub(project_prefix, '')} 70: stdout.puts "- Spork Diagnosis -\n" 71: stdout.puts "-- Summary --" 72: stdout.puts loaded_files.keys.sort.map(&minimify) 73: stdout.puts "\n\n\n" 74: stdout.puts "-- Detail --" 75: loaded_files.keys.sort.each do |file| 76: stdout.puts "\n\n\n--- #{minimify.call(file)} ---\n" 77: stdout.puts loaded_files[file].map(&minimify) 78: end 79: end
Uninstall the hook. Generally useful only for testing the Diagnoser.
# File lib/spork/diagnoser.rb, line 50 50: def remove_hook! 51: return unless Kernel.private_instance_methods.include?('require_without_diagnoser') 52: Kernel.class_eval do 53: alias :require :require_without_diagnoser 54: alias :load :load_without_diagnoser 55: 56: undef_method(:require_without_diagnoser) 57: undef_method(:load_without_diagnoser) 58: end 59: true 60: end
# File lib/spork/diagnoser.rb, line 91 91: def expand_filename(filename) 92: ([Dir.pwd] + $:).each do |attempted_path| 93: attempted_filename = File.expand_path(filename, attempted_path) 94: return attempted_filename if File.file?(attempted_filename) 95: attempted_filename = attempted_filename + ".rb" 96: return attempted_filename if File.file?(attempted_filename) 97: end 98: filename 99: end
# File lib/spork/diagnoser.rb, line 82 82: def filter_callstack(callstack, entry_file = @entry_file) 83: callstack.pop until callstack.empty? || callstack.last.include?(@entry_file) if @entry_file 84: callstack.map do |line| 85: next if line.include?('lib/spork/diagnoser.rb') 86: line.gsub!('require_without_diagnoser', 'require') 87: line 88: end.compact 89: end
Disabled; run with --debug to generate this.
Generated with the Darkfish Rdoc Generator 1.1.6.