Class: Easyship::RateLimiting::WindowRateLimiter

Inherits:
RateLimiter
  • Object
show all
Defined in:
lib/easyship/rate_limiting/window_rate_limiter.rb

Overview

Represents WindowRateLimiter

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(requests_per_second:, requests_per_minute:) ⇒ WindowRateLimiter

Returns a new instance of WindowRateLimiter.



9
10
11
12
13
14
# File 'lib/easyship/rate_limiting/window_rate_limiter.rb', line 9

def initialize(requests_per_second:, requests_per_minute:)
  super()
  @requests_per_second = requests_per_second
  @requests_per_minute = requests_per_minute
  @timestamps = []
end

Instance Attribute Details

#requests_per_minuteObject (readonly)

Returns the value of attribute requests_per_minute.



7
8
9
# File 'lib/easyship/rate_limiting/window_rate_limiter.rb', line 7

def requests_per_minute
  @requests_per_minute
end

#requests_per_secondObject (readonly)

Returns the value of attribute requests_per_second.



7
8
9
# File 'lib/easyship/rate_limiting/window_rate_limiter.rb', line 7

def requests_per_second
  @requests_per_second
end

#timestampsObject (readonly)

Returns the value of attribute timestamps.



7
8
9
# File 'lib/easyship/rate_limiting/window_rate_limiter.rb', line 7

def timestamps
  @timestamps
end

Instance Method Details

#throttle!Object



16
17
18
19
20
21
22
23
24
25
26
# File 'lib/easyship/rate_limiting/window_rate_limiter.rb', line 16

def throttle!
  now = Time.now

  timestamps << now

  # Remove timestamps older than a minute
  timestamps.reject! { |t| t < now - 60 }

  check_second_window(now)
  check_minute_window(now)
end