From: Daniel Lucraft Date: 2007-05-30T07:11:23+09:00 Subject: Re: Finding files associated with objects in Ruby 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/.