Class: RobustServerSocket::RateLimiter

Inherits:
Object
  • Object
show all
Defined in:
lib/robust_server_socket/rate_limiter.rb

Constant Summary collapse

RateLimitExceeded =
Class.new(StandardError)

Class Method Summary collapse

Class Method Details

.check(client_name) ⇒ Object



15
16
17
18
# File 'lib/robust_server_socket/rate_limiter.rb', line 15

def check(client_name)
  attempts = record_attempt(client_name)
  attempts <= max_requests
end

.check!(client_name) ⇒ Object

Raises:



8
9
10
11
12
13
# File 'lib/robust_server_socket/rate_limiter.rb', line 8

def check!(client_name)
  return if check(client_name)

  raise RateLimitExceeded,
        "Rate limit exceeded for #{client_name}: max #{max_requests} per #{window_seconds}s"
end

.reset!(client_name) ⇒ Object



20
21
22
23
24
25
26
27
28
# File 'lib/robust_server_socket/rate_limiter.rb', line 20

def reset!(client_name)
  key = rate_limit_key(client_name)
  Cacher.with_redis do |conn|
    conn.del(key)
  end
rescue Cacher::RedisConnectionError => e
  handle_redis_error(e, 'reset')
  nil
end