Postmates
Ruby wrapper for the Postmates API.
Installation
gem install 'postmates'
or add gem 'postmates'
to your Gemfile and bundle
.
Configuration
You'll need an API key and your customer ID. You can sign up to register your app here. Just want to test things out? Postmates has you covered with a test key and customer account.
# Create a new Postmates client
@client = Postmates.new
# Set basic config variables
@client.configure do |config|
config.api_key = 'YOUR_API_KEY'
config.customer_id = 'YOUR_CUSTOMER_ID'
end
# Or do some more advanced stuff
@client.configure do |config|
# Get full Faraday responses instead of Ruby objects representing the body
config.raw_response = true
# Ensure consistent fields & formats by specifying a version in the header
config.headers.merge!('X-Postmates-Version' => 20140825)
# Work with a possible future version of the API
config.api_url = 'https://api.postmates.com/v2/'
end
# And switch back to the defaults easily
@client.reset
Usage
Descriptions and examples of the supported actions are below. For a more detailed explanation of available endpoints and an exhaustive list of the properties each response returns, check out the official Postmates developer documentation.
Customer Deliveries Endpoints
POST /v1/customers/:customer_id/delivery_quotes
Get a delivery quote. Returns a Postmates::Quote
object.
from = "20 McAllister St, San Francisco, CA"
to = "101 Market St, San Francisco, CA"
quote = @client.quote(pickup_address: from, dropoff_address: to)
quote.fee # => 1350
quote.currency # => "usd"
format = '%m/%d/%Y %I:%M:%S%p' # all times are returned in UTC
quote.expires_at.strftime(format) # => "01/05/2015 09:35:28PM"
quote.expired? # => false
POST /v1/customers/:customer_id/deliveries
Create a delivery. Returns a Postmates::Delivery
object.
# all fields required except where noted
package = {
manifest: "a box of kittens",
pickup_name: "The Warehouse",
pickup_address: "20 McAllister St, San Francisco, CA",
pickup_phone_number: "555-555-5555",
pickup_business_name: "Optional Pickup Business Name, Inc.",
pickup_notes: "Optional note that this is Invoice #123",
dropoff_name: "Alice",
dropoff_address: "101 Market St, San Francisco, CA",
dropoff_phone_number: "415-555-1234",
dropoff_business_name: "Optional Dropoff Business Name, Inc.",
dropoff_notes: "Optional note to ring the bell",
quote_id: "dqt_K9LFfpSZCdAJsk" # optional
}
delivery = @client.create(package)
delivery.id # => "del_K9gEsDNuPJ-lLV"
delivery.status # => "pending"
delivery.delivered? # => false
delivery.pickup # a hash representing pickup information
delivery.dropoff # a hash representing dropoff information
GET /v1/customers/:customer_id/deliveries
Fetch a list of all deliveries for a customer. Returns an array of Postmates::Delivery
objects.
my_deliveries = @client.list
my_ongoing_deliveries = @client.list(filter: 'pending')
# If the result is too large for one response
# there are a few meta-attributes you can call on the returned array
# Here's a simulated example of a paginated response:
deliveries = @client.list(limit: 2)
deliveries.size # => 2 (number of deliveries in the returned array)
deliveries.total_count # => 6 (number of total deliveries)
deliveries.next_href # a URI object representing the path to the next page
GET /v1/customers/:customer_id/deliveries/:delivery_id
Fetch a single delivery by id. Returns a Postmates::Delivery
object.
@client.retrieve('del_K9gEsDNuPJ-lLV')
POST /v1/customers/:customer_id/deliveries/:delivery_id/cancel
Cancel an ongoing delivery prior to pickup. Returns a Postmates::Delivery
object.
@client.cancel('del_K9gEsDNuPJ-lLV')
POST /v1/customers/:customer_id/deliveries/:delivery_id/return
Cancel an ongoing delivery that was already picked up and create a delivery that is a reverse of the original. The items will get returned to the original pickup location. Returns a Postmates::Delivery
object.
@client.cancel('del_K9gEsDNuPJ-lLV')
Contributing
- Fork it ( https://github.com/[my-github-username]/postmates/fork )
- Create your feature branch (
git checkout -b my-new-feature
) - Commit your changes (
git commit -am 'Add some feature'
) - Push to the branch (
git push origin my-new-feature
) - Create a new Pull Request