Ruby SDK
Installation
gem install flexops
Or add to your Gemfile:
gem 'flexops'
Quick Start
require 'flexops'
client = FlexOps::Client.new(api_key: 'your-api-key')
rates = client.rates.get(
from: { zip: '80202', country: 'US' },
to: { zip: '10001', country: 'US' },
parcel: { weight: 2.5, length: 10, width: 8, height: 4 }
)
rates.rates.each do |rate|
puts "#{rate.carrier} #{rate.service}: $#{rate.total_price}"
end
Configuration
client = FlexOps::Client.new(
api_key: 'your-api-key',
base_url: 'https://api.flexops.io/v1', # optional
timeout: 30, # seconds
max_retries: 3
)
Shipping Operations
Create a Label
label = client.labels.create(
carrier: 'usps',
service: 'priority',
from: {
name: 'Warehouse',
street1: '123 Main St',
city: 'Denver',
state: 'CO',
zip: '80202',
country: 'US'
},
to: {
name: 'Customer',
street1: '456 Broadway',
city: 'New York',
state: 'NY',
zip: '10001',
country: 'US'
},
parcel: { weight: 2.5, length: 10, width: 8, height: 4 },
idempotency_key: 'order-12345'
)
puts label.tracking_number
puts label.label_url
Track a Shipment
tracking = client.tracking.get('9400111899223456789012')
puts tracking.status
puts tracking.estimated_delivery
tracking.events.each do |event|
puts "#{event.timestamp}: #{event.description}"
end
Validate an Address
result = client.addresses.validate(
street1: '123 Main St',
city: 'Denver',
state: 'CO',
zip: '80202',
country: 'US'
)
puts "Validated: #{result.normalized}" if result.valid?
Webhook Verification
post '/webhooks/flexops' do
payload = request.body.read
signature = request.env['HTTP_X_FLEXOPS_SIGNATURE']
unless FlexOps::Webhook.verify(payload, signature, 'whsec_your_secret')
halt 401, 'Invalid signature'
end
event = JSON.parse(payload)
case event['type']
when 'tracking.delivered'
handle_delivery(event['data'])
end
status 200
end
Error Handling
begin
label = client.labels.create(...)
rescue FlexOps::RateLimitError => e
puts "Retry after #{e.retry_after} seconds"
rescue FlexOps::Error => e
puts "#{e.code}: #{e.message}"
end