soukouki’s diary

誰かの役に立つ記事をかけたらいいなあ

Rubyで、代入に=を使ったdslの作り方。

こんなのを読み込みたかった

aaa = 123
bbb = 456

ほかのサイトだと「作れない」と書いてありますが、全然いけます。

def run(__path)
    __src_binding = eval(open(__path).read+"\nbinding")
    __src_binding
        .local_variables
        .delete_if{|name| name.to_s[0..1]=="__" }
        .map{|name| {name:name, variable:__src_binding.local_variable_get(name)} }
end

バグが取りきれてないかも。

class Binding (Ruby 2.2.0)を活用してみた。

eval(open(__path).read+"\nbinding")"\nbinding"が肝であり、あまり綺麗じゃないところ。

ruby 2.3.0p0 (2015-12-25 revision 53290) [x64-mingw32]