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 def add_included_file(filename, callstack) filename = expand_filename(filename) return unless File.exist?(filename) loaded_files[filename] = filter_callstack(caller) if subdirectory?(filename) 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 def install_hook!(entry_file = nil, dir = Dir.pwd) @dir = File.expand_path(Dir.pwd, dir) @entry_file = entry_file Kernel.class_eval do alias :require_without_diagnoser :require alias :load_without_diagnoser :load def require(string) ::Spork::Diagnoser.add_included_file(string, caller) require_without_diagnoser(string) end private :require def load(string, wrap = false) ::Spork::Diagnoser.add_included_file(string, caller) load_without_diagnoser(string) end private :load end end
# File lib/spork/diagnoser.rb, line 35 def load(string, wrap = false) ::Spork::Diagnoser.add_included_file(string, caller) load_without_diagnoser(string) end
# File lib/spork/diagnoser.rb, line 11 def loaded_files @loaded_files ||= {} end
output the results of a diagnostic run.
stdout
- An IO stream to output the results to.
# File lib/spork/diagnoser.rb, line 67 def output_results(stdout) project_prefix = Dir.pwd + "/" minimify = lambda { |f| f.gsub(project_prefix, '')} stdout.puts "- Spork Diagnosis -\n" stdout.puts "-- Summary --" stdout.puts loaded_files.keys.sort.map(&minimify) stdout.puts "\n\n\n" stdout.puts "-- Detail --" loaded_files.keys.sort.each do |file| stdout.puts "\n\n\n--- #{minimify.call(file)} ---\n" stdout.puts loaded_files[file].map(&minimify) end end
Uninstall the hook. Generally useful only for testing the Diagnoser.
# File lib/spork/diagnoser.rb, line 50 def remove_hook! return unless Kernel.private_instance_methods.map(&:to_sym).include?(:require_without_diagnoser) Kernel.class_eval do alias :require :require_without_diagnoser alias :load :load_without_diagnoser undef_method(:require_without_diagnoser) undef_method(:load_without_diagnoser) end true end
# File lib/spork/diagnoser.rb, line 29 def require(string) ::Spork::Diagnoser.add_included_file(string, caller) require_without_diagnoser(string) end