Skip to content

Instantly share code, notes, and snippets.

@mbklein
Created January 28, 2011 19:04
Show Gist options
  • Save mbklein/800756 to your computer and use it in GitHub Desktop.
Save mbklein/800756 to your computer and use it in GitHub Desktop.
module Kernel
alias_method :debug_original_require, :require
@@load_order_logger = nil
@@load_order_indent = ''
def self.load_order_logger
@@load_order_logger
end
def self.load_order_logger=(value)
if value.nil? or value.is_a?(Proc) or value.respond_to?(:<<)
@@load_order_logger = value
else
raise TypeError, "Logger must handle `<<'"
end
end
def require(*args)
if @@load_order_logger
arg_signature = args.collect { |a| a.inspect }.join(', ')
calling_method = caller.find { |m| m !~ /`.*require/ }
log_string = "#{@@load_order_indent}require(#{arg_signature}) from #{calling_method}\n"
if @@load_order_logger.is_a?(Proc)
@@load_order_logger.call(log_string)
else
@@load_order_logger << log_string
end
@@load_order_indent += " "
result = debug_original_require(*args)
@@load_order_indent = @@load_order_indent[0..-3]
return result
else
return debug_original_require(*args)
end
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment