module PrintfulClientModule

Constants

API_URL
USER_AGENT

Attributes

last_response[RW]
last_response_raw[RW]

Public Class Methods

new(key) click to toggle source

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

delete(path, params=nil) click to toggle source

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
get(path, params=nil) click to toggle source

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
item_count() click to toggle source

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
post(path, data=nil, params=nil) click to toggle source

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
put(path, data=nil, params=nil) click to toggle source

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

request(method, path, params=nil, data=nil) click to toggle source

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