Ruby
Request
Now that the Ruby application has an authorization code
, it can exchange it for an access_token
required to make a request to a vehicle.
1. Obtain an access token
In the previous section, we retrieved an authorization code
. The Ruby application must exchange the code
for an access_token
to make a request.
The access_token represents your application’s access to a vehicle on behalf of the vehicle owner.
After receiving the access_token
, the user can be redirected to the /vehicle
route which we will implement in the next step.
# ./app.rb
# global variable to store the token
@@token = ''
get "/exchange" do
code = params[:code]
# TODO: Request Step 1: Obtain an access token
# In a production app you'll want to store this in some kind of persistent storage
@@token = @@client.exchange_code(code)[:access_token]
redirect '/vehicle'
end
2. Get vehicle attributes
Once the application has the access_token
, it can send requests to a vehicle using Smartcar’s API.
Once we have the vehicle_attributes
object, we can build and return attributes hash which is displayed on the UI.
# ./app.rb
get "/vehicle" do
code = params[:code]
# TODO: Request Step 2a: Get vehicle ids
vehicles = Smartcar::Vehicle.get_vehicle(token: @@token)
vehicle_ids = vehicles.vehicles
# TODO: Request Step 2b: Create a vehicle
vehicle = Smartcar::Vehicle.new(token: @@token, id: vehicle_ids.first)
# TODO: Request Step 2c: Make a request to Smartcar API for the vehicle
# Get the vehicle_attributes object for vehicle
vehicle_attributes = vehicle.attributes
# Build a hash of id, make, model and year and return as json
vehicle_attributes.slice(*%I(id make model year).to_json
end
Try it out
Make sure the server is running -
bundle exec ruby app.rb
Now you can go to localhost:8000/login
to see your Sinatra app running!