Rakeでnamespaceなどを使った場合に、Rubyのシンボルをネストさせたい時があるのですが、

ruby>>
task :foo => :"bar:baz"
<<--

のように書くのが、DSL的にちょっとかっこうわるいです。
そこで、以下のようなものがあればちょっと奇麗に書けます。

ruby>>
class Symbol
def method_missing(method, *args, &block)
if args.empty? && block.nil?
[self, method].join(':').intern
else
super
end
end
end

:foo #=> :foo
:foo.bar #=> :"foo:bar"
:foo.bar.baz #=> :"foo:bar:baz"
<<--

いかがでしょう。

posted by genki genki on Wed 15 Apr 2009 at 05:45 with 0 comments