25 lines
578 B
Ruby
25 lines
578 B
Ruby
|
# frozen_string_literal: true
|
||
|
|
||
|
module Gitlab
|
||
|
module LoopHelpers
|
||
|
##
|
||
|
# This helper method repeats the same task until it's expired.
|
||
|
#
|
||
|
# Note: ExpiredLoopError does not happen until the given block finished.
|
||
|
# Please do not use this method for heavy or asynchronous operations.
|
||
|
def loop_until(timeout: nil, limit: 1_000_000)
|
||
|
raise ArgumentError unless limit
|
||
|
|
||
|
start = Time.now
|
||
|
|
||
|
limit.times do
|
||
|
return true unless yield
|
||
|
|
||
|
return false if timeout && (Time.now - start) > timeout
|
||
|
end
|
||
|
|
||
|
false
|
||
|
end
|
||
|
end
|
||
|
end
|