From d7a68ec3ec379212504e24384e6406429fd6bf12 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=A1s=20Gald=C3=A1mez?= Date: Tue, 18 Feb 2025 15:34:13 -0300 Subject: [PATCH 1/3] Get delivery --- Gemfile | 4 +- Gemfile.lock | 20 +- lib/ruber.rb | 11 + lib/ruber/authenticator.rb | 2 +- lib/ruber/client.rb | 27 -- lib/ruber/objects/delivery.rb | 6 + lib/ruber/request.rb | 70 +++++ lib/ruber/resource.rb | 56 ---- lib/ruber/resources/delivery_resource.rb | 13 + ruber.gemspec | 2 +- test/fixtures/delivery.json | 251 ++++++++++++++++++ test/ruber/authenticator_test.rb | 13 - .../ruber/resources/delivery_resource_test.rb | 26 ++ test/support/helpers.rb | 13 + test/test_helper.rb | 7 + 15 files changed, 421 insertions(+), 100 deletions(-) delete mode 100644 lib/ruber/client.rb create mode 100644 lib/ruber/objects/delivery.rb create mode 100644 lib/ruber/request.rb delete mode 100644 lib/ruber/resource.rb create mode 100644 lib/ruber/resources/delivery_resource.rb create mode 100644 test/fixtures/delivery.json create mode 100644 test/ruber/resources/delivery_resource_test.rb create mode 100644 test/support/helpers.rb diff --git a/Gemfile b/Gemfile index 7688bdd..cf168df 100644 --- a/Gemfile +++ b/Gemfile @@ -7,7 +7,7 @@ gemspec gem "rake", "~> 13.0" -gem "minitest", "~> 5.16" +gem "pry-byebug", "~> 3.9" gem "rubocop", "~> 1.21" @@ -16,5 +16,7 @@ group :development do end group :test do + gem "minitest", "~> 5.16" + gem "minitest-reporters", "~> 1.7" gem "webmock" end diff --git a/Gemfile.lock b/Gemfile.lock index fe2df17..c3a0c38 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -2,7 +2,7 @@ PATH remote: . specs: ruber (0.1.0) - faraday + faraday (>= 1.0, < 3.0) faraday_middleware GEM @@ -10,8 +10,12 @@ GEM specs: addressable (2.8.7) public_suffix (>= 2.0.2, < 7.0) + ansi (1.5.0) ast (2.4.2) bigdecimal (3.1.9) + builder (3.3.0) + byebug (11.1.3) + coderay (1.1.3) crack (1.0.0) bigdecimal rexml @@ -44,12 +48,24 @@ GEM hashdiff (1.1.2) json (2.9.1) language_server-protocol (3.17.0.4) + method_source (1.1.0) minitest (5.25.4) + minitest-reporters (1.7.1) + ansi + builder + minitest (>= 5.0) + ruby-progressbar multipart-post (2.4.1) parallel (1.26.3) parser (3.3.7.0) ast (~> 2.4.1) racc + pry (0.14.2) + coderay (~> 1.1) + method_source (~> 1.0) + pry-byebug (3.10.1) + byebug (~> 11.0) + pry (>= 0.13, < 0.15) public_suffix (6.0.1) racc (1.8.1) rainbow (3.1.1) @@ -85,6 +101,8 @@ PLATFORMS DEPENDENCIES dotenv minitest (~> 5.16) + minitest-reporters (~> 1.7) + pry-byebug (~> 3.9) rake (~> 13.0) ruber! rubocop (~> 1.21) diff --git a/lib/ruber.rb b/lib/ruber.rb index 6f76433..1cec0af 100644 --- a/lib/ruber.rb +++ b/lib/ruber.rb @@ -4,6 +4,8 @@ require "forwardable" require "ruber/configuration" require "ruber/authenticator" +require "ruber/request" +require "ruber/resources/delivery_resource" # a Ruby wrapper for Uber API module Ruber @@ -12,6 +14,10 @@ module Ruber autoload :Authenticator, "ruber/authenticator" autoload :Object, "ruber/object" + autoload :DeliveryResource, "ruber/resources/delivery_resource" + + autoload :Delivery, "ruber/objects/delivery" + DEFAULT_API_BASE = "https://api.uber.com/v1" class << self @@ -22,4 +28,9 @@ class << self :customer_id=, :client_id=, :client_secret=, :cache, :cache= ) end + + Ruber.customer_id = "6edc706a-81ea-5cf1-b4bc-64442190779d" + Ruber.client_id = "OYLrhSvGggX0Se4Vv9t6vfnbpF6vobn8" + Ruber.client_secret = "91XrGb1HjOMEJSIht225km3Q_xJlucaKsYySc5_o" + Ruber.configuration.file_cache_path = "file_cache.yaml" end diff --git a/lib/ruber/authenticator.rb b/lib/ruber/authenticator.rb index ce93838..9942995 100644 --- a/lib/ruber/authenticator.rb +++ b/lib/ruber/authenticator.rb @@ -11,7 +11,7 @@ class Authenticator class << self def access_token - @access_token = cached_token || fetch_new_token + @access_token = cached_token&.fetch(:token) || fetch_new_token @access_token = refresh_access_token if token_expired? diff --git a/lib/ruber/client.rb b/lib/ruber/client.rb deleted file mode 100644 index 734ea76..0000000 --- a/lib/ruber/client.rb +++ /dev/null @@ -1,27 +0,0 @@ -# frozen_string_literal: true - -require "faraday" -require "faraday_middleware" - -module Ruber - # The client that establish connection with the Uber API - class Client - BASE_URL = "https://api.uber.com/v1.2" - - attr_reader :client_secret, :adapter - - def initialize(client_secret:, adapter: Faraday.default_adapter) - @client_secret = client_secret - @adapter = adapter - end - - def connection - @connection ||= Faraday.new do |conn| - conn.url_prefix = BASE_URL - conn.request :json - conn.response :json, content_type: "application/json" - conn.adapter adapter - end - end - end -end diff --git a/lib/ruber/objects/delivery.rb b/lib/ruber/objects/delivery.rb new file mode 100644 index 0000000..a265c3c --- /dev/null +++ b/lib/ruber/objects/delivery.rb @@ -0,0 +1,6 @@ +# frozen_string_literal: true + +module Ruber + class Delivery < Object + end +end diff --git a/lib/ruber/request.rb b/lib/ruber/request.rb new file mode 100644 index 0000000..040f225 --- /dev/null +++ b/lib/ruber/request.rb @@ -0,0 +1,70 @@ +# frozen_string_literal: true + +require "faraday" +require "faraday_middleware" + +module Ruber + class Request + BASE_URL = "https://api.uber.com/v1" + + def initialize(url) + @url = url.gsub(":customer_id", Ruber.customer_id) + end + + def get + require "pry-byebug" + # binding.pry + handle_response connection.get(@url) + end + + def post(body:, headers: {}) + handle_response connection.post(@url, body, headers) + end + + def patch(body:, headers: {}) + handle_response connection.patch(@url, body, headers) + end + + def put(body:, headers: {}) + handle_response connection.put(@url, body, headers) + end + + def delete(params: {}, headers: {}) + handle_response connection.delete(@url, params, headers) + end + + private + + def connection + @connection ||= Faraday.new do |conn| + conn.url_prefix = BASE_URL + conn.request :authorization, :Bearer, Ruber::Authenticator.access_token + conn.request :json + conn.response :json, content_type: "application/json", parser_options: { symbolize_names: true } + conn.adapter Faraday.default_adapter + end + end + + def handle_response(response) + case response.status + when 400 + raise Error, "Your request was malformed. #{response.body["error"]}" + when 401 + raise Error, "You did not supply valid authentication credentials. #{response.body["error"]}" + when 403 + raise Error, "You are not allowed to perform that action. #{response.body["error"]}" + when 404 + raise Error, "No results were found for your request. #{response.body["error"]}" + when 429 + raise Error, "Your request exceeded the API rate limit. #{response.body["error"]}" + when 500 + raise Error, "We were unable to perform the request due to server-side problems. #{response.body["error"]}" + when 503 + raise Error, + "You have been rate limited for sending more than 20 requests per second. #{response.body["error"]}" + end + + response + end + end +end diff --git a/lib/ruber/resource.rb b/lib/ruber/resource.rb deleted file mode 100644 index 997b27e..0000000 --- a/lib/ruber/resource.rb +++ /dev/null @@ -1,56 +0,0 @@ -# frozen_string_literal: true - -module Ruber - # Provides methods to handle all type of CRUD requests - class Resource - attr_reader :client - - def initialize(client) - @client = client - end - - private - - def get_request(url, params: {}, headers: {}) - handle_response client.connection.get(url, params, headers) - end - - def post_request(url, body:, headers: {}) - handle_response client.connection.post(url, body, headers) - end - - def patch_request(url, body:, headers: {}) - handle_response client.connection.patch(url, body, headers) - end - - def put_request(url, body:, headers: {}) - handle_response client.connection.put(url, body, headers) - end - - def delete_request(url, params: {}, headers: {}) - handle_response client.connection.delete(url, params, headers) - end - - def handle_response(response) - case response.status - when 400 - raise Error, "Your request was malformed. #{response.body["error"]}" - when 401 - raise Error, "You did not supply valid authentication credentials. #{response.body["error"]}" - when 403 - raise Error, "You are not allowed to perform that action. #{response.body["error"]}" - when 404 - raise Error, "No results were found for your request. #{response.body["error"]}" - when 429 - raise Error, "Your request exceeded the API rate limit. #{response.body["error"]}" - when 500 - raise Error, "We were unable to perform the request due to server-side problems. #{response.body["error"]}" - when 503 - raise Error, - "You have been rate limited for sending more than 20 requests per second. #{response.body["error"]}" - end - - response - end - end -end diff --git a/lib/ruber/resources/delivery_resource.rb b/lib/ruber/resources/delivery_resource.rb new file mode 100644 index 0000000..ad7a014 --- /dev/null +++ b/lib/ruber/resources/delivery_resource.rb @@ -0,0 +1,13 @@ +# frozen_string_literal: true + +module Ruber + class DeliveryResource + class << self + def find(id) + response = Request.new("customers/:customer_id/deliveries/#{id}").get + + Delivery.new response.body + end + end + end +end diff --git a/ruber.gemspec b/ruber.gemspec index 6633a4e..5bd8223 100644 --- a/ruber.gemspec +++ b/ruber.gemspec @@ -31,6 +31,6 @@ Gem::Specification.new do |spec| spec.executables = spec.files.grep(%r{\Aexe/}) { |f| File.basename(f) } spec.require_paths = ["lib"] - spec.add_dependency "faraday" + spec.add_dependency "faraday", ">= 1.0", "< 3.0" spec.add_dependency "faraday_middleware" end diff --git a/test/fixtures/delivery.json b/test/fixtures/delivery.json new file mode 100644 index 0000000..324592e --- /dev/null +++ b/test/fixtures/delivery.json @@ -0,0 +1,251 @@ +{ + "id": "del_some_id", + "quote_id": "quote_id", + "complete": false, + "courier": null, + "courier_imminent": true, + "created": "2023-05-01T22:15:13.646Z", + "currency": "usd", + "deliverable_action": "deliverable_action_meet_at_door", + "dropoff": { + "name": "Joan P.", + "phone_number": "+16283337630", + "address": "2200 Market St, San Francisco, CA 94114, US", + "detailed_address": { + "street_address_1": "2200 Market St", + "street_address_2": "", + "city": "San Francisco", + "state": "CA", + "zip_code": "94114", + "country": "US" + }, + "notes": "", + "seller_notes": "", + "courier_notes": "", + "location": { + "lat": 37.765987, + "lng": -122.43153 + }, + "verification_requirements": { + "signature": true, + "signature_requirement": { + "enabled": true, + "collect_signer_name": true, + "collect_signer_relationship": true + }, + "barcodes": [ + { + "value": "string", + "type": "CODE39" + } + ], + "pincode": { + "enabled": true, + "value": "1234" + }, + "identification": { + "min_age": 21, + "no_sobriety_check": true + }, + "picture": true + }, + "status": "completed", + "status_timestamp": "2023-05-02T02:30:07.560Z", + "external_store_id": "my_store_123" + }, + "dropoff_deadline": "2023-05-01T23:01:37.000Z", + "dropoff_eta": "2023-05-01T22:30:00.077Z", + "dropoff_identifier": "", + "dropoff_ready": "2023-05-01T22:15:13.000Z", + "external_id": "EI000001", + "fee": 1099, + "kind": "delivery", + "live_mode": true, + "manifest": { + "reference": "EI000001", + "description": "1 x Package 1\n", + "total_value": 1099 + }, + "manifest_items": { + "name": "Bow tie", + "quantity": 1, + "size": "small", + "dimensions": { + "length": 20, + "height": 20, + "depth": 20 + }, + "price": 100, + "weight": 300, + "vat_percentage": 1250000 + }, + "pickup": { + "name": "Joan P.", + "phone_number": "+16283337630", + "address": "2200 Market St, San Francisco, CA 94114, US", + "detailed_address": { + "street_address_1": "2200 Market St", + "street_address_2": "", + "city": "San Francisco", + "state": "CA", + "zip_code": "94114", + "country": "US" + }, + "notes": "", + "seller_notes": "", + "courier_notes": "", + "location": { + "lat": 37.765987, + "lng": -122.43153 + }, + "verification": { + "signature": { + "image_url": "https://tb-static.uber.com/prod/file-upload/uploads/courier-task-platform/82a0d88e-100d-40d6-a0d0-ea9c4a2e55bb", + "name": "Joan", + "signer_relationship": "SELF" + }, + "barcodes": [ + { + "type": "CODE128", + "value": "1234567890", + "scan_result": { + "outcome": "SUCCESS", + "timestamp": "2023-05-02T04:34:04.957Z" + } + } + ], + "picture": { + "image_url": "https://tb-static.uber.com/prod/file-upload/uploads/courier-task-platform/82a0d88e-100d-40d6-a0d0-ea9c4a2e55bb" + }, + "identification": { + "min_age_verified": false + }, + "pin_code": { + "entered": "3902" + }, + "completion_location": { + "lat": 37.765987, + "lng": -122.43153 + } + }, + "verification_requirements": { + "signature": true, + "signature_requirement": { + "enabled": true, + "collect_signer_name": true, + "collect_signer_relationship": true + }, + "barcodes": [ + { + "value": "string", + "type": "CODE39" + } + ], + "pincode": { + "enabled": true, + "value": "1234" + }, + "identification": { + "min_age": 21, + "no_sobriety_check": true + }, + "picture": true + }, + "status": "completed", + "status_timestamp": "2023-05-02T02:30:07.560Z", + "external_store_id": "my_store_123" + }, + "pickup_deadline": "2023-05-01T22:35:13.000Z", + "pickup_eta": "2023-05-01T22:16:21.749Z", + "pickup_ready": "2023-05-01T22:20:13.000Z", + "related_deliveries": [ + { + "id": "ret_BiymjKtjTwKpoS2kSIuxlv", + "relationship": "return" + } + ], + "status": "pending", + "tip": 500, + "tracking_url": "https://delivery.uber.com/orders/62105936-e413-40d5-aecd-4c335c3cd3c2", + "undeliverable_action": "", + "undeliverable_reason": "", + "updated": "2023-05-01T22:16:20.023Z", + "uuid": "62105936E41340D5AECD4C335C3CD3C2", + "return": { + "name": "Joan P.", + "phone_number": "+16283337630", + "address": "2200 Market St, San Francisco, CA 94114, US", + "detailed_address": { + "street_address_1": "2200 Market St", + "street_address_2": "", + "city": "San Francisco", + "state": "CA", + "zip_code": "94114", + "country": "US" + }, + "notes": "", + "seller_notes": "", + "courier_notes": "", + "location": { + "lat": 37.765987, + "lng": -122.43153 + }, + "verification": { + "signature": { + "image_url": "https://tb-static.uber.com/prod/file-upload/uploads/courier-task-platform/82a0d88e-100d-40d6-a0d0-ea9c4a2e55bb", + "name": "Joan", + "signer_relationship": "SELF" + }, + "barcodes": [ + { + "type": "CODE128", + "value": "1234567890", + "scan_result": { + "outcome": "SUCCESS", + "timestamp": "2023-05-02T04:34:04.957Z" + } + } + ], + "picture": { + "image_url": "https://tb-static.uber.com/prod/file-upload/uploads/courier-task-platform/82a0d88e-100d-40d6-a0d0-ea9c4a2e55bb" + }, + "identification": { + "min_age_verified": false + }, + "pin_code": { + "entered": "3902" + }, + "completion_location": { + "lat": 37.765987, + "lng": -122.43153 + } + }, + "verification_requirements": { + "signature": true, + "signature_requirement": { + "enabled": true, + "collect_signer_name": true, + "collect_signer_relationship": true + }, + "barcodes": [ + { + "value": "string", + "type": "CODE39" + } + ], + "pincode": { + "enabled": true, + "value": "1234" + }, + "identification": { + "min_age": 21, + "no_sobriety_check": true + }, + "picture": true + }, + "status": "completed", + "status_timestamp": "2023-05-02T02:30:07.560Z", + "external_store_id": "my_store_123" + }, + "batch_id": "bat_0dtbO9MhUAW6yezXDqQUqQ" +} diff --git a/test/ruber/authenticator_test.rb b/test/ruber/authenticator_test.rb index a4730ef..e36d6b8 100644 --- a/test/ruber/authenticator_test.rb +++ b/test/ruber/authenticator_test.rb @@ -44,18 +44,5 @@ def test_refresh_access_token_if_expired assert_equal "refreshed_token", token assert_equal "refreshed_token", cached_token[:token] end - - private - - def stub_token_request(access_token:, expires_in:) - stub_request(:post, Authenticator::OAUTH_URL) - .to_return( - status: 200, - body: { - access_token: access_token, - expires_in: expires_in - }.to_json - ) - end end end diff --git a/test/ruber/resources/delivery_resource_test.rb b/test/ruber/resources/delivery_resource_test.rb new file mode 100644 index 0000000..7f307ef --- /dev/null +++ b/test/ruber/resources/delivery_resource_test.rb @@ -0,0 +1,26 @@ +# frozen_string_literal: true + +require File.expand_path("../../test_helper", __dir__) + +class DelvieryResourceTest < Minitest::Test + def test_find + stub_delivery_request + delivery = Ruber::DeliveryResource.find('del_some_id') + + assert_equal Ruber::Delivery, delivery.class + assert_equal "quote_id", delivery.quote_id + end + + private + + def stub_delivery_request + stub_token_request + stub_request(:get, %r{.*customers/#{Ruber.customer_id}/deliveries.*}) + .with(headers: { "Authorization" => "Bearer #{Ruber::Authenticator.access_token}" }) + .to_return( + headers: { "Content-Type" => "application/json" }, + status: 200, + body: File.new("test/fixtures/delivery.json").read + ) + end +end diff --git a/test/support/helpers.rb b/test/support/helpers.rb new file mode 100644 index 0000000..46cdd30 --- /dev/null +++ b/test/support/helpers.rb @@ -0,0 +1,13 @@ +module TestHelpers + def stub_token_request(access_token: "foo", expires_in: 3600) + stub_request(:post, Ruber::Authenticator::OAUTH_URL) + .to_return( + status: 200, + headers: { "Content-Type" => "application/json" }, + body: { + access_token:, + expires_in: + }.to_json + ) + end +end diff --git a/test/test_helper.rb b/test/test_helper.rb index f4149ef..51e9be0 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -4,13 +4,20 @@ require "minitest/autorun" require "webmock/minitest" +require "support/helpers" +require "minitest/reporters" +Minitest::Reporters.use! require "ruber" class Minitest::Test # rubocop:disable Style/ClassAndModuleChildren + include TestHelpers + def before_setup super Ruber.configuration.file_cache_path = "file_cache_test.yaml" + Ruber.configuration.customer_id = "a_customer_id" + Ruber.configuration.client_secret = "a_customer_secret" end end From 07f4edf969809f4d25f4581a6f4352c26fecec1b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=A1s=20Gald=C3=A1mez?= Date: Tue, 18 Feb 2025 15:39:29 -0300 Subject: [PATCH 2/3] Rubocop offenses --- .rubocop.yml | 2 ++ lib/ruber.rb | 5 ----- lib/ruber/request.rb | 2 -- test/ruber/resources/delivery_resource_test.rb | 2 +- test/support/helpers.rb | 6 ++++-- test/test_helper.rb | 2 +- 6 files changed, 8 insertions(+), 11 deletions(-) diff --git a/.rubocop.yml b/.rubocop.yml index 14ea8ca..90a1a7d 100644 --- a/.rubocop.yml +++ b/.rubocop.yml @@ -1,4 +1,6 @@ AllCops: + SuggestExtensions: false + NewCops: disable TargetRubyVersion: 3.0 Style/StringLiterals: diff --git a/lib/ruber.rb b/lib/ruber.rb index 1cec0af..047b6dd 100644 --- a/lib/ruber.rb +++ b/lib/ruber.rb @@ -28,9 +28,4 @@ class << self :customer_id=, :client_id=, :client_secret=, :cache, :cache= ) end - - Ruber.customer_id = "6edc706a-81ea-5cf1-b4bc-64442190779d" - Ruber.client_id = "OYLrhSvGggX0Se4Vv9t6vfnbpF6vobn8" - Ruber.client_secret = "91XrGb1HjOMEJSIht225km3Q_xJlucaKsYySc5_o" - Ruber.configuration.file_cache_path = "file_cache.yaml" end diff --git a/lib/ruber/request.rb b/lib/ruber/request.rb index 040f225..9edeb1e 100644 --- a/lib/ruber/request.rb +++ b/lib/ruber/request.rb @@ -12,8 +12,6 @@ def initialize(url) end def get - require "pry-byebug" - # binding.pry handle_response connection.get(@url) end diff --git a/test/ruber/resources/delivery_resource_test.rb b/test/ruber/resources/delivery_resource_test.rb index 7f307ef..0e76433 100644 --- a/test/ruber/resources/delivery_resource_test.rb +++ b/test/ruber/resources/delivery_resource_test.rb @@ -5,7 +5,7 @@ class DelvieryResourceTest < Minitest::Test def test_find stub_delivery_request - delivery = Ruber::DeliveryResource.find('del_some_id') + delivery = Ruber::DeliveryResource.find("del_some_id") assert_equal Ruber::Delivery, delivery.class assert_equal "quote_id", delivery.quote_id diff --git a/test/support/helpers.rb b/test/support/helpers.rb index 46cdd30..40a6cc0 100644 --- a/test/support/helpers.rb +++ b/test/support/helpers.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module TestHelpers def stub_token_request(access_token: "foo", expires_in: 3600) stub_request(:post, Ruber::Authenticator::OAUTH_URL) @@ -5,8 +7,8 @@ def stub_token_request(access_token: "foo", expires_in: 3600) status: 200, headers: { "Content-Type" => "application/json" }, body: { - access_token:, - expires_in: + access_token: access_token, + expires_in: expires_in }.to_json ) end diff --git a/test/test_helper.rb b/test/test_helper.rb index 51e9be0..f8d30a1 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -18,6 +18,6 @@ def before_setup Ruber.configuration.file_cache_path = "file_cache_test.yaml" Ruber.configuration.customer_id = "a_customer_id" - Ruber.configuration.client_secret = "a_customer_secret" + Ruber.configuration.client_secret = "a_client_secret" end end From 87ff7b043ba95dc2a1a86d3c4a82ba2309af0661 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=A1s=20Gald=C3=A1mez?= Date: Wed, 19 Feb 2025 07:56:06 -0300 Subject: [PATCH 3/3] Changes based on PR comments --- lib/ruber/request.rb | 2 +- lib/ruber/resources/delivery_resource.rb | 2 +- test/ruber/resources/delivery_resource_test.rb | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/ruber/request.rb b/lib/ruber/request.rb index 9edeb1e..6cd658f 100644 --- a/lib/ruber/request.rb +++ b/lib/ruber/request.rb @@ -8,7 +8,7 @@ class Request BASE_URL = "https://api.uber.com/v1" def initialize(url) - @url = url.gsub(":customer_id", Ruber.customer_id) + @url = url end def get diff --git a/lib/ruber/resources/delivery_resource.rb b/lib/ruber/resources/delivery_resource.rb index ad7a014..7a5c563 100644 --- a/lib/ruber/resources/delivery_resource.rb +++ b/lib/ruber/resources/delivery_resource.rb @@ -4,7 +4,7 @@ module Ruber class DeliveryResource class << self def find(id) - response = Request.new("customers/:customer_id/deliveries/#{id}").get + response = Request.new("customers/#{Ruber.customer_id}/deliveries/#{id}").get Delivery.new response.body end diff --git a/test/ruber/resources/delivery_resource_test.rb b/test/ruber/resources/delivery_resource_test.rb index 0e76433..014db48 100644 --- a/test/ruber/resources/delivery_resource_test.rb +++ b/test/ruber/resources/delivery_resource_test.rb @@ -7,7 +7,7 @@ def test_find stub_delivery_request delivery = Ruber::DeliveryResource.find("del_some_id") - assert_equal Ruber::Delivery, delivery.class + assert_instance_of Ruber::Delivery, delivery assert_equal "quote_id", delivery.quote_id end