Ruby YAMLファイルを読み込んでメソッドで値を取れるクラス
今日したこと
にゃーん って感じ。 カルシウム足りないんじゃないのってくらい情緒不安定だった。
愚痴ってもしょうがないので、さっきちょっと作ったコードを載せて今日はおわり。
やりたかったこと
env1: obj1: hello obj2: obj2_1: hello obj2_2: hello env2: obj1: hello
こんなconfi.ymlみたいなのがある。 一番大本が環境毎。 そのしたにyaml。
これを
config = Config.new('env1') config.obj1 #=> 'hello' config.obj2.obj2_1 #=> 'hello'
みたいに使いたかった。
これをやるGemは当然既にあるだろうし、いつもはEasySettingsっていうGemを使っている。 ただせっかくだし自前でちょろっとつくった。たいした用途ではなかったしね。
とりあえず思いついたのがこれ。 メソッド名で出すからハイフンが使えなかったり色々あるけど。
require 'yaml' class Config CONFIG_FILE_NAME = './config.yml' def initialize(env) config = YAML.load_file(CONFIG_FILE_NAME) hash_method_define = Proc.new do |res, obj| obj.each do |k, v| if(v.kind_of?(Hash)) res_child = Object.new hash_method_define.call(res_child, v) res.define_singleton_method(k) { res_child } else res.define_singleton_method(k) { v } end end end hash_method_define.call(self, config[env]) end end
Rubyってすごいんですね。
どうでもいいはなし
にゃー。 あした大学行きたくない。