Rubyで設定系DSLを書いてみた
こちらのスライドを参考にしてRuby で設定系のDSLを書いてみました。
ところどころ、コメントを書いて理解しながら書いてみました。
# 設定系DSL class Awesome class Config attr_accessor :hoge, :fuga # (a) attr_accessor :method end def self.configure(&block) block.call(self.config) # (2). @config オブジェクトを引数にして ブロックを実行 # call を省略してもOK # block.(self.config) end # (1). Config class の @config オブジェクトを生成する def self.config @config ||= Config.new end end Awesome.configure do |c| # (3). このブロック引数に @config が渡されている c.hoge = 123 # (4). @config オブジェクトの (a). で定義されている hoge に代入される c.fuga = 456 c.method = lambda{ p "hi" } # (5). メソッドも設定ファイルないで指定できる end p Awesome.config.hoge p Awesome.config.fuga p Awesome.config.method Awesome.config.method.call() # (6). (5)でlambdaとして保存したメソッドを実行
Railsを使っているとよく出てくる設定ファイルがどのような仕組みで成り立っているのか分からなくて 気持ち悪かったのですが、 これでスッキリしました。