例外発生時に再試行するEnumerable#retry_if

 こんにちは。那由多屋の加藤です。

 最近、「ある例外が発生した場合は、n回の再試行を行う」というコードを書くことが多かったので、一般化してメソッド化してみました。

 例えば、GAE/JRubyではAppEngine::Datastore::Timeoutが低くない頻度で発生しますが、単純に再試行するだけで成功したりします。Enumerable#retry_ifメソッドを使えば、下記のようにシンプルに記述できます。

entries = 3.times.retry_if(AppEngine::Datastore::Timeout) {
  Entry.all
}

 Enumerable#retry_ifのコードとテストは、gistにアップロードしました。gist:293358

 イマイチ名前が気に入らないので、良い名前を募集中!