whenever の runner で タスク(メソッド) に引数を与えるときにスマートに書く

前提

Foo.bar というメソッドが Time型 の引数を取ると仮定します。すなわち、Foo.bar(Time.now) みたいな感じです。

runner で書く

wheneverrunner を用いて書くと、上記のメソッドを実行する場合は例えば以下のようになるかと思います。

every '00 18 * * *' do
  runner 'Foo.bar(Time.now)'
end

これはこれでよいです。しかし、引数が長くなったらどうでしょうか。

たとえば引数に Time.now - ((60 * 60 * 24) * 90) を与えたい場合はどうするかです。もちろん runner 'Foo.bar(Time.now - ((60 * 60 * 24) * 90))' と書けばオッケーなんですが、可読性が低いです。

結論

要は cron なので、命令を連結します。

every '00 18 * * *' do
  runner 'my_time = Time.now - ((60 * 60 * 24) * 90); Foo.bar(my_time)'
end

補足

cron の性質から言うと、そもそもごちゃごちゃした引数を用いるのは設計上よくないという気もしますが、こういう場合もきっとあるかと思います。

Powered by はてなブログ