Config読み込み用クラス
Configをファイルから読むためのクラス。Rubyのおもちゃを作るときに作ったのだが、いつも忘れてしまうので、メモとしてここに記す。
module SSHILIB
class Config
def initialize(create_flag = false,config_filename = default_filename)
instance_eval default_values
vars = instance_variables
self.class.class_eval{
vars.each do | var |
attr_reader(var[1..-1].to_sym)
end
}
return if config_filename == nil
if FileTest.exist?(config_filename)
instance_eval File.read(config_filename)
elsif create_flag
open(config_filename,"w") do | f |
f.puts default_values
end
end
end
def default_filename
end
def default_values
return<<EOS
@config1 = 1
@config2 = [1]
EOS
end
end
end
default_filenameに記述したものがデフォルトのConfigファイル名、default_valuesに記述したものがデフォルト設定になる。default_valuesのほうは、ソース文字列を返すように書こう。適当に書きかえるなり継承してdefault_(filename|values)をオーバーライドするなりして利用する。
Configファイルはこんな感じにインスタンス変数の定義だけ書く。
@config1 = 100 @config2 = [1,2,3]
使い方はこんなかんじ。
config = Config.new(create_flag,filename) puts config.config1
単にインスタンス作ってインスタンス変数を参照するだけ。default_valuesに記述したインスタンス変数は自動的に読み出し許可が与えられる仕組み。ちなみに、newのたびにConfigファイルから値を読みこむ仕様。なんて安直。
create_flagをtrueにするとConfigファイルがない場合にデフォルト設定の内容でConfigファイルを作成する。省略するとfalseになってファイルは作成されない。filenameはConfigファイルのファイル名。省略するとdefault_filenameに記述されたファイル名が利用される。あんまり必要ないかな。
Configファイルからの変数の取り込みにevalを使っているのが嫌な気もする*1けど、お手軽に使う分には十分。