Class: Sinew::Connection::RateLimit

Inherits:
Faraday::Middleware
  • Object
show all
Defined in:
lib/sinew/connection/rate_limit.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(app, options = {}) ⇒ RateLimit



6
7
8
9
10
11
# File 'lib/sinew/connection/rate_limit.rb', line 6

def initialize(app, options = {})
  super(app)

  @last_request_tm = @current_request_tm = nil
  @rate_limit = options.fetch(:rate_limit, 1)
end

Instance Attribute Details

#rate_limitObject (readonly)

Returns the value of attribute rate_limit.



4
5
6
# File 'lib/sinew/connection/rate_limit.rb', line 4

def rate_limit
  @rate_limit
end

Instance Method Details

#on_complete(env) ⇒ Object



22
23
24
25
26
# File 'lib/sinew/connection/rate_limit.rb', line 22

def on_complete(env)
  # Only rate limit on uncached requests
  @last_request_tm = @current_request_tm unless env[:httpdisk]
  @current_request_tm = nil
end

#on_request(_env) ⇒ Object



13
14
15
16
17
18
19
20
# File 'lib/sinew/connection/rate_limit.rb', line 13

def on_request(_env)
  if @last_request_tm
    sleep = (@last_request_tm + rate_limit) - Time.now
    sleep(sleep) if sleep > 0
  end

  @current_request_tm = Time.now
end