Hi -
For a variety of reasons I have the following situation:
---- file_a.rb --------------------------------------
class A
… magic loading goes here…
end
---- file_b.rb --------------------------------------
class B
… magic loading goes here…
end
---- magic_file.rb -----------------------------
… does some stuff…
How can I include the contents of magic_file.rb into both a and b “as
is”.
I’ve tried load() and it changes the scope so that magic_file.rb doesn’t
realize it’s in A or B.
I guess I’m looking for the PHP include() equivalent.
I realize this is a weird question and I realize in most situations this
is not the way to do it, but I don’t have a choice… so please no “do
it this other way” solutions
Thanks!
-philip
On May 8, 2006, at 4:05 PM, Philip H. wrote:
---- file_b.rb --------------------------------------
magic_file.rb doesn’t realize it’s in A or B.
class A
eval(File.read(“magic_file.rb”))
end
On 5/8/06, Philip H. [email protected] wrote:
How can I include the contents of magic_file.rb into both a and b “as is”.
I’ve tried load() and it changes the scope so that magic_file.rb doesn’t
realize it’s in A or B.
I guess I’m looking for the PHP include() equivalent.
I realize this is a weird question and I realize in most situations this
is not the way to do it, but I don’t have a choice… so please no “do
it this other way” solutions
I believe the following is your only choice:
eval File.read(“magic_file.rb”)
On May 8, 2006, at 4:08 PM, Logan C. wrote:
end
Thanks!
I realize this is against your “no other solutions” rule, but why won’t
% cat magic_file.rb
module Stuff
…
end
% cat a.rb
class A
require ‘magic_file’
include Stuff
end
work?
From: Logan C. [mailto:[email protected]]
How can I include the contents of magic_file.rb into both a and b
“as is”.
…
-philip
class A
eval(File.read(“magic_file.rb”))
end
Interesting solution. What about its effectivenes? And in general,
effectivenes of require’ing something vs. eval’ing it?
Victor
… magic loading goes here…
I guess I’m looking for the PHP include() equivalent.
class A
eval(File.read(“magic_file.rb”))
end
That worked. Thanks!
include Stuff
end
work?
Not sure… (i’m fairly new to ruby) but I tried it and it doesn’t.
Here’s specific details on what I’m doing (rails web services):
http://www.ruby-forum.com/topic/65015#new
-philip
On May 8, 2006, at 5:23 PM, Philip H. wrote:
Thanks!
% cat magic_file.rb
work?
Not sure… (i’m fairly new to ruby) but I tried it and it doesn’t.
Here’s specific details on what I’m doing (rails web services):
Including common code among multiple web services issue? - Rails - Ruby-Forum
-philip
% cat magic_stuff.rb
module FindNewerThan
def self.included(other)
other.class_eval do
api_method :find_newer_than,
:expects => [{:created_at => :datetime}],
:returns => [[Class.const_get(self.name.to_s.gsub(/Api$/, ‘’))]]
end
end
end
% cat a.rb
require ‘magic_stuff.rb’
class A
include FindNewerThan
end
class B
include FindNewerThan
end
etc…
On May 8, 2006, at 4:16 PM, Victor S. wrote:
class A
---- magic_file.rb -----------------------------
class A
eval(File.read(“magic_file.rb”))
end
Interesting solution. What about its effectivenes? And in general,
effectivenes of require’ing something vs. eval’ing it?
Victor
Well require-ing only parses the file once. Other than that, this
takes more memory (since it puts the entire file inside a string) but
other than that I’m pretty sure the difference is effectively zero.
The ‘ideal’ solution to this problem would be if load took an
optional binding argument
e.g.:
class A
load(“magic_file.rb”, false, binding)
end