module PrintfulClientModule
Constants
- API_URL
- USER_AGENT
Attributes
Public Class Methods
Initialize API library key - Printful Store API key
# File lib/printful_client.rb, line 26 def initialize(key) @api_key = key end
Public Instance Methods
Perform a DELETE request to the API path - Request path (e.g. 'orders' or 'orders/123') params - Additional GET parameters as a hash
# File lib/printful_client.rb, line 47 def delete(path, params=nil) request('DELETE', path, params) end
Perform a GET request to the API path - Request path (e.g. 'orders' or 'orders/123') params - Additional GET parameters as a hash
# File lib/printful_client.rb, line 39 def get(path, params=nil) request('GET', path, params) end
Returns total available item count from the last request if it supports paging (e.g order list) or nil otherwise
# File lib/printful_client.rb, line 32 def item_count return last_response && last_response.key?('paging') ? last_response['paging']['total'] : nil end
Perform a POST request to the API path - Request path (e.g. 'orders' or 'orders/123') data - Request body data as a hash params - Additional GET parameters as a hash
# File lib/printful_client.rb, line 56 def post(path, data=nil, params=nil) request('POST', path, params, data) end
Perform a PUT request to the API path - Request path (e.g. 'orders' or 'orders/123') data - Request body data as a hash params - Additional GET parameters as a hash
# File lib/printful_client.rb, line 65 def put(path, data=nil, params=nil) request('PUT', path, params, data) end
Private Instance Methods
Internal generic request wrapper
# File lib/printful_client.rb, line 70 def request (method, path, params=nil, data=nil) @last_response_raw = nil @last_response = nil uri = URI.join(API_URL, path) if params query = URI.encode_www_form(params) uri.query = query end body = data ? JSON.generate(data) : nil headers = { 'User-Agent' => USER_AGENT } begin http = Net::HTTP.start( uri.host, uri.port, :use_ssl => uri.scheme=='https', :open_timeout => 10, :read_timeout => 20 ) do |http| request = Net::HTTPGenericRequest.new(method,(body ? true : false), true, uri.request_uri ,headers) request.basic_auth @api_key, '' response = http.request(request, body) @last_response_raw = response.body begin result = JSON.parse(response.body) @last_response = result rescue JSON::ParserError raise PrintfulException, "API response was not valid JSON" end if !result.key?('code') || !result.key?('result') raise PrintfulException, "Invalid API response" end status = result['code'] if status<200 || status >=300 raise PrintfulApiException.new(status), result['result'] end result['result'] end rescue PrintfulException raise rescue Exception => e raise PrintfulException, 'API request failed: ' + e.message end end