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
 |