class Concurrent::Polling::Solver

Public Class Methods

new(poll_function, check_function) click to toggle source
# File lib/concurrent/polling.rb, line 23
def initialize(poll_function, check_function)
  @poll_function = poll_function
  @check_function = check_function
end

Public Instance Methods

solve(result) click to toggle source
# File lib/concurrent/polling.rb, line 28
def solve(result)

  condition_met = begin
    @check_function.call(result.ok)
  rescue Exception => e
    raise ConditionError.new(e)
  end

  if(condition_met)
    result
  elsif result.retries == 0
    raise TimeoutError.new
  else

    future = Concurrent::Future.new(&@poll_function).execute

    future_result = future.value # blocking

    solve(TempResult.new(future_result, (result.retries - 1) , nil))
  end
end