rake でクラスメソッドを切り出したい


以下のような Rakefile を記述しました。

[code]

    class HogeUtility
      def self.hoge
        sh "echo hoge"
      end
    end
    
    desc "Test task"
    task "hogeTest" do
      HogeUtility.hoge
    end
    
[/code]

実際にこのタスクを実行してみたところ、以下のようなエラーが発生しました。

[code]

    $ rake hogeTest
    rake aborted!
    NoMethodError: undefined method `sh' for HogeUtility:Class
    /home/vagrant/Workspace/verify-tester/Rakefile:5:in `hoge'
    /home/vagrant/Workspace/verify-tester/Rakefile:11:in `block in <top (required)>'
    Tasks: TOP => hogeTest
    (See full trace by running task with --trace)
    
[/code]

どうしたら、クラスメソッドとして切り出した処理を実行できますか？

なぜ、クラスメソッドして切り出したいか、というと、複数別々のタスクからその処理を実行したいからです。なので、クラスメソッドでなくても、処理が切り出せればいいとは思っています。




`Rake::DSL` を extend すれば実現できました。

[code]

    module HogeUtility
      extend Rake::DSL
      def self.hoge
        sh "echo hoge"
      end
    end
    
    desc "Test task"
    task "hogeTest" do
      HogeUtility.hoge
    end
    
[/code]

実行例:

[code]

    $ rake hogeTest
    echo hoge
    hoge
    
[/code]




`Rake::DSL` を extend すれば実現できました。

[code]

    module HogeUtility
      extend Rake::DSL
      def self.hoge
        sh "echo hoge"
      end
    end
    
    desc "Test task"
    task "hogeTest" do
      HogeUtility.hoge
    end
    
[/code]

実行例:

[code]

    $ rake hogeTest
    echo hoge
    hoge
    
[/code]

