アクトインディ開発者ブログ

子供とお出かけ情報「いこーよ」を運営する、アクトインディ株式会社の開発者ブログです

timecopのちょっとした使い方

この記事はアクトインディ Advent Calendar 2016 19日目になります。 どうぞよろしくお願いします。

今回はtimecopについて説明します。

timecopとは

timecopRubyのgemです。

過去の時間、未来の時間の日付で動作するようになります。

なお、現実では戻れないので、そこは注意が必要です。

簡単な使い方

簡単な使い方です。

Timecop.travel(2017, 1, 1) do
  Time.new
end
=> 2017-01-01 09:00:00 +0900

メソッドのブロック内の時間が未来になっているかと思います。

これを利用して、テストでは過去の時間、未来の時間にすることで特定のタイミングでのテストが書けることができます。

ちょっとした使い方

用途としては、テストで使うのが一般的だと思います。

ただ、特定のタイミングでのバッチ処理の結果が欲しい場合があります。

その中身のメソッド内で下記のようなコードがあったとします。


class Batch

  def self.update_analyses
    end_on = Date.today
    start_on = end_on - 3
    ...
    ...

  end

end


こういうメソッドの過去のデータが消えていて、過去のデータが欲しい場合にtimecopが役立ちます。

Timecop.travel(2016, 4, 1) do
  Batch.update_analyses
end

過去のデータが取れます。

以上です。

本当に時間が戻れればいいんですけどね。