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"

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}")}

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

···

On Fri, Sep 16, 2011 at 10:04 AM, salamond <jarodzz@gmail.com> wrote:

--
remember.guy do |as, often| as.you_can - without end
http://blog.rubybestpractices.com/