Ruby Examples
Complete code examples for using the TakeTheme API with Ruby.
Setup
Using Net::HTTP
require 'net/http'
require 'json'
require 'uri'
class TakeThemeClient
BASE_URL = 'https://api.taketheme.com/api/v1'.freeze
def initialize(api_key)
@api_key = api_key
end
def get(endpoint, params = {})
uri = URI("#{BASE_URL}#{endpoint}")
uri.query = URI.encode_www_form(params) unless params.empty?
request(Net::HTTP::Get.new(uri))
end
def post(endpoint, data)
uri = URI("#{BASE_URL}#{endpoint}")
req = Net::HTTP::Post.new(uri)
req.body = data.to_json
request(req)
end
def patch(endpoint, data)
uri = URI("#{BASE_URL}#{endpoint}")
req = Net::HTTP::Patch.new(uri)
req.body = data.to_json
request(req)
end
def delete(endpoint)
uri = URI("#{BASE_URL}#{endpoint}")
request(Net::HTTP::Delete.new(uri))
end
private
def request(req)
req["tt-api-key"] = "#{@api_key}"
req['Content-Type'] = 'application/json'
uri = req.uri
response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) do |http|
http.request(req)
end
result = JSON.parse(response.body)
unless response.is_a?(Net::HTTPSuccess)
raise TakeThemeError.new(result, response.code.to_i)
end
result
end
end
class TakeThemeError < StandardError
attr_reader :status, :code
def initialize(error, status_code)
@status = error['status'] || status_code
@code = error['code'] # Only present on some errors like rate limits
super(error['message'] || error['name'] || 'Unknown error')
end
end
# Initialize
client = TakeThemeClient.new(ENV['TAKETHEME_API_KEY'])
Using Faraday
gem install faraday
require 'faraday'
require 'json'
class TakeThemeFaradayClient
BASE_URL = 'https://api.taketheme.com/api/v1'.freeze
def initialize(api_key)
@conn = Faraday.new(url: BASE_URL) do |f|
f.request :json
f.response :json
f.adapter Faraday.default_adapter
f.headers['tt-api-key'] = "#{api_key}"
end
end
def get(endpoint, params = {})
response = @conn.get(endpoint, params)
handle_response(response)
end
def post(endpoint, data)
response = @conn.post(endpoint, data)
handle_response(response)
end
def patch(endpoint, data)
response = @conn.patch(endpoint, data)
handle_response(response)
end
def delete(endpoint)
response = @conn.delete(endpoint)
handle_response(response)
end
private
def handle_response(response)
unless response.success?
raise TakeThemeError.new(response.body, response.status)
end
response.body
end
end
Products
List All Products
response = client.get('/products', limit: 25)
products = response['data']
pagination = response['pagination']
puts "Found #{pagination['total_count']} products"
products.each do |product|
puts "- #{product['title']} ($#{product['price']})"
end
Get a Single Product
product = client.get('/products/prod_abc123')['data']
puts "#{product['title']}: #{product['description']}"
Create a Product
new_product = client.post('/products', {
title: 'Premium Sneakers',
description: 'Comfortable running sneakers',
price: 89.99,
currency: 'USD',
status: 'active',
variants: [
{ title: 'Size 8', sku: 'SNEAKER-8', price: 89.99, inventory_quantity: 25 },
{ title: 'Size 9', sku: 'SNEAKER-9', price: 89.99, inventory_quantity: 30 },
{ title: 'Size 10', sku: 'SNEAKER-10', price: 89.99, inventory_quantity: 20 }
],
images: [
{ src: 'https://example.com/sneakers.jpg', alt: 'Premium Sneakers' }
]
})['data']
puts "Created product: #{new_product['id']}"