Class: RubyReactor::RateLimitRegistry
- Inherits:
-
Object
- Object
- RubyReactor::RateLimitRegistry
- Defined in:
- lib/ruby_reactor/rate_limit_registry.rb
Overview
Global registry of named rate limits, configured once via ‘RubyReactor.configure`. Lets multiple reactors share a single quota for an external service (e.g. all Stripe-calling reactors throttle against one `:stripe` bucket).
Defined Under Namespace
Classes: UnknownLimitError
Instance Method Summary collapse
-
#fetch(name) ⇒ Object
Return the normalized spec array for a registered name, or raise if the name was never registered (resolved lazily at execute time, so the error surfaces with a clear message instead of a nil dereference).
-
#initialize ⇒ RateLimitRegistry
constructor
A new instance of RateLimitRegistry.
-
#register(name, limit: nil, period: nil, limits: nil) ⇒ Object
Register a named rate limit.
- #registered?(name) ⇒ Boolean
Constructor Details
#initialize ⇒ RateLimitRegistry
Returns a new instance of RateLimitRegistry.
24 25 26 |
# File 'lib/ruby_reactor/rate_limit_registry.rb', line 24 def initialize @limits = {} end |
Instance Method Details
#fetch(name) ⇒ Object
Return the normalized spec array for a registered name, or raise if the name was never registered (resolved lazily at execute time, so the error surfaces with a clear message instead of a nil dereference).
40 41 42 43 44 45 |
# File 'lib/ruby_reactor/rate_limit_registry.rb', line 40 def fetch(name) @limits.fetch(name.to_sym) do raise UnknownLimitError, "Unknown rate limit #{name.inspect}. " \ "Register it with config.rate_limits.register(#{name.inspect}, ...)." end end |
#register(name, limit: nil, period: nil, limits: nil) ⇒ Object
Register a named rate limit. Same window args as the inline DSL form: a single window (‘limit:` + `period:`) or layered windows (`limits:`).
30 31 32 33 34 35 |
# File 'lib/ruby_reactor/rate_limit_registry.rb', line 30 def register(name, limit: nil, period: nil, limits: nil) @limits[name.to_sym] = RubyReactor::RateLimit.normalize_specs( limit: limit, period: period, limits: limits ) self end |
#registered?(name) ⇒ Boolean
47 48 49 |
# File 'lib/ruby_reactor/rate_limit_registry.rb', line 47 def registered?(name) @limits.key?(name.to_sym) end |