Override object initialization, add a filepath attribute

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?

Thanks.

···

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

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

···

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?

Great, this will work perfectly. thanks again

···

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

???

But it doesn't work! In my 'solution' the filepath attribute is always set to 'filepath.rb' instead of the name of the file the object is defined in. It's useless as far as I can see! Am I completely missing what you wanted?

Alex Gutteridge

Bioinformatics Center
Kyoto University

···

On 27 Aug 2007, at 15:06, Aaron Smith wrote:

Great, this will work perfectly. thanks again
-- Posted via http://www.ruby-forum.com/.

Alex Gutteridge wrote:

···

On 27 Aug 2007, at 15:06, Aaron Smith wrote:

Great, this will work perfectly. thanks again
--
Posted via http://www.ruby-forum.com/.

???

But it doesn't work! In my 'solution' the filepath attribute is
always set to 'filepath.rb' instead of the name of the file the
object is defined in. It's useless as far as I can see! Am I
completely missing what you wanted?

Alex Gutteridge

Bioinformatics Center
Kyoto University

OH yeah, sorry, I just assumed that would work. I am wanting the file
path where the class is defined, not just the top level ruby script that
is running.. I'll give this a shot tomorrow and see if I can figure it
out based on what you've written.
--
Posted via http://www.ruby-forum.com/.