class Strait

A rate-limiter which provides natural defenses for your nation-state. Or your API.

Constants

VERSION

Attributes

config[R]
name[R]

Public Class Methods

configuration=(config) click to toggle source
# File lib/strait.rb, line 33
def self.configuration=(config)
  Strait::Configuration.default = Strait::Configuration.new(config)
end
new(name, rules: [], **config) click to toggle source
# File lib/strait.rb, line 13
def initialize(name, rules: [], **config)
  @name = name
  @raw_rules = rules
  @config = Strait::Configuration.default.merge(config)

  @raw_rules += Strait::DSL.new(&Proc.new).rules if block_given?
end

Public Instance Methods

limit!(user) click to toggle source
# File lib/strait.rb, line 21
def limit!(user)
  # Build a hash of { rule => acceptable } structure
  results = rules.map { |rule| [rule, rule.call(user)] }.to_h

  return if results.values.all?(true)

  # Raise an exception for the first rate limit hit
  results.each do |rule, acceptable|
    raise Strait::RateLimitExceeded, rule.to_h unless acceptable
  end
end

Private Instance Methods

rules() click to toggle source
# File lib/strait.rb, line 39
def rules
  @rules ||= @raw_rules.map do |rule|
    if rule.is_a?(Strait::Rule)
      rule
    else
      Strait::Rule.new(config: @config, name: @name, rule: rule)
    end
  end
end