module Football::Butler::Tier

Constants

COUNTER_RESET_SAFE_SECONDS

Attributes

available_minute[RW]
counter_reset[RW]
last_request[RW]
sleep_seconds[RW]
total_requests[RW]

Public Class Methods

available_minute?(response, key_remaining_minute) click to toggle source
# File lib/football/butler/tier.rb, line 41
def available_minute?(response, key_remaining_minute)
  response&.headers&.dig(key_remaining_minute)&.present?
end
count_request() click to toggle source
# File lib/football/butler/tier.rb, line 67
def count_request
  @total_requests = @total_requests.is_a?(Integer) ? @total_requests + 1 : 1
end
counter_reset?(response, key_reset) click to toggle source
# File lib/football/butler/tier.rb, line 45
def counter_reset?(response, key_reset)
  response&.headers&.dig(key_reset)&.present?
end
get_sleep_seconds() click to toggle source
# File lib/football/butler/tier.rb, line 49
def get_sleep_seconds
  seconds = @counter_reset.is_a?(Integer) ? @counter_reset : 60
  result  = COUNTER_RESET_SAFE_SECONDS + seconds

  @sleep_seconds = @sleep_seconds.is_a?(Integer) ?
                     @sleep_seconds + result : result

  result
end
limit_exceeded?() click to toggle source
# File lib/football/butler/tier.rb, line 59
def limit_exceeded?
  @available_minute == 0 && @last_request >= 1.minute.ago
end
reset_sleep_seconds() click to toggle source
# File lib/football/butler/tier.rb, line 71
def reset_sleep_seconds
  @sleep_seconds = 0
end
reset_total_requests() click to toggle source
# File lib/football/butler/tier.rb, line 63
def reset_total_requests
  @total_requests = 0
end
set_from_response_headers(response) click to toggle source
# File lib/football/butler/tier.rb, line 11
def set_from_response_headers(response)
  case Configuration.api_name
  when :apifootball_com
    # n/a
  when :football_data_org
    if available_minute?(response, 'x-requests-available-minute') &&
      counter_reset?(response, 'x-requestcounter-reset')
      set_tier_from_response(
        response.headers['x-requests-available-minute'],
        response.headers['x-requestcounter-reset']
      )
    end
  when :api_football_com
    if available_minute?(response, 'x-ratelimit-remaining')
      set_tier_from_response(
        response.headers['x-ratelimit-remaining'],
        '60'
      )
    end
  end
end
set_tier_from_response(available_minute, counter_reset) click to toggle source
# File lib/football/butler/tier.rb, line 33
def set_tier_from_response(available_minute, counter_reset)
  @available_minute = available_minute.to_i
  @counter_reset    = counter_reset.to_i
  @last_request     = Time.current

  true
end