module PrintReleaf::API
Constants
- API_EXCEPTIONS
- ENDPOINT
- MAX_RETRY_COUNT
- NETWORK_EXCEPTIONS
- PROTOCOL
- RETRY_DELAY_BASE
- USER_AGENT
Attributes
api_key[W]
endpoint[W]
logger[RW]
protocol[W]
user_agent[W]
Public Instance Methods
api_key()
click to toggle source
# File lib/printreleaf/api.rb, line 34 def api_key if @api_key.nil? or @api_key.strip.to_s.empty? raise Error, "Missing API Key." else return @api_key end end
delete(uri)
click to toggle source
# File lib/printreleaf/api.rb, line 66 def delete(uri) request :delete, uri end
endpoint()
click to toggle source
# File lib/printreleaf/api.rb, line 42 def endpoint @endpoint || ENDPOINT end
get(uri="/", params={})
click to toggle source
# File lib/printreleaf/api.rb, line 54 def get(uri="/", params={}) request :get, uri, params end
patch(uri, data={})
click to toggle source
# File lib/printreleaf/api.rb, line 62 def patch(uri, data={}) request :patch, uri, data end
post(uri, data={})
click to toggle source
# File lib/printreleaf/api.rb, line 58 def post(uri, data={}) request :post, uri, data end
protocol()
click to toggle source
# File lib/printreleaf/api.rb, line 46 def protocol @protocol || PROTOCOL end
request(verb, uri, params={})
click to toggle source
# File lib/printreleaf/api.rb, line 70 def request(verb, uri, params={}) perform_request do uri = Util.join_uri(endpoint, uri) url = "#{protocol}://#{uri}" request_params = { method: verb, url: url, headers: { accept: :json, :Authorization => "Bearer #{api_key}", :user_agent => user_agent } } if verb == :get || verb == :delete request_params[:headers][:params] = params unless params.empty? else request_params[:payload] = params.to_json request_params[:headers][:content_type] = :json end unless logger.nil? logger.info "[PrintReleaf] #{verb.upcase} #{uri}" end response = RestClient::Request.execute(request_params) JSON.parse(response.body) end end
user_agent()
click to toggle source
# File lib/printreleaf/api.rb, line 50 def user_agent @user_agent || USER_AGENT end
Private Instance Methods
handle_api_error(e, retry_count=0)
click to toggle source
# File lib/printreleaf/api.rb, line 136 def handle_api_error(e, retry_count=0) # We likely got an http status code outside the 200-399 range. # If this is a GET or DELETE request, it is likely the resource is not owned by the client. # If this is a POST, PUT, or PATCH, the data might be invalid. code = e.response.code message = e.response ? JSON.parse(e.response.body)["error"] : "Something went wrong. Please try again." message += " (code=#{code})" message += " Request was retried #{retry_count} times." if retry_count > 0 exception = API_EXCEPTIONS[e.response.code] || Error raise exception, message end
handle_error(e, retry_count)
click to toggle source
# File lib/printreleaf/api.rb, line 119 def handle_error(e, retry_count) case e when RestClient::ExceptionWithResponse if e.response handle_api_error(e, retry_count) else handle_restclient_error(e, retry_count) end when JSON::ParserError handle_json_error(e, retry_count) when *NETWORK_EXCEPTIONS handle_network_error(e, retry_count) else raise end end
handle_json_error(e, retry_count=0)
click to toggle source
# File lib/printreleaf/api.rb, line 148 def handle_json_error(e, retry_count=0) # We received the data fine, but we're unable to parse it. # Re-raise a generic error. message = "Unable to parse response. Please try again." message += " Request was retried #{retry_count} times." if retry_count > 0 message += " (#{e.class.name})" raise ResponseError, message end
handle_network_error(e, retry_count=0)
click to toggle source
# File lib/printreleaf/api.rb, line 157 def handle_network_error(e, retry_count=0) message = "Unexpected error communicating when trying to connect to PrintReleaf." message += " Request was retried #{retry_count} times." if retry_count > 0 message += " (#{e.class.name})" raise NetworkError, message end
handle_restclient_error(e, retry_count=0)
click to toggle source
# File lib/printreleaf/api.rb, line 164 def handle_restclient_error(e, retry_count=0) message = "Something went wrong with the request. Please try again." message += " Request was retried #{retry_count} times." if retry_count > 0 message += " (#{e.class.name})" raise RequestError, message end
perform_request() { || ... }
click to toggle source
# File lib/printreleaf/api.rb, line 104 def perform_request retry_count = 0 begin yield rescue => e if should_retry?(e, retry_count) retry_count += 1 sleep retry_delay(retry_count) retry else handle_error(e, retry_count) end end end
retry_delay(retry_count=0)
click to toggle source
# File lib/printreleaf/api.rb, line 175 def retry_delay(retry_count=0) RETRY_DELAY_BASE ** retry_count end
should_retry?(e, retry_count=0)
click to toggle source
# File lib/printreleaf/api.rb, line 171 def should_retry?(e, retry_count=0) NETWORK_EXCEPTIONS.include?(e.class) && retry_count < MAX_RETRY_COUNT end