Defined? var in a var name

hi, all.

I’m create a environment.rb in cucumber which stores a lot of env
descripts.
like:
$host = “10.10.101.1”
$user =" root"
$password = “123”

while some one remove something, it might cause our automation stop.
so i add 1 var checker, like
vars = ["$host", “$user”, “$password”]
def check_var(var)
raise “#{var} not defined” if !defined?(var)
end
vars.each do |var|
check_var(var)
end

but defined?(var) always return local-var.

i tried eval %Q{defined?("#{var}")}
still, returens “expression”

On Fri, Sep 16, 2011 at 10:04 AM, salamond [email protected] wrote:

vars = [“$host”, “$user”, “$password”]
def check_var(var)
raise “#{var} not defined” if !defined?(var)
end
vars.each do |var|
check_var(var)
end

but defined?(var) always return local-var.

i tried eval %Q{defined?(“#{var}”)}

Too much quoting:

irb(main):002:0> var=‘$x’
=> “$x”
irb(main):003:0> %Q{defined? “#{var}”}
=> “defined? "$x"”

You want this:

irb(main):004:0> %Q{defined? #{var}}
=> “defined? $x”

I find the whole approach not good because of the global variables.
I’d rather define a configuration class and implement validation for
that so you are sure you always have proper values, e.g.

class Config
attr_reader :host, :user, :password

def initialize(host, user, password)
self.host = host
self.user = user
self.password = password
end

def host=(x)
raise ArgumentError, “Invalid host %p” % p if p.nil? || p == “” #
|| other conditions
@host = x
end

etc.

end

Then pass around this instance.

Cheers

robert