Class: Labkit::RateLimit::Result
- Inherits:
-
Data
- Object
- Data
- Labkit::RateLimit::Result
- Defined in:
- lib/labkit/rate_limit/result.rb
Overview
Result is the return value of Limiter#check. matched? - true if a rule’s match conditions were satisfied exceeded? - true if the matched rule’s counter exceeded its limit action - the outcome: what the caller should do
:block = rule matched, exceeded, rule configured to block
:log = rule matched, exceeded, rule configured to log only
:allow = rule matched but count within limit, or
no rule matched, or error (fail-open)
The rule's configured action is available via rule.action
rule - the matched Rule object (nil when matched? is false) error? - true if Redis was unavailable; result fails open (exceeded? is false) info - Result::Info with per-window counters; nil when matched? is false or error?
Defined Under Namespace
Classes: Info
Instance Attribute Summary collapse
-
#action ⇒ Object
readonly
Returns the value of attribute action.
-
#error ⇒ Object
readonly
Returns the value of attribute error.
-
#exceeded ⇒ Object
readonly
Returns the value of attribute exceeded.
-
#info ⇒ Object
readonly
Returns the value of attribute info.
-
#matched ⇒ Object
readonly
Returns the value of attribute matched.
-
#rule ⇒ Object
readonly
Returns the value of attribute rule.
Instance Method Summary collapse
- #error? ⇒ Boolean
- #exceeded? ⇒ Boolean
-
#initialize(matched:, action: nil, exceeded: false, rule: nil, error: false, info: nil) ⇒ Result
constructor
A new instance of Result.
- #matched? ⇒ Boolean
-
#to_response_headers ⇒ Object
Returns RFC-compliant rate limit response headers, or {} when no rule matched or an error occurred.
Constructor Details
#initialize(matched:, action: nil, exceeded: false, rule: nil, error: false, info: nil) ⇒ Result
Returns a new instance of Result.
18 19 20 |
# File 'lib/labkit/rate_limit/result.rb', line 18 def initialize(matched:, action: nil, exceeded: false, rule: nil, error: false, info: nil) super end |
Instance Attribute Details
#action ⇒ Object (readonly)
Returns the value of attribute action
17 18 19 |
# File 'lib/labkit/rate_limit/result.rb', line 17 def action @action end |
#error ⇒ Object (readonly)
Returns the value of attribute error
17 18 19 |
# File 'lib/labkit/rate_limit/result.rb', line 17 def error @error end |
#exceeded ⇒ Object (readonly)
Returns the value of attribute exceeded
17 18 19 |
# File 'lib/labkit/rate_limit/result.rb', line 17 def exceeded @exceeded end |
#info ⇒ Object (readonly)
Returns the value of attribute info
17 18 19 |
# File 'lib/labkit/rate_limit/result.rb', line 17 def info @info end |
#matched ⇒ Object (readonly)
Returns the value of attribute matched
17 18 19 |
# File 'lib/labkit/rate_limit/result.rb', line 17 def matched @matched end |
#rule ⇒ Object (readonly)
Returns the value of attribute rule
17 18 19 |
# File 'lib/labkit/rate_limit/result.rb', line 17 def rule @rule end |
Instance Method Details
#error? ⇒ Boolean
30 31 32 |
# File 'lib/labkit/rate_limit/result.rb', line 30 def error? error end |
#exceeded? ⇒ Boolean
26 27 28 |
# File 'lib/labkit/rate_limit/result.rb', line 26 def exceeded? exceeded end |
#matched? ⇒ Boolean
22 23 24 |
# File 'lib/labkit/rate_limit/result.rb', line 22 def matched? matched end |
#to_response_headers ⇒ Object
Returns RFC-compliant rate limit response headers, or {} when no rule matched or an error occurred. Keys: RateLimit-Limit, RateLimit-Remaining, RateLimit-Reset (Unix timestamp). reset_at is advisory only - derived from a pipelined redis.ttl call, not fully atomic.
37 38 39 40 41 42 43 44 45 |
# File 'lib/labkit/rate_limit/result.rb', line 37 def to_response_headers return {} unless matched? && !error? && info { "RateLimit-Limit" => info.resolved_limit.to_s, "RateLimit-Remaining" => info.remaining.to_s, "RateLimit-Reset" => info.reset_at.to_i.to_s } end |