thorでnamespaceを指定するときの注意点
Rubyでコマンドラインスクリプトを作成するときにお世話になるフレームワーク「thor」ですが、namespaceメソッドを使って複数のクラスに対して同じnamespaceを設定すると、片方のクラスに実装されているタスクしか実行できないようです。
具体的にはこんな感じです。下記のように2つのthorファイルがあるとします。
[gist id=3910052]
[gist id= 3910078]
この時、下記コマンドでthorタスクの一覧を表示すると
$ thor -T
ちゃんと
thor foo:fuga #fugafuga
thor foo:hoge #hogehoge!!
と表示されるのですが、foo:fugaタスクを実行すると
$ thor foo:fuga
fugafuga # ちゃんと表示される
しかし、foo:hogeタスクを実行すると
$ thor foo:hoge
Could not find task "foo:hoge".
なぜかタスクがないと怒られます。。。
しょうがないのでこの場合は、下記のように"Foo"というmoduleの中にそれぞれのクラスを実装するように修正すると上手く動くようになります。
[gist id=3910101]
[gist id=3910105]