Class Spork::Diagnoser
In: lib/spork/diagnoser.rb
Parent: 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

Example

 Spork::Diagnoser.install_hook!('/path/env.rb', '/path')
 require '/path/to/env.rb'
 Spork::Diagnoser.output_results(STDOUT)

Methods

External Aliases

require -> require_without_diagnoser
load -> load_without_diagnoser
require_without_diagnoser -> require
load_without_diagnoser -> load

Public Class methods

[Source]

# File lib/spork/diagnoser.rb, line 41
    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

Parameters

  • 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.

[Source]

# 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
        
        def load(string)
          ::Spork::Diagnoser.add_included_file(string, caller)
          load_without_diagnoser(string)
        end
      end
    end

[Source]

# File lib/spork/diagnoser.rb, line 34
        def load(string)
          ::Spork::Diagnoser.add_included_file(string, caller)
          load_without_diagnoser(string)
        end

[Source]

# File lib/spork/diagnoser.rb, line 11
    def loaded_files
      @loaded_files ||= {}
    end

output the results of a diagnostic run.

Parameters

  • stdout - An IO stream to output the results to.

[Source]

# File lib/spork/diagnoser.rb, line 65
    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.

[Source]

# File lib/spork/diagnoser.rb, line 48
    def remove_hook!
      return unless Kernel.private_instance_methods.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

[Source]

# File lib/spork/diagnoser.rb, line 29
        def require(string)
          ::Spork::Diagnoser.add_included_file(string, caller)
          require_without_diagnoser(string)
        end

[Validate]