読者です 読者をやめる 読者になる 読者になる

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]