Override object initialization, add a filepath attribute.

A

Aaron Smith

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.
 
A

Alex Gutteridge

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 :eek:ld_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
 
A

Alex Gutteridge

Great, this will work perfectly. thanks again

???

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
 
A

Aaron Smith

Alex said:
???

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.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
474,264
Messages
2,571,317
Members
48,003
Latest member
coldDuece

Latest Threads

Top