From: Alex Gutteridge Date: 2007-08-27T14:32:55+09:00 Subject: Re: Override object initialization, add a filepath attribute. On 27 Aug 2007, at 13:45, Aaron Smith wrote: > Is it possible to override initializations so that anytime an > object is > created there is a "filepath" attribute put on it? > > maybe? > > class Object > def initialize > super > class << self > attr_accessor :filepath > end > self.filepath = $0 > end > end > > See what i'm going for? Any ideas on how to get away with this? Do you want the name of the file each object is defined in? I think you want __FILE__ instead of $0 in that case since $0 is always the top level Ruby program. Also there is no superclass for Object so super#initialize won't work I think. This maybe gets closer - but still doesn't actually work: [alexg@powerbook]/Users/alexg/Desktop(55): cat main.rb require 'foo' require 'filepath' f = Foo.new p f.filepath [alexg@powerbook]/Users/alexg/Desktop(56): cat foo.rb class Foo end [alexg@powerbook]/Users/alexg/Desktop(57): cat filepath.rb class Object attr_accessor :filepath end class Class alias :old_new :new def new(*args) result = old_new(*args) result.filepath = __FILE__ result end end [alexg@powerbook]/Users/alexg/Desktop(58): ruby main.rb "./filepath.rb" We would of course like it to output 'foo.rb' if I understand you right. Alex Gutteridge Bioinformatics Center Kyoto University