class Aws::Waiters::Waiter
@api private
def before_attempt(&block)
- Yieldparam: attempts - The number of attempts made.
def before_attempt(&block) @before_attempt << block if block_given? end
def before_wait(&block)
- Yieldparam: response - The response from
Yieldparam: attempts - The number of attempts already made.
def before_wait(&block) @before_wait << block if block_given? end
def initialize(options = {})
- Api: - private
def initialize(options = {}) @poller = options[:poller] @max_attempts = options[:max_attempts] @delay = options[:delay] @before_attempt = Array(options[:before_attempt]) @before_wait = Array(options[:before_wait]) end
def poll(options)
def poll(options) n = 0 loop do trigger_before_attempt(n) state, resp = @poller.call(options) n += 1 case state when :retry when :success then return resp when :failure then raise Errors::FailureStateError.new(resp) when :error then raise Errors::UnexpectedError.new(resp.error) end raise Errors::TooManyAttemptsError.new(n) if n == @max_attempts trigger_before_wait(n, resp) sleep(@delay) end end
def trigger_before_attempt(attempts)
def trigger_before_attempt(attempts) @before_attempt.each { |block| block.call(attempts) } end
def trigger_before_wait(attempts, response)
def trigger_before_wait(attempts, response) @before_wait.each { |block| block.call(attempts, response) } end
def wait(options)
(**options)
-
:params
(Hash
) -- -
:client
(Client
) --
def wait(options) catch(:success) do failure_msg = catch(:failure) do return poll(options) end raise Errors::WaiterFailed.new(failure_msg || 'waiter failed') end || true end