gparsons wrote:
> This is a bit of an odd request, but does anyone know how i would find
> what file Ruby is using to define an object in?  For instance if i had
> a few libraries in my include path and they defined the (ever useful)
> classes Foo, Bar, and Baz is there anyway to find out from within ruby
> that Foo is defined in the file /usr/local/lib/ruby/gems/1.8/gems/
> foo-1.0.0/lib/foo.rb or wherever?
> 
> The best i could come up with would be a rather brute force approach
> to searching through the files found in $: and this just seems
> horribly slow and prone to explosions.  Just wondering if someone out
> there who has a better understanding of Ruby's underbelly might have a
> better idea.
> 
> /Geoff

This might not be fully general, but works in the basic case. If 
SCRIPT_LINES__ is defined as a hash when a file is loaded, the lines of 
the file are stored as an array under the key of the filename.

SCRIPT_LINES__ = {}

require 'foo'

def defining_files(klass)
  files = []
  SCRIPT_LINES__.each do |filename, lines|
    if not lines.grep(/class\s+(\S+::)*#{klass.to_s}/).empty?
      files << File.expand_path(filename)
    end
  end
  files
end

defining_files(Foo)

best,
Dan

-- 
Posted via http://www.ruby-forum.com/.