class RateThrottleClient::GcraFakeServer
Public Class Methods
new(starting_limit: 0)
click to toggle source
# File lib/rate_throttle_client/servers/gcra/gcra_fake_server.rb, line 11 def initialize(starting_limit: 0) @limit_left = starting_limit.to_f @mutex = Mutex.new @rate_of_gain = RateThrottleClient.max_limit / 3600.to_f @max_requests = RateThrottleClient.max_limit end
Public Instance Methods
call(_)
click to toggle source
# File lib/rate_throttle_client/servers/gcra/gcra_fake_server.rb, line 18 def call(_) @last_request ||= Time.now headers = nil successful_request = false @mutex.synchronize do if @limit_left < @max_requests current_request = Time.now time_diff = current_request - @last_request @last_request = current_request @limit_left = [@limit_left + time_diff * @rate_of_gain, @max_requests].min end if @limit_left >= 1 @limit_left -= 1 successful_request = true end headers = { "RateLimit-Remaining" => [@limit_left.floor, 0].max, "RateLimit-Multiplier" => 1, "Content-Type" => "text/plain".freeze } end if !successful_request status = 429 body = "!!!!! Nope !!!!!".freeze else status = 200 body = "<3<3<3 Hello world <3<3<3".freeze end return [status, headers, [body]] end