Web系のAPIをたたいていると、たまにエラーが発生することがあります。要因はサーバー側がたまたまおかしかったり、proxyだったりと様々です。
エラー時にはリトライしつつAPIをたたく方法はいろいろ考えられますが、C#でのスマートな実例がStackOverflowで紹介されていました。リトライ専用のクラスとstaticメソッドを実装して、呼出にはデリゲート、ラムダ式を用いるという手法です。
Rubyでも同様の処理を行うコードを考えてみました。
class Retry @count = 10 @wait = 60 def self.do(func) ret = nil ex = nil for i in 1..@count do begin ret = func.call sleep(1) return ret rescue => e ret = nil ex = e sleep(@wait) end end if (!ex.nil?) ex = Exception.new end throw ex end end