Class: Labkit::RateLimit::Limiter
- Inherits:
-
Object
- Object
- Labkit::RateLimit::Limiter
- Defined in:
- lib/labkit/rate_limit/limiter.rb
Overview
Limiter is the primary public API for rate limiting. Instantiate once per call site (e.g. at application boot), then call #check(identifier) on every request. The internal Evaluator is reused across calls, avoiding per-request object allocation.
Constant Summary collapse
- NAME_PATTERN =
/\A[a-z0-9_]+\z/
Instance Method Summary collapse
- #check(identifier) ⇒ Result
-
#initialize(name:, rules:, redis: nil, logger: nil) ⇒ Limiter
constructor
A new instance of Limiter.
Constructor Details
#initialize(name:, rules:, redis: nil, logger: nil) ⇒ Limiter
Returns a new instance of Limiter.
22 23 24 25 26 27 28 29 30 31 32 |
# File 'lib/labkit/rate_limit/limiter.rb', line 22 def initialize(name:, rules:, redis: nil, logger: nil) resolved_logger = logger || RateLimit.config.logger || Labkit::Logging::JsonLogger.new($stdout) validated_name = validate_name!(name, resolved_logger) @evaluator = Evaluator.new( name: validated_name, rules: rules, redis: redis || RateLimit.config.redis, logger: resolved_logger ) end |
Instance Method Details
#check(identifier) ⇒ Result
36 37 38 39 |
# File 'lib/labkit/rate_limit/limiter.rb', line 36 def check(identifier) id = identifier.is_a?(Identifier) ? identifier : Identifier.new(identifier) @evaluator.check(id) end |