Sha256: af4a8774a4bd776b59012abe1ad321eaac1056be1dae748d5c3e24165d170f1b
Contents?: true
Size: 979 Bytes
Versions: 4
Compression:
Stored size: 979 Bytes
Contents
# frozen_string_literal: true module Take2 class Backoff attr_reader :type, :start, :retries, :factor, :intervals def initialize(type, start = 1, factor = 1, retries = 10) @type = type @start = start.to_i @retries = retries @factor = factor @intervals = intervals_table end private def intervals_table send(type) end def constant Array.new(retries, start) end def linear (start...(retries + start)).map { |i| i * factor } end def fibonacci (1..20).map { |i| fibo(i) }.partition { |x| x >= start }.first.take(retries) end def exponential (1..20).each_with_index.inject([]) do |memo, (el, ix)| memo << if ix == 0 start else (2**el - 1) + rand(1..2**el) end end.take(retries) end def fibo(n, memo = {}) return n if n < 2 memo[n] ||= fibo(n - 1, memo) + fibo(n - 2, memo) end end end
Version data entries
4 entries across 4 versions & 1 rubygems
Version | Path |
---|---|
take2-1.0.0 | lib/take2/backoff.rb |
take2-0.1.1 | lib/take2/backoff.rb |
take2-0.1.0 | lib/take2/backoff.rb |
take2-0.0.5 | lib/take2/backoff.rb |