class ConfigPool
class ConfigError < RuntimeError ; end
def initialize
@readonly_list = []
end
def self.load(path)
conf = self.new
File.open(path) do |f|
conf.instance_eval(f.read)
end
conf
end
def [](name)
instance_variable_get("@#{name}") or
raise ConfigError, "unset value `#{name}'"
end
def []=(name, val)
@readonly_list.include?(name.to_sym) and
raise ConfigError, "read only value `#{name}'"
instance_variable_set("@#{name}", val)
end
private
def readonly(name)
@readonly_list.push name.to_sym
end
alias ro readonly
end
if __FILE__ == $0
conf = ConfigPool.load("config.txt")
p conf[:bin_dir]
conf[:bin_dir] = "aaa"
p conf[:bin_dir]
conf[:home] = "bbb"
end
__END__