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