Method: Reddit::Internal::Connection#request
- Defined in:
- lib/reddit/internal/connection.rb
#request(method, url, payload) ⇒ Object
Handles Requests From This Users Auth
104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 |
# File 'lib/reddit/internal/connection.rb', line 104 def request(method, url, payload) raise "User Not Signed In!" unless @token refresh() if @token_expiration < Time.now.to_f Reddit::Internal::Logger.log.debug "Reqest From User #{@username}, method: #{method}, url: #{url}" if @request_throttle Reddit::Internal::Logger.log.debug "Request Throttling Enabled, Processing Request at #{Time.now.to_f}, Last Call: #{@last_request_time}..." request_wait_time = @requests_per_minute / 60 next_avaliable = @last_request_time + request_wait_time if Time.now.to_f < next_avaliable sleep_time = (next_avaliable - Time.now.to_f) Reddit::Internal::Logger.log.info "Rate Limiter Sleeping For #{sleep_time}" sleep sleep_time end end # Handle getting a new token if we expired... retries = @max_retries begin response = JSON.parse(RestClient::Request.execute(method: method, url: url, payload: payload, headers: {"Authorization" => "bearer #{token}", "User-Agent" => "ruby-reddit-api:#{user_agent_title}"} )) rescue StandardError => e retry unless (retries -= 1).zero? raise e end Reddit::Internal::Logger.log.debug "Request Response:" Reddit::Internal::Logger.log.debug JSON.pretty_generate(response) @last_request_time = Time.now.to_f return response end |