easypost 4.13.0 → 5.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.github/workflows/ci.yml +22 -1
- data/.gitignore +9 -11
- data/.rubocop.yml +6 -1
- data/CHANGELOG.md +21 -0
- data/Makefile +1 -1
- data/README.md +45 -38
- data/UPGRADE_GUIDE.md +119 -0
- data/VERSION +1 -1
- data/easycop.yml +3 -3
- data/easypost.gemspec +12 -10
- data/lib/easypost/client.rb +129 -0
- data/lib/easypost/connection.rb +2 -4
- data/lib/easypost/constants.rb +15 -0
- data/lib/easypost/errors/api/api_error.rb +106 -0
- data/lib/easypost/errors/api/connection_error.rb +6 -0
- data/lib/easypost/errors/api/external_api_error.rb +18 -0
- data/lib/easypost/errors/api/forbidden_error.rb +6 -0
- data/lib/easypost/errors/api/gateway_timeout_error.rb +6 -0
- data/lib/easypost/errors/api/internal_server_error.rb +6 -0
- data/lib/easypost/errors/api/invalid_request_error.rb +6 -0
- data/lib/easypost/errors/api/method_not_allowed_error.rb +6 -0
- data/lib/easypost/errors/api/not_found_error.rb +6 -0
- data/lib/easypost/errors/api/payment_error.rb +6 -0
- data/lib/easypost/errors/api/proxy_error.rb +6 -0
- data/lib/easypost/errors/api/rate_limit_error.rb +6 -0
- data/lib/easypost/errors/api/redirect_error.rb +6 -0
- data/lib/easypost/errors/api/retry_error.rb +6 -0
- data/lib/easypost/errors/api/service_unavailable_error.rb +6 -0
- data/lib/easypost/errors/api/ssl_error.rb +6 -0
- data/lib/easypost/errors/api/timeout_error.rb +6 -0
- data/lib/easypost/errors/api/unauthorized_error.rb +6 -0
- data/lib/easypost/errors/api/unknown_api_error.rb +6 -0
- data/lib/easypost/errors/easy_post_error.rb +7 -0
- data/lib/easypost/errors/end_of_pagination_error.rb +7 -0
- data/lib/easypost/errors/filtering_error.rb +4 -0
- data/lib/easypost/errors/invalid_object_error.rb +4 -0
- data/lib/easypost/errors/invalid_parameter_error.rb +11 -0
- data/lib/easypost/errors/missing_parameter_error.rb +9 -0
- data/lib/easypost/errors/signature_verification_error.rb +4 -0
- data/lib/easypost/errors.rb +31 -0
- data/lib/easypost/http_client.rb +62 -0
- data/lib/easypost/internal_utilities.rb +66 -0
- data/lib/easypost/models/address.rb +5 -0
- data/lib/easypost/models/api_key.rb +5 -0
- data/lib/easypost/models/base.rb +58 -0
- data/lib/easypost/models/batch.rb +5 -0
- data/lib/easypost/models/brand.rb +5 -0
- data/lib/easypost/{carbon_offset.rb → models/carbon_offset.rb} +1 -1
- data/lib/easypost/models/carrier_account.rb +5 -0
- data/lib/easypost/models/customs_info.rb +5 -0
- data/lib/easypost/models/customs_item.rb +5 -0
- data/lib/easypost/models/end_shipper.rb +5 -0
- data/lib/easypost/models/error.rb +21 -0
- data/lib/easypost/models/event.rb +5 -0
- data/lib/easypost/models/insurance.rb +6 -0
- data/lib/easypost/models/order.rb +9 -0
- data/lib/easypost/models/parcel.rb +5 -0
- data/lib/easypost/{payload.rb → models/payload.rb} +1 -1
- data/lib/easypost/models/payment_method.rb +5 -0
- data/lib/easypost/models/pickup.rb +9 -0
- data/lib/easypost/{pickup_rate.rb → models/pickup_rate.rb} +1 -1
- data/lib/easypost/{postage_label.rb → models/postage_label.rb} +1 -1
- data/lib/easypost/models/rate.rb +5 -0
- data/lib/easypost/models/referral.rb +5 -0
- data/lib/easypost/models/refund.rb +5 -0
- data/lib/easypost/models/report.rb +5 -0
- data/lib/easypost/models/scan_form.rb +6 -0
- data/lib/easypost/models/shipment.rb +10 -0
- data/lib/easypost/{tax_identifier.rb → models/tax_identifier.rb} +1 -1
- data/lib/easypost/models/tracker.rb +5 -0
- data/lib/easypost/models/user.rb +5 -0
- data/lib/easypost/models/webhook.rb +6 -0
- data/lib/easypost/models.rb +35 -0
- data/lib/easypost/services/address.rb +50 -0
- data/lib/easypost/services/api_key.rb +8 -0
- data/lib/easypost/services/base.rb +27 -0
- data/lib/easypost/services/batch.rb +53 -0
- data/lib/easypost/services/beta_rate.rb +12 -0
- data/lib/easypost/services/beta_referral_customer.rb +40 -0
- data/lib/easypost/services/billing.rb +75 -0
- data/lib/easypost/services/carrier_account.rb +44 -0
- data/lib/easypost/services/carrier_metadata.rb +22 -0
- data/lib/easypost/services/customs_info.rb +15 -0
- data/lib/easypost/services/customs_item.rb +15 -0
- data/lib/easypost/services/end_shipper.rb +31 -0
- data/lib/easypost/services/event.rb +32 -0
- data/lib/easypost/services/insurance.rb +26 -0
- data/lib/easypost/services/order.rb +30 -0
- data/lib/easypost/services/parcel.rb +16 -0
- data/lib/easypost/services/pickup.rb +40 -0
- data/lib/easypost/services/rate.rb +8 -0
- data/lib/easypost/services/referral_customer.rb +103 -0
- data/lib/easypost/services/refund.rb +26 -0
- data/lib/easypost/services/report.rb +42 -0
- data/lib/easypost/services/scan_form.rb +25 -0
- data/lib/easypost/services/shipment.rb +106 -0
- data/lib/easypost/services/tracker.rb +38 -0
- data/lib/easypost/services/user.rb +66 -0
- data/lib/easypost/services/webhook.rb +34 -0
- data/lib/easypost/services.rb +32 -0
- data/lib/easypost/util.rb +80 -187
- data/lib/easypost/utilities/constants.rb +5 -0
- data/lib/easypost/utilities/json.rb +23 -0
- data/lib/easypost/utilities/static_mapper.rb +73 -0
- data/lib/easypost/utilities/system.rb +36 -0
- data/lib/easypost.rb +12 -138
- metadata +147 -64
- data/lib/easypost/address.rb +0 -55
- data/lib/easypost/api_key.rb +0 -5
- data/lib/easypost/batch.rb +0 -52
- data/lib/easypost/beta/end_shipper.rb +0 -44
- data/lib/easypost/beta/payment_refund.rb +0 -5
- data/lib/easypost/beta/rate.rb +0 -14
- data/lib/easypost/beta/referral.rb +0 -158
- data/lib/easypost/beta.rb +0 -8
- data/lib/easypost/billing.rb +0 -72
- data/lib/easypost/brand.rb +0 -13
- data/lib/easypost/carrier_account.rb +0 -26
- data/lib/easypost/carrier_type.rb +0 -5
- data/lib/easypost/customs_info.rb +0 -9
- data/lib/easypost/customs_item.rb +0 -9
- data/lib/easypost/end_shipper.rb +0 -26
- data/lib/easypost/error.rb +0 -32
- data/lib/easypost/event.rb +0 -38
- data/lib/easypost/insurance.rb +0 -20
- data/lib/easypost/object.rb +0 -171
- data/lib/easypost/order.rb +0 -37
- data/lib/easypost/parcel.rb +0 -9
- data/lib/easypost/payment_method.rb +0 -12
- data/lib/easypost/pickup.rb +0 -47
- data/lib/easypost/rate.rb +0 -9
- data/lib/easypost/referral.rb +0 -117
- data/lib/easypost/refund.rb +0 -19
- data/lib/easypost/report.rb +0 -44
- data/lib/easypost/resource.rb +0 -124
- data/lib/easypost/scan_form.rb +0 -26
- data/lib/easypost/shipment.rb +0 -186
- data/lib/easypost/tracker.rb +0 -43
- data/lib/easypost/user.rb +0 -74
- data/lib/easypost/webhook.rb +0 -57
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# The Pickup object allows you to schedule a pickup from your carrier from your customer's residence or place of business.
|
|
4
|
+
class EasyPost::Models::Pickup < EasyPost::Models::EasyPostObject
|
|
5
|
+
# Get the lowest rate of a Pickup (can exclude by having `'!'` as the first element of your optional filter lists).
|
|
6
|
+
def lowest_rate(carriers = [], services = [])
|
|
7
|
+
EasyPost::Util.get_lowest_object_rate(self, carriers, services, 'pickup_rates')
|
|
8
|
+
end
|
|
9
|
+
end
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# A ScanForm can be created to speed up and simplify the carrier pickup process. The ScanForm is one document that can
|
|
4
|
+
# be scanned to mark all included tracking codes as "Accepted for Shipment" by the carrier.
|
|
5
|
+
class EasyPost::Models::ScanForm < EasyPost::Models::EasyPostObject
|
|
6
|
+
end
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# The workhorse of the EasyPost API, a Shipment is made up of a "to" and "from" Address, the Parcel
|
|
4
|
+
# being shipped, and any customs forms required for international deliveries.
|
|
5
|
+
class EasyPost::Models::Shipment < EasyPost::Models::EasyPostObject
|
|
6
|
+
# Get the lowest rate of a Shipment (can exclude by having `'!'` as the first element of your optional filter lists).
|
|
7
|
+
def lowest_rate(carriers = [], services = [])
|
|
8
|
+
EasyPost::Util.get_lowest_object_rate(self, carriers, services)
|
|
9
|
+
end
|
|
10
|
+
end
|
|
@@ -2,5 +2,5 @@
|
|
|
2
2
|
|
|
3
3
|
# TaxIdentifiers are identifying numbers or IDs that are used to charge a specific party when
|
|
4
4
|
# dealing with the importing or exporting of good across international borders.
|
|
5
|
-
class EasyPost::TaxIdentifier < EasyPost::
|
|
5
|
+
class EasyPost::Models::TaxIdentifier < EasyPost::Models::EasyPostObject
|
|
6
6
|
end
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# Each Webhook contains the url which EasyPost will notify whenever an object in our system updates. Several types of objects are processed
|
|
4
|
+
# asynchronously in the EasyPost system, so whenever an object updates, an Event is sent via HTTP POST to each configured webhook URL.
|
|
5
|
+
class EasyPost::Models::Webhook < EasyPost::Models::EasyPostObject
|
|
6
|
+
end
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module EasyPost::Models
|
|
4
|
+
end
|
|
5
|
+
|
|
6
|
+
require_relative 'models/base' # Must be imported first before the rest of child models
|
|
7
|
+
require_relative 'models/address'
|
|
8
|
+
require_relative 'models/api_key'
|
|
9
|
+
require_relative 'models/batch'
|
|
10
|
+
require_relative 'models/brand'
|
|
11
|
+
require_relative 'models/carbon_offset'
|
|
12
|
+
require_relative 'models/carrier_account'
|
|
13
|
+
require_relative 'models/customs_info'
|
|
14
|
+
require_relative 'models/customs_item'
|
|
15
|
+
require_relative 'models/end_shipper'
|
|
16
|
+
require_relative 'models/error'
|
|
17
|
+
require_relative 'models/event'
|
|
18
|
+
require_relative 'models/insurance'
|
|
19
|
+
require_relative 'models/order'
|
|
20
|
+
require_relative 'models/parcel'
|
|
21
|
+
require_relative 'models/payload'
|
|
22
|
+
require_relative 'models/payment_method'
|
|
23
|
+
require_relative 'models/pickup_rate'
|
|
24
|
+
require_relative 'models/pickup'
|
|
25
|
+
require_relative 'models/postage_label'
|
|
26
|
+
require_relative 'models/rate'
|
|
27
|
+
require_relative 'models/referral'
|
|
28
|
+
require_relative 'models/refund'
|
|
29
|
+
require_relative 'models/report'
|
|
30
|
+
require_relative 'models/scan_form'
|
|
31
|
+
require_relative 'models/shipment'
|
|
32
|
+
require_relative 'models/tax_identifier'
|
|
33
|
+
require_relative 'models/tracker'
|
|
34
|
+
require_relative 'models/user'
|
|
35
|
+
require_relative 'models/webhook'
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
class EasyPost::Services::Address < EasyPost::Services::Service
|
|
4
|
+
MODEL_CLASS = EasyPost::Models::Address
|
|
5
|
+
|
|
6
|
+
# Create an address.
|
|
7
|
+
def create(params = {})
|
|
8
|
+
address = params.reject { |k, _| [:verify, :verify_strict].include?(k) }
|
|
9
|
+
|
|
10
|
+
wrapped_params = { address: address }
|
|
11
|
+
|
|
12
|
+
if params[:verify]
|
|
13
|
+
wrapped_params[:verify] = params[:verify]
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
if params[:verify_strict]
|
|
17
|
+
wrapped_params[:verify_strict] = params[:verify_strict]
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
@client.make_request(:post, 'addresses', MODEL_CLASS, params)
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
# Create and verify an Address in one call.
|
|
24
|
+
def create_and_verify(params = {})
|
|
25
|
+
wrapped_params = {}
|
|
26
|
+
wrapped_params[:address] = params
|
|
27
|
+
|
|
28
|
+
@client.make_request(:post, 'addresses/create_and_verify', MODEL_CLASS, wrapped_params).address
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
# Verify an Address.
|
|
32
|
+
def verify(id)
|
|
33
|
+
@client.make_request(:get, "addresses/#{id}/verify", MODEL_CLASS).address
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
# Retrieve an Address.
|
|
37
|
+
def retrieve(id)
|
|
38
|
+
@client.make_request(:get, "addresses/#{id}", MODEL_CLASS)
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
# Retrieve all Addresses.
|
|
42
|
+
def all(filters = {})
|
|
43
|
+
@client.make_request(:get, 'addresses', MODEL_CLASS, filters)
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
# Get the next page of addresses.
|
|
47
|
+
def get_next_page(collection, page_size = nil)
|
|
48
|
+
get_next_page_helper(collection, collection.addresses, 'addresses', MODEL_CLASS, page_size)
|
|
49
|
+
end
|
|
50
|
+
end
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# The base class for all services in the library.
|
|
4
|
+
class EasyPost::Services::Service
|
|
5
|
+
def initialize(client)
|
|
6
|
+
@client = client
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
protected
|
|
10
|
+
|
|
11
|
+
# Get next page of an object collection
|
|
12
|
+
def get_next_page_helper(collection, current_page_items, endpoint, cls, page_size = nil)
|
|
13
|
+
has_more = collection.has_more || false
|
|
14
|
+
unless !has_more || current_page_items.nil? || current_page_items.empty?
|
|
15
|
+
params = {}
|
|
16
|
+
params[:before_id] = current_page_items.last.id
|
|
17
|
+
unless page_size.nil?
|
|
18
|
+
params[:page_size] = page_size
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
@client.make_request(:get, endpoint, cls, params)
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
# issue with getting the next page
|
|
25
|
+
raise EasyPost::Errors::EndOfPaginationError.new
|
|
26
|
+
end
|
|
27
|
+
end
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
class EasyPost::Services::Batch < EasyPost::Services::Service
|
|
4
|
+
MODEL_CLASS = EasyPost::Models::Batch
|
|
5
|
+
|
|
6
|
+
# Create a Batch.
|
|
7
|
+
def create(params = {})
|
|
8
|
+
wrapped_params = { batch: params }
|
|
9
|
+
|
|
10
|
+
@client.make_request(:post, 'batches', MODEL_CLASS, wrapped_params)
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
# Create and buy a batch in one call.
|
|
14
|
+
def create_and_buy(params = {})
|
|
15
|
+
wrapped_params = { batch: params }
|
|
16
|
+
|
|
17
|
+
@client.make_request(:post, 'batches/create_and_buy', MODEL_CLASS, wrapped_params)
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def all(params = {})
|
|
21
|
+
@client.make_request(:get, 'batches', EasyPost::Models::ApiKey, params)
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
# Retrieve a Batch
|
|
25
|
+
def retrieve(id)
|
|
26
|
+
@client.make_request(:get, "batches/#{id}", MODEL_CLASS)
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
# Buy a Batch.
|
|
30
|
+
def buy(id, params = {})
|
|
31
|
+
@client.make_request(:post, "batches/#{id}/buy", MODEL_CLASS, params)
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
# Convert the label format of a Batch.
|
|
35
|
+
def label(id, params = {})
|
|
36
|
+
@client.make_request(:post, "batches/#{id}/label", MODEL_CLASS, params)
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
# Remove Shipments from a Batch.
|
|
40
|
+
def remove_shipments(id, params = {})
|
|
41
|
+
@client.make_request(:post, "batches/#{id}/remove_shipments", MODEL_CLASS, params)
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
# Add Shipments to a Batch.
|
|
45
|
+
def add_shipments(id, params = {})
|
|
46
|
+
@client.make_request(:post, "batches/#{id}/add_shipments", MODEL_CLASS, params)
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
# Create a ScanForm for a Batch.
|
|
50
|
+
def create_scan_form(id, params = {})
|
|
51
|
+
@client.make_request(:post, "batches/#{id}/scan_form", MODEL_CLASS, params)
|
|
52
|
+
end
|
|
53
|
+
end
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
class EasyPost::Services::BetaRate < EasyPost::Services::Service
|
|
4
|
+
# Retrieve a list of stateless rates.
|
|
5
|
+
def retrieve_stateless_rates(params = {})
|
|
6
|
+
wrapped_params = {
|
|
7
|
+
shipment: params,
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
@client.make_request(:post, 'rates', EasyPost::Models::Rate, wrapped_params, 'beta').rates
|
|
11
|
+
end
|
|
12
|
+
end
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
class EasyPost::Services::BetaReferralCustomer < EasyPost::Services::Service
|
|
4
|
+
# Add a Stripe payment method to a ReferralCustomer Customer. This function requires the ReferralCustomer Customer's API key.
|
|
5
|
+
def add_payment_method(stripe_customer_id, payment_method_reference, priority = 'primary')
|
|
6
|
+
wrapped_params = {
|
|
7
|
+
payment_method: {
|
|
8
|
+
stripe_customer_id: stripe_customer_id,
|
|
9
|
+
payment_method_reference: payment_method_reference,
|
|
10
|
+
priority: priority.downcase,
|
|
11
|
+
},
|
|
12
|
+
}
|
|
13
|
+
@client.make_request(
|
|
14
|
+
:post,
|
|
15
|
+
'referral_customers/payment_method',
|
|
16
|
+
EasyPost::Models::EasyPostObject,
|
|
17
|
+
wrapped_params,
|
|
18
|
+
'beta',
|
|
19
|
+
)
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
# Refund a ReferralCustomer Customer's wallet by a specified amount. Refund will be issued to the user's original payment method.
|
|
23
|
+
# This function requires the ReferralCustomer Customer's API key.
|
|
24
|
+
def refund_by_amount(amount)
|
|
25
|
+
params = {
|
|
26
|
+
refund_amount: amount,
|
|
27
|
+
}
|
|
28
|
+
@client.make_request(:post, 'referral_customers/refunds', EasyPost::Models::EasyPostObject, params, 'beta')
|
|
29
|
+
# noinspection RubyMismatchedReturnType
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
# Refund a ReferralCustomer Customer's wallet for a specified payment log entry. Refund will be issued to the user's original payment method.
|
|
33
|
+
# This function requires the ReferralCustomer Customer's API key.
|
|
34
|
+
def refund_by_payment_log(payment_log_id)
|
|
35
|
+
params = {
|
|
36
|
+
payment_log_id: payment_log_id,
|
|
37
|
+
}
|
|
38
|
+
@client.make_request(:post, 'referral_customers/refunds', EasyPost::Models::EasyPostObject, params, 'beta')
|
|
39
|
+
end
|
|
40
|
+
end
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'easypost/constants'
|
|
4
|
+
|
|
5
|
+
class EasyPost::Services::Billing < EasyPost::Services::Service
|
|
6
|
+
# Get payment method info (type of the payment method and ID of the payment method)
|
|
7
|
+
def self.get_payment_method_info(priority)
|
|
8
|
+
payment_methods = EasyPost::Services::Billing.retrieve_payment_methods
|
|
9
|
+
payment_method_map = {
|
|
10
|
+
'primary' => 'primary_payment_method',
|
|
11
|
+
'secondary' => 'secondary_payment_method',
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
payment_method_to_use = payment_method_map[priority]
|
|
15
|
+
|
|
16
|
+
error_string = EasyPost::Constants::INVALID_PAYMENT_METHOD
|
|
17
|
+
suggestion = "Please use a valid payment method: #{payment_method_map.keys.join(', ')}"
|
|
18
|
+
if payment_methods[payment_method_to_use].nil?
|
|
19
|
+
raise EasyPost::Errors::InvalidParameterError.new(
|
|
20
|
+
error_string,
|
|
21
|
+
suggestion,
|
|
22
|
+
)
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
payment_method_id = payment_methods[payment_method_to_use]['id']
|
|
26
|
+
|
|
27
|
+
unless payment_method_id.nil?
|
|
28
|
+
if payment_method_id.start_with?('card_')
|
|
29
|
+
endpoint = '/v2/credit_cards'
|
|
30
|
+
elsif payment_method_id.start_with?('bank_')
|
|
31
|
+
endpoint = '/v2/bank_accounts'
|
|
32
|
+
else
|
|
33
|
+
raise EasyPost::Errors::InvalidObjectError.new(error_string)
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
[endpoint, payment_method_id]
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
# Fund your EasyPost wallet by charging your primary or secondary card on file.
|
|
41
|
+
def fund_wallet(amount, priority = 'primary')
|
|
42
|
+
payment_info = EasyPost::Services::Billing.get_payment_method_info(priority.downcase)
|
|
43
|
+
endpoint = payment_info[0]
|
|
44
|
+
payment_id = payment_info[1]
|
|
45
|
+
|
|
46
|
+
wrapped_params = { amount: amount }
|
|
47
|
+
@client.make_request(:post, "#{endpoint}/#{payment_id}/charges", EasyPost::Models::EasyPostObject, wrapped_params)
|
|
48
|
+
|
|
49
|
+
# Return true if succeeds, an error will be thrown if it fails
|
|
50
|
+
true
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
# Delete a payment method.
|
|
54
|
+
def delete_payment_method(priority)
|
|
55
|
+
payment_info = EasyPost::Services::Billing.get_payment_method_info(priority.downcase)
|
|
56
|
+
endpoint = payment_info[0]
|
|
57
|
+
payment_id = payment_info[1]
|
|
58
|
+
|
|
59
|
+
@client.make_request(:delete, "#{endpoint}/#{payment_id}")
|
|
60
|
+
|
|
61
|
+
# Return true if succeeds, an error will be thrown if it fails
|
|
62
|
+
true
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
# Retrieve all payment methods.
|
|
66
|
+
def retrieve_payment_methods
|
|
67
|
+
response = @client.make_request(:get, '/v2/payment_methods')
|
|
68
|
+
|
|
69
|
+
if response['id'].nil?
|
|
70
|
+
raise EasyPost::Errors::InvalidObjectError.new(EasyPost::Constants::NO_PAYMENT_METHODS)
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
response
|
|
74
|
+
end
|
|
75
|
+
end
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
class EasyPost::Services::CarrierAccount < EasyPost::Services::Service
|
|
4
|
+
CUSTOM_WORKFLOW_CARRIER_TYPES = %w[UpsAccount FedexAccount].freeze
|
|
5
|
+
MODEL_CLASS = EasyPost::Models::CarrierAccount
|
|
6
|
+
|
|
7
|
+
# Create a carrier account
|
|
8
|
+
def create(params = {})
|
|
9
|
+
wrapped_params = { carrier_account: params }
|
|
10
|
+
|
|
11
|
+
# For UPS and FedEx the endpoint is different
|
|
12
|
+
create_url = if CUSTOM_WORKFLOW_CARRIER_TYPES.include?(params[:type])
|
|
13
|
+
'carrier_accounts/register'
|
|
14
|
+
else
|
|
15
|
+
'carrier_accounts'
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
@client.make_request(:post, create_url, MODEL_CLASS, wrapped_params)
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
# Retrieve a carrier account
|
|
22
|
+
def retrieve(id)
|
|
23
|
+
@client.make_request(:get, "carrier_accounts/#{id}", MODEL_CLASS)
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
# Retrieve all carrier accounts
|
|
27
|
+
def all(params = {})
|
|
28
|
+
@client.make_request(:get, 'carrier_accounts', MODEL_CLASS, params)
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
# Update a carrier account
|
|
32
|
+
def update(id, params = {})
|
|
33
|
+
wrapped_params = { carrier_account: params }
|
|
34
|
+
@client.make_request(:put, "carrier_accounts/#{id}", MODEL_CLASS, wrapped_params)
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
# Delete a carrier account
|
|
38
|
+
def delete(id)
|
|
39
|
+
@client.make_request(:delete, "carrier_accounts/#{id}")
|
|
40
|
+
|
|
41
|
+
# Return true if succeeds, an error will be thrown if it fails
|
|
42
|
+
true
|
|
43
|
+
end
|
|
44
|
+
end
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
class EasyPost::Services::CarrierMetadata < EasyPost::Services::Service
|
|
4
|
+
# Retrieve metadata for carrier(s).
|
|
5
|
+
def retrieve(carriers = [], types = [])
|
|
6
|
+
path = '/metadata/carriers?'
|
|
7
|
+
|
|
8
|
+
params = {}
|
|
9
|
+
|
|
10
|
+
if carriers.length.positive?
|
|
11
|
+
params[:carriers] = carriers.join(',')
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
if types.length.positive?
|
|
15
|
+
params[:types] = types.join(',')
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
path += URI.encode_www_form(params)
|
|
19
|
+
|
|
20
|
+
@client.make_request(:get, path, EasyPost::Models::EasyPostObject, params).carriers
|
|
21
|
+
end
|
|
22
|
+
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
class EasyPost::Services::CustomsInfo < EasyPost::Services::Service
|
|
4
|
+
MODEL_CLASS = EasyPost::Models::CustomsInfo
|
|
5
|
+
|
|
6
|
+
# Create a CustomsInfo object
|
|
7
|
+
def create(params)
|
|
8
|
+
@client.make_request(:post, 'customs_infos', MODEL_CLASS, params)
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
# Retrieve a CustomsInfo object
|
|
12
|
+
def retrieve(id)
|
|
13
|
+
@client.make_request(:get, "customs_infos/#{id}", MODEL_CLASS)
|
|
14
|
+
end
|
|
15
|
+
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
class EasyPost::Services::CustomsItem < EasyPost::Services::Service
|
|
4
|
+
MODEL_CLASS = EasyPost::Models::CustomsItem
|
|
5
|
+
|
|
6
|
+
# Create a CustomsItem object
|
|
7
|
+
def create(params)
|
|
8
|
+
@client.make_request(:post, 'customs_items', MODEL_CLASS, params)
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
# Retrieve a CustomsItem object
|
|
12
|
+
def retrieve(id)
|
|
13
|
+
@client.make_request(:get, "customs_items/#{id}", MODEL_CLASS)
|
|
14
|
+
end
|
|
15
|
+
end
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
class EasyPost::Services::EndShipper < EasyPost::Services::Service
|
|
4
|
+
MODEL_CLASS = EasyPost::Models::EndShipper
|
|
5
|
+
|
|
6
|
+
# Create an EndShipper object.
|
|
7
|
+
def create(params = {})
|
|
8
|
+
wrapped_params = { address: params }
|
|
9
|
+
|
|
10
|
+
@client.make_request(:post, 'end_shippers', MODEL_CLASS, wrapped_params)
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
# Retrieve an EndShipper object.
|
|
14
|
+
def retrieve(id)
|
|
15
|
+
@client.make_request(:get, "end_shippers/#{id}", MODEL_CLASS)
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
# Retrieve all EndShipper objects.
|
|
19
|
+
def all(params = {})
|
|
20
|
+
@client.make_request(:get, 'end_shippers', MODEL_CLASS, params)
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
# Updates an EndShipper object. This requires all parameters to be set.
|
|
24
|
+
def update(id, params)
|
|
25
|
+
wrapped_params = { address: params }
|
|
26
|
+
|
|
27
|
+
@client.make_request(:put, "end_shippers/#{id}", MODEL_CLASS, wrapped_params)
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
# TODO: Add support for getting the next page of end shippers when the API supports it.
|
|
31
|
+
end
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'json'
|
|
4
|
+
|
|
5
|
+
class EasyPost::Services::Event < EasyPost::Services::Service
|
|
6
|
+
MODEL_CLASS = EasyPost::Models::Event
|
|
7
|
+
|
|
8
|
+
# Retrieve an Event object
|
|
9
|
+
def retrieve(id)
|
|
10
|
+
@client.make_request(:get, "events/#{id}", MODEL_CLASS)
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
# Retrieve all Event objects
|
|
14
|
+
def all(params = {})
|
|
15
|
+
@client.make_request(:get, 'events', MODEL_CLASS, params)
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
# Retrieve all payloads for an event.
|
|
19
|
+
def retrieve_all_payloads(event_id)
|
|
20
|
+
@client.make_request(:get, "events/#{event_id}/payloads", EasyPost::Models::Payload)
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
# Retrieve a specific payload for an event.
|
|
24
|
+
def retrieve_payload(event_id, payload_id)
|
|
25
|
+
@client.make_request(:get, "events/#{event_id}/payloads/#{payload_id}", EasyPost::Models::Payload)
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
# Get the next page of events.
|
|
29
|
+
def get_next_page(collection, page_size = nil)
|
|
30
|
+
get_next_page_helper(collection, collection.events, 'events', MODEL_CLASS, page_size)
|
|
31
|
+
end
|
|
32
|
+
end
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
class EasyPost::Services::Insurance < EasyPost::Services::Service
|
|
4
|
+
MODEL_CLASS = EasyPost::Models::Insurance
|
|
5
|
+
|
|
6
|
+
# Create an Insurance object
|
|
7
|
+
def create(params = {})
|
|
8
|
+
wrapped_params = { insurance: params }
|
|
9
|
+
@client.make_request(:post, 'insurances', MODEL_CLASS, wrapped_params)
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
# Retrieve an Insurance object
|
|
13
|
+
def retrieve(id)
|
|
14
|
+
@client.make_request(:get, "insurances/#{id}", MODEL_CLASS)
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
# Retrieve all Insurance objects
|
|
18
|
+
def all(params = {})
|
|
19
|
+
@client.make_request(:get, 'insurances', MODEL_CLASS, params)
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
# Get the next page of insurances.
|
|
23
|
+
def get_next_page(collection, page_size = nil)
|
|
24
|
+
get_next_page_helper(collection, collection.insurances, 'insurances', MODEL_CLASS, page_size)
|
|
25
|
+
end
|
|
26
|
+
end
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
class EasyPost::Services::Order < EasyPost::Services::Service
|
|
4
|
+
MODEL_CLASS = EasyPost::Models::Order
|
|
5
|
+
|
|
6
|
+
# Create an Order object
|
|
7
|
+
def create(params = {})
|
|
8
|
+
wrapped_params = { order: params }
|
|
9
|
+
@client.make_request(:post, 'orders', MODEL_CLASS, wrapped_params)
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
# Retrieve an Order object
|
|
13
|
+
def retrieve(id)
|
|
14
|
+
@client.make_request(:get, "orders/#{id}", MODEL_CLASS)
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
# Retrieve new rates for an Order object
|
|
18
|
+
def get_rates(id, params = {})
|
|
19
|
+
@client.make_request(:get, "orders/#{id}/rates", MODEL_CLASS, params)
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
# Buy an Order object
|
|
23
|
+
def buy(id, params = {})
|
|
24
|
+
if params.instance_of?(EasyPost::Models::Rate)
|
|
25
|
+
params = { carrier: params[:carrier], service: params[:service] }
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
@client.make_request(:post, "orders/#{id}/buy", MODEL_CLASS, params)
|
|
29
|
+
end
|
|
30
|
+
end
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
class EasyPost::Services::Parcel < EasyPost::Services::Service
|
|
4
|
+
MODEL_CLASS = EasyPost::Models::Parcel
|
|
5
|
+
|
|
6
|
+
# Create a Parcel object
|
|
7
|
+
def create(params = {})
|
|
8
|
+
wrapped_params = { parcel: params }
|
|
9
|
+
@client.make_request(:post, 'parcels', MODEL_CLASS, wrapped_params)
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
# Retrieve a Parcel object
|
|
13
|
+
def retrieve(id)
|
|
14
|
+
@client.make_request(:get, "parcels/#{id}", MODEL_CLASS)
|
|
15
|
+
end
|
|
16
|
+
end
|