parrish/Congestion

View on GitHub
lib/congestion.rb

Summary

Maintainability
A
0 mins
Test Coverage
require 'redis'
require 'congestion/version'
require 'congestion/rate_limiter'

module Congestion
  class << self
    attr_accessor :default_options
    attr_accessor :redis
  end

  self.default_options = {
    namespace: 'congestion', # Redis key namespace
    interval: 1,             # 1 second
    max_in_interval: 1,      # 1 / second
    min_delay: 0,            # none
    track_rejected: true
  }

  self.redis = ->{
    Redis.new
  }

  def self.request(key, opts = { })
    RateLimiter.new redis.call, key, default_options.merge(opts)
  end
end