The Uber Ruby Gem
A Ruby interface to the Uber API.
Installation
Add this line to your application's Gemfile:
gem 'uber-ruby', require: 'uber'
And then execute:
$ bundle
Or install it yourself as:
$ gem install uber-ruby
Configuration
client = Uber::Client.new do |config|
config.server_token = "YOUR_SERVER_TOKEN"
config.client_id = "YOUR_CLIENT_ID"
config.client_secret = "YOUR_CLIENT_SECRET"
end
Sandbox mode
The Uber API Sandbox provides development endpoints for testing the functionality of an application without making calls to the production Uber platform. All requests made to the Sandbox environment will be ephemeral.
client = Uber::Client.new do |config|
config.server_token = "YOUR_SERVER_TOKEN"
config.client_id = "YOUR_CLIENT_ID"
config.client_secret = "YOUR_CLIENT_SECRET"
config.sandbox = true
end
# More info here https://developer.uber.com/docs/sandbox#section-product-types
Debug mode
Add config.debug = true
to log HTTP request-response headers while making API requests.
Usage
Request Products
client = Uber::Client.new do |config|
config.server_token = "YOUR_SERVER_TOKEN"
end
client.products(latitude: lat, longitude: lon)
Request price estimations
client = Uber::Client.new do |config|
config.server_token = "YOUR_SERVER_TOKEN"
end
client.price_estimations(start_latitude: slat, start_longitude: slon,
end_latitude: dlat, end_longitude: dlon)
Request time estimations
client = Uber::Client.new do |config|
config.server_token = "YOUR_SERVER_TOKEN"
end
client.time_estimations(start_latitude: slat, start_longitude: slon)
Retrieve user info
client = Uber::Client.new do |config|
config.server_token = "YOUR_SERVER_TOKEN"
config.client_id = "YOUR_CLIENT_ID"
config.client_secret = "YOUR_CLIENT_SECRET"
config.bearer_token = "USER_ACCESS_TOKEN"
end
client.me
Retrieve user activities
client = Uber::Client.new do |config|
config.server_token = "YOUR_SERVER_TOKEN"
config.client_id = "YOUR_CLIENT_ID"
config.client_secret = "YOUR_CLIENT_SECRET"
config.bearer_token = "USER_ACCESS_TOKEN"
end
client.history
Request a ride
client = Uber::Client.new do |config|
config.client_id = "YOUR_CLIENT_ID"
config.client_secret = "YOUR_CLIENT_SECRET"
config.bearer_token = "USER_ACCESS_TOKEN"
end
client.trip_request(product_id: product_id, start_latitude: start_lat, start_longitude: start_lng, end_latitude: end_lat, end_longitude: end_lng)
Simulate a ride request with surge
client = Uber::Client.new do |config|
config.client_id = "YOUR_CLIENT_ID"
config.client_secret = "YOUR_CLIENT_SECRET"
config.bearer_token = "USER_ACCESS_TOKEN"
end
# Only available in sandbox environment
# Use this to simulate a surge
# More info here https://developer.uber.com/docs/sandbox#section-product-types
client.apply_surge 'product_id', 2.0
client.trip_request(product_id: product_id, start_latitude: start_lat, start_longitude: start_lng, end_latitude: end_lat, end_longitude: end_lng, surge_confirmation_id: surge_id)
Simulate a ride request with no drivers available
client = Uber::Client.new do |config|
config.client_id = "YOUR_CLIENT_ID"
config.client_secret = "YOUR_CLIENT_SECRET"
config.bearer_token = "USER_ACCESS_TOKEN"
end
# Only available in sandbox environment
# Use this to simulate a request with no drivers available
# More info here https://developer.uber.com/docs/sandbox#section-product-types
client.apply_availability 'product_id', false
client.trip_request(product_id: product_id, start_latitude: start_lat, start_longitude: start_lng, end_latitude: end_lat, end_longitude: end_lng)
Update the status of a ride request
client = Uber::Client.new do |config|
config.client_id = "YOUR_CLIENT_ID"
config.client_secret = "YOUR_CLIENT_SECRET"
config.bearer_token = "USER_ACCESS_TOKEN"
end
# Only available in sandbox environment
# Use this to simulate the status change of a ride request
# More info here https://developer.uber.com/docs/sandbox#section-request
client.trip_update('request_id', 'accepted')
Retrieve a ride request details
client = Uber::Client.new do |config|
config.client_id = "YOUR_CLIENT_ID"
config.client_secret = "YOUR_CLIENT_SECRET"
config.bearer_token = "USER_ACCESS_TOKEN"
end
client.trip_details 'request_id'
Cancel a ride request
client = Uber::Client.new do |config|
config.client_id = "YOUR_CLIENT_ID"
config.client_secret = "YOUR_CLIENT_SECRET"
config.bearer_token = "USER_ACCESS_TOKEN"
end
client.trip_cancel 'request_id'
Generate ride receipt
Generates the receipt for a completed request.
client = Uber::Client.new do |config|
config.client_id = "YOUR_CLIENT_ID"
config.client_secret = "YOUR_CLIENT_SECRET"
config.bearer_token = "USER_ACCESS_TOKEN"
end
client.trip_receipt 'request_id' #=> Generates Uber::Receipt
# or
receipt = client.ride_receipt 'request_id'
receipt.total_charged #=> "$5.92"
Retrieve addresses
Retrieves address information of home or work.
client = Uber::Client.new do |config|
config.client_id = "YOUR_CLIENT_ID"
config.client_secret = "YOUR_CLIENT_SECRET"
config.bearer_token = "USER_ACCESS_TOKEN"
end
place = client.place 'home'
place.address #=> returns fully qualified address of location
Update addresses
Updates address information of home or work.
client = Uber::Client.new do |config|
config.client_id = "YOUR_CLIENT_ID"
config.client_secret = "YOUR_CLIENT_SECRET"
config.bearer_token = "USER_ACCESS_TOKEN"
end
place = client.place_update 'home', 'my address'
place.address #=> retuns fully qualified address of location
Retrieve a reminder
This allows you to get the status of an existing ride reminder.
Note: It only supports server_token.
client = Uber::Client.new do |config|
config.client_id = "YOUR_CLIENT_ID"
config.client_secret = "YOUR_CLIENT_SECRET"
client.server_token = "YOUR_SERVER_TOKEN"
end
client.reminder 'reminder_id'
#=> Uber::Reminder
Add a reminder
This allows developers to set a reminder for a future trip. You can pass object of Time
or unixtime in reminder_time
and event.time
.
reminder = client.add_reminder({reminder_time: Time.local(2016, 9, 8, 23, 23, 23),
phone_number: '+91-9999999999',
trip_branding: {link_text: 'My first reminder'},
event: {time: Time.now + 234234},
reminder_id: 'rem1' })
reminder.event.time
#=> 2016-09-11 11:02:06 UTC
reminder.reminder_time
#=> 2016-09-08 17:53:23 UTC
reminder.reminder_status
#=> "pending"
Update a reminder
This allows you to update an existing reminder.
reminder = client.add_reminder('rem1', {reminder_time: Time.local(2016, 9, 10, 23, 23, 23),
phone_number: '+91-9999999999',
trip_branding: {link_text: 'My edited reminder'},
event: {time: Time.now + 234234},
reminder_id: 'rem1' })
reminder.trip_branding.link_text
#=> "My edited reminder"
Delete a reminder
This allows you to remove any reminder in the pending state from being sent.
reminder.delete_reminder 'rem1'
#=> Uber::Reminder
Drivers API
Drivers API lets you build services and solutions that make the driver experience more productive and rewarding. With the driver's permission, you can use trip data, earnings, ratings and more to shape the future of the on-demand economy.
We provide this under namespace of client.partners
Driver details
It returns the profile of the authenticated driver.
OAuth 2.0 bearer token with a partner.accounts scope.
driver = client.partners.me
driver.first_name #=> 'John'
driver.last_name #=> 'Driver'
driver.promo_code #=> 'join_john_on_uber'
More details can be found here.
Earnings details
It returns an array of payments for the given driver. Payments are available at this endpoint in near real-time.
OAuth 2.0 bearer token with scope partner.payments
earnings = client.partners.payments
# client.partners.earnings is also supported
earnings.count #=> 5
earnings.payments #=> Array of Uber::Partner::Payment
payment = earnings.payments.first
payment.category #=> 'fare'
payment.cash_collected #=> 7.63
payment.currency_code #=> 'USD'
payment.event_time #=> 2016-11-12 10:29:28 UTC
# Using params:
earnings = client.partners.payments(:offset => 1, :limit => 2)
More details can be found here.
Trips details
It returns an array of trips for the authenticated driver.
OAuth 2.0 bearer token with the partner.trips.
trips = client.partners.trips
trips.count #=> 1
trips.offset #=> 0
trips.trips #=> Array of Uber::Partner::Trip
trip = trips.trips.first
trip.distance #=> 0
trip.status #=> 'driver_canceled'
trip.duration #=> 0
More details can be found here.
Deliveries API
Deliveries API lets you and your customer track the exact location of your delivery from any device.
OAuth 2.0 bearer token with the delivery scope
We provide this under namespace of client.deliveries
. Besides OAuth, you can get bearer token with delivery
scope via client_credentials workflow, follow this guide.
client = Uber::Client.new do |config|
config.server_token = "YOUR_SERVER_TOKEN"
config.client_id = "YOUR_CLIENT_ID"
config.client_secret = "YOUR_CLIENT_SECRET"
config.bearer_token = "USER_ACCESS_TOKEN"
end
List deliveries
It retrieves a list of all deliveries
deliveries = client.deliveries.list #=> Array of Uber::Delivery::Delivery
More details can be found here
Create a delivery
It allows a delivery to be requested given the delivery information and quote ID
delivery = client.deliveries.add_delivery({quote_id: 'KEBjNGUxNjhlZmNmMD...', .. })
delivery.quote_id #=> 'KEBjNGUxNjhlZmNmMD...'
More details and parameters can be found here
Create delivery quote
Generate a delivery quote, given a pickup and dropoff location. On-demand and scheduled delivery quotes will be returned.
quotes = client.deliveries.add_quote({ "pickup" => { "location" => { ... } },
"dropoff" => { "location" => { ... } } )
# returns array of Uber::Delivery::Quote containing all On-demand and scheduled delivery quotes
quotes.size #=> 4
quotes[0].fee #=> 5.42
More details can be found here
Retrieve a delivery information
Get the status of an ongoing delivery
delivery = client.deliveries.retrieve('8b58bc58-7352-4278-b569-b5d24d8e3f76') #=> Uber::Delivery::Delivery
delivery.currency_code #=> "USD"
delivery.delivery_id #=> '8b58bc58-7352-4278-b569-b5d24d8e3f76'
delivery.fee #=> 5.0
More details can be found here
Retrieve receipt for a delivery
receipt = client.deliveries.receipt('8b58bc58-7352-4278-b569-b5d24d8e3f76') #=> Uber::Delivery::Receipt
receipt.delivery_id #=> '8b58bc58-7352-4278-b569-b5d24d8e3f76'
receipt.total_fee #=> 6.17
receipt.charges #=> hash of charges
More details can be found here
Get delivery ratings
Retrieve the available ratings for a delivery.
ratings = client.deliveries.ratings('8b58bc58-7352-4278-b569-b5d24d8e3f76')
# Array of Uber::Delivery::Rating
ratings.size #=> 2
ratings[0].waypoint #=> 'pickup'
More details can be found here
Submit a rating
Submit a rating for a delivery.
status = client.deliveries.add_rating('8b58bc58-7352-4278-b569-b5d24d8e3f76',
{"waypoint"=>"dropoff",
"rating_type"=>"binary",
"rating_value"=>0,
"tags"=>["courier_not_on_time", "delivery_in_good_condition"],
"comments"=>"Courier was not professionally dressed."})
# Returns the status code, with no content
status #=> 204
More details can be found here
Get rating tags
Retrieve the available rating tags for a delivery
tags = client.deliveries.rating_tags('8b58bc58-7352-4278-b569-b5d24d8e3f76')
# Array of Uber::Deliery::RatingTag
tags.size #=> 2
tags[0].waypoint #=> 'pickup'
tags.tags #=> Array of rating tags for delivery
More details can be found here
Cancel a delivery
Cancel an existing delivery.
status = client.deliveries.cancel('8b58bc58-7352-4278-b569-b5d24d8e3f76')
status #=> 204
More details can be found here
Get service regions
Returns all regions where UberRUSH is available.
regions = client.deliveries.regions
# Array of Uber::Delivery::Region
regions[0].city #=> 'San Francisco'
More details can be found here
Contributors
Contributing
- Fork it ( http://github.com/sishen/uber-ruby/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 new Pull Request