Thorを使いやすくしてみた(Ruby・Railsバッチ編)
以前のエントリー:Thorを使ってみた(Rubyバッチ編)
いくつかRailsのバッチを書いていて、共通な部分が結構あったので、クラスとして出して、使いやすくしてみました。
やっていること:
- Helpの設定(-hでヘルプ表示)
- ログレベルの設定(-l FATAL, ERROR, WARN, INFO, DEBUGの5種類)
- ログファイルの設定(-f 上記ログレベルの設定がされていれば、出力先のログファイルを指定する)
- 実行環境の設定(-e Railsの実行環境を設定)
■注意点
Railsの環境設定を行っているため、Thor::Invocation.invoke_commandを継承している。
Thorの更新が入った場合、invoke_commandメソッドの呼ぶタイミングが変更されるかも?
Thor.invoke_command
Thor.dispath
Thor.start
などを参照してみてください。
■使い方
前のTestバッチ
class Test < Thor
class_option :help, :type => :boolean, :aliases => '-h', :desc => 'Thor test'
default_task :execute
desc "execute [OPTION]", "Test execute"
option :production, :type => :boolean, :aliases => '-p', :desc => "Run production DB server"
option :number, :type => :numeric, :aliases => '-n', :default => 3, :desc => "test number"def execute
# DBオプション
if options[:production] then
@mode = 'PRODUCTION'
else
@mode = 'DEVELOPMENT'
endputs @mode
puts options['number']
end
end
Test.start
MyThorを使ったバッチ。
class Test2 < MyThor
default_task :execute
desc "execute [OPTION]", "Test execute"
option :number, :type => :numeric, :aliases => '-n', :default => 3, :desc => "test number"def execute
puts Rails.env
puts options['number']
end
end
Test2.start
さらに簡単に。default_taskもMyThorに持っていくといいかもしれない。
===
はてなさんが直すのを待ち続けていたのですが、一向に直らないので、GistのCSSいじりました。多少見やすくなったのではないでしょうか。
コードが横に長いと行番号の横幅が無くなってしまい1行1桁しか表示されなくなってしまうのが問題でした。
デフォルトで!とおもったのですが、さすがに我慢できず。