Class: DuffelAPI::Middlewares::RateLimiter
- Inherits:
-
Faraday::Middleware
- Object
- Faraday::Middleware
- DuffelAPI::Middlewares::RateLimiter
- Defined in:
- lib/duffel_api/middlewares/rate_limiter.rb
Class Attribute Summary collapse
-
.ratelimit_limit ⇒ Object
Returns the value of attribute ratelimit_limit.
-
.ratelimit_remaining ⇒ Object
Returns the value of attribute ratelimit_remaining.
-
.ratelimit_reset ⇒ Object
Returns the value of attribute ratelimit_reset.
Class Method Summary collapse
Instance Method Summary collapse
- #call(env) ⇒ Object
-
#initialize(app, options = {}) ⇒ RateLimiter
constructor
A new instance of RateLimiter.
Constructor Details
#initialize(app, options = {}) ⇒ RateLimiter
Returns a new instance of RateLimiter.
17 18 19 |
# File 'lib/duffel_api/middlewares/rate_limiter.rb', line 17 def initialize(app, = {}) super(app, ) end |
Class Attribute Details
.ratelimit_limit ⇒ Object
Returns the value of attribute ratelimit_limit.
10 11 12 |
# File 'lib/duffel_api/middlewares/rate_limiter.rb', line 10 def ratelimit_limit @ratelimit_limit end |
.ratelimit_remaining ⇒ Object
Returns the value of attribute ratelimit_remaining.
10 11 12 |
# File 'lib/duffel_api/middlewares/rate_limiter.rb', line 10 def ratelimit_remaining @ratelimit_remaining end |
.ratelimit_reset ⇒ Object
Returns the value of attribute ratelimit_reset.
10 11 12 |
# File 'lib/duffel_api/middlewares/rate_limiter.rb', line 10 def ratelimit_reset @ratelimit_reset end |
Class Method Details
.mutex ⇒ Object
12 13 14 |
# File 'lib/duffel_api/middlewares/rate_limiter.rb', line 12 def mutex @mutex ||= Mutex.new end |
Instance Method Details
#call(env) ⇒ Object
21 22 23 24 25 26 27 28 29 30 31 32 33 |
# File 'lib/duffel_api/middlewares/rate_limiter.rb', line 21 def call(env) sleep_until_ratelimit_reset if rate_limited? app.call(env).tap do |response| headers = response.env.response_headers RateLimiter.mutex.synchronize do RateLimiter.ratelimit_limit = new_ratelimit_limit(headers) RateLimiter.ratelimit_remaining = new_ratelimit_remaining(headers) RateLimiter.ratelimit_reset = new_ratelimit_reset(headers) end end end |