15th
Wed
Nested SymbolでDSLをより美しく
Rakeでnamespaceなどを使った場合に、Rubyのシンボルをネストさせたい時があるのですが、
1 task :foo => :"bar:baz"
のように書くのが、DSL的にちょっとかっこうわるいです。 そこで、以下のようなものがあればちょっと奇麗に書けます。
1 class Symbol 2 def method_missing(method, *args, &block) 3 if args.empty? && block.nil? 4 [self, method].join(':').intern 5 else 6 super 7 end 8 end 9 end 10 11 >> :foo #=> :foo 12 >> :foo.bar #=> :"foo:bar" 13 >> :foo.bar.baz #=> :"foo:bar:ba z"
いかがでしょう。
posted by
genki
on Wed 15 Apr 2009
at 05:49