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

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'
end

puts @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桁しか表示されなくなってしまうのが問題でした。

デフォルトで!とおもったのですが、さすがに我慢できず。