easypost 3.1.4 → 5.1.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/.gitattributes +9 -0
- data/.github/CODEOWNERS +2 -0
- data/.github/ISSUE_TEMPLATE/bug_report.yml +81 -0
- data/.github/ISSUE_TEMPLATE/feature_request.yml +37 -0
- data/.github/PULL_REQUEST_TEMPLATE.md +22 -0
- data/.github/workflows/ci.yml +71 -0
- data/.gitignore +27 -17
- data/.gitmodules +3 -0
- data/CHANGELOG.md +378 -0
- data/Gemfile +2 -0
- data/Makefile +70 -0
- data/README.md +193 -74
- data/Rakefile +2 -1
- data/UPGRADE_GUIDE.md +181 -0
- data/VERSION +1 -1
- data/bin/easypost-irb +5 -3
- data/easypost.gemspec +27 -20
- data/lib/easypost/client.rb +178 -0
- data/lib/easypost/connection.rb +64 -0
- data/lib/easypost/constants.rb +15 -0
- data/lib/easypost/errors/api/api_error.rb +108 -0
- data/lib/easypost/errors/api/bad_request_error.rb +6 -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 +32 -0
- data/lib/easypost/hooks/request_context.rb +16 -0
- data/lib/easypost/hooks/response_context.rb +23 -0
- data/lib/easypost/hooks.rb +34 -0
- data/lib/easypost/http_client.rb +117 -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/models/carbon_offset.rb +5 -0
- 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/models/payload.rb +5 -0
- data/lib/easypost/models/payment_method.rb +5 -0
- data/lib/easypost/models/pickup.rb +9 -0
- data/lib/easypost/models/pickup_rate.rb +5 -0
- data/lib/easypost/models/postage_label.rb +5 -0
- 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/models/tax_identifier.rb +6 -0
- 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 +17 -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 +167 -103
- 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/version.rb +3 -1
- data/lib/easypost.rb +21 -137
- metadata +253 -49
- data/.travis.yml +0 -9
- data/CHANGELOG +0 -207
- data/lib/easypost/address.rb +0 -60
- data/lib/easypost/batch.rb +0 -53
- data/lib/easypost/carrier_account.rb +0 -8
- data/lib/easypost/customs_info.rb +0 -9
- data/lib/easypost/customs_item.rb +0 -9
- data/lib/easypost/error.rb +0 -33
- data/lib/easypost/event.rb +0 -10
- data/lib/easypost/insurance.rb +0 -4
- data/lib/easypost/item.rb +0 -10
- data/lib/easypost/object.rb +0 -149
- data/lib/easypost/order.rb +0 -30
- data/lib/easypost/parcel.rb +0 -4
- data/lib/easypost/pickup.rb +0 -30
- data/lib/easypost/pickup_rate.rb +0 -5
- data/lib/easypost/postage_label.rb +0 -4
- data/lib/easypost/print_job.rb +0 -6
- data/lib/easypost/printer.rb +0 -28
- data/lib/easypost/rate.rb +0 -4
- data/lib/easypost/refund.rb +0 -4
- data/lib/easypost/report.rb +0 -31
- data/lib/easypost/resource.rb +0 -77
- data/lib/easypost/scan_form.rb +0 -8
- data/lib/easypost/shipment.rb +0 -120
- data/lib/easypost/tracker.rb +0 -15
- data/lib/easypost/user.rb +0 -47
- data/lib/easypost/webhook.rb +0 -31
data/lib/easypost/report.rb
DELETED
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
module EasyPost
|
|
2
|
-
class Report < Resource
|
|
3
|
-
def self.create(params={}, api_key=nil)
|
|
4
|
-
url = "#{self.url}/#{params[:type]}"
|
|
5
|
-
wrapped_params = {}
|
|
6
|
-
wrapped_params[class_name.to_sym] = params
|
|
7
|
-
|
|
8
|
-
response = EasyPost.make_request(:post, url, api_key, params)
|
|
9
|
-
return Util.convert_to_easypost_object(response, api_key)
|
|
10
|
-
end
|
|
11
|
-
|
|
12
|
-
def self.retrieve(params, api_key=nil)
|
|
13
|
-
id = if params.is_a?(String)
|
|
14
|
-
params
|
|
15
|
-
else
|
|
16
|
-
params[:id]
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
instance = self.new(id, api_key)
|
|
20
|
-
instance.refresh
|
|
21
|
-
return instance
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
def self.all(filters={}, api_key=nil)
|
|
25
|
-
url = "#{self.url}/#{filters[:type]}"
|
|
26
|
-
|
|
27
|
-
response = EasyPost.make_request(:get, url, api_key, filters)
|
|
28
|
-
return EasyPost::Util::convert_to_easypost_object(response, api_key) if response
|
|
29
|
-
end
|
|
30
|
-
end
|
|
31
|
-
end
|
data/lib/easypost/resource.rb
DELETED
|
@@ -1,77 +0,0 @@
|
|
|
1
|
-
module EasyPost
|
|
2
|
-
class Resource < EasyPostObject
|
|
3
|
-
def self.class_name
|
|
4
|
-
camel = self.name.split('::')[-1]
|
|
5
|
-
snake = camel[0..0] + camel[1..-1].gsub(/([A-Z])/, '_\1')
|
|
6
|
-
return snake.downcase
|
|
7
|
-
end
|
|
8
|
-
|
|
9
|
-
def self.url
|
|
10
|
-
if self.class_name == 'resource'
|
|
11
|
-
raise NotImplementedError.new('Resource is an abstract class. You should perform actions on its subclasses (Address, Shipment, etc.)')
|
|
12
|
-
end
|
|
13
|
-
if(self.class_name[-1..-1] == 's' || self.class_name[-1..-1] == 'h')
|
|
14
|
-
return "/v2/#{CGI.escape(self.class_name.downcase)}es"
|
|
15
|
-
else
|
|
16
|
-
return "/v2/#{CGI.escape(class_name.downcase)}s"
|
|
17
|
-
end
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
def url
|
|
21
|
-
unless self.id
|
|
22
|
-
raise Error.new("Could not determine which URL to request: #{self.class} instance has invalid ID: #{self.id.inspect}")
|
|
23
|
-
end
|
|
24
|
-
return "#{self.class.url}/#{CGI.escape(id)}"
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
def refresh
|
|
28
|
-
response = EasyPost.make_request(:get, url, @api_key, @retrieve_options)
|
|
29
|
-
refresh_from(response, api_key)
|
|
30
|
-
return self
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
def self.all(filters={}, api_key=nil)
|
|
34
|
-
response = EasyPost.make_request(:get, url, api_key, filters)
|
|
35
|
-
return Util.convert_to_easypost_object(response, api_key)
|
|
36
|
-
end
|
|
37
|
-
|
|
38
|
-
def self.retrieve(id, api_key=nil)
|
|
39
|
-
instance = self.new(id, api_key)
|
|
40
|
-
instance.refresh
|
|
41
|
-
return instance
|
|
42
|
-
end
|
|
43
|
-
|
|
44
|
-
def self.create(params={}, api_key=nil)
|
|
45
|
-
wrapped_params = {}
|
|
46
|
-
wrapped_params[self.class_name().to_sym] = params
|
|
47
|
-
response = EasyPost.make_request(:post, self.url, api_key, wrapped_params)
|
|
48
|
-
return Util.convert_to_easypost_object(response, api_key)
|
|
49
|
-
end
|
|
50
|
-
|
|
51
|
-
def delete
|
|
52
|
-
response = EasyPost.make_request(:delete, url, @api_key)
|
|
53
|
-
refresh_from(response, api_key)
|
|
54
|
-
return self
|
|
55
|
-
end
|
|
56
|
-
|
|
57
|
-
def save
|
|
58
|
-
if @unsaved_values.length > 0
|
|
59
|
-
values = {}
|
|
60
|
-
@unsaved_values.each { |k| values[k] = @values[k] }
|
|
61
|
-
|
|
62
|
-
for key in @unsaved_values
|
|
63
|
-
value = values[key]
|
|
64
|
-
if value.is_a?(EasyPost::EasyPostObject)
|
|
65
|
-
values[key] = value.flatten_unsaved
|
|
66
|
-
end
|
|
67
|
-
end
|
|
68
|
-
|
|
69
|
-
wrapped_params = {self.class.class_name => values}
|
|
70
|
-
|
|
71
|
-
response = EasyPost.make_request(:put, url, @api_key, wrapped_params)
|
|
72
|
-
refresh_from(response, api_key)
|
|
73
|
-
end
|
|
74
|
-
return self
|
|
75
|
-
end
|
|
76
|
-
end
|
|
77
|
-
end
|
data/lib/easypost/scan_form.rb
DELETED
data/lib/easypost/shipment.rb
DELETED
|
@@ -1,120 +0,0 @@
|
|
|
1
|
-
module EasyPost
|
|
2
|
-
class Shipment < Resource
|
|
3
|
-
|
|
4
|
-
def get_rates(params={})
|
|
5
|
-
response = EasyPost.make_request(:get, url + '/rates', @api_key, params)
|
|
6
|
-
self.refresh_from(response, @api_key, true)
|
|
7
|
-
|
|
8
|
-
return self
|
|
9
|
-
end
|
|
10
|
-
|
|
11
|
-
def buy(params={})
|
|
12
|
-
if params.instance_of?(EasyPost::Rate)
|
|
13
|
-
temp = params.clone
|
|
14
|
-
params = {}
|
|
15
|
-
params[:rate] = temp
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
response = EasyPost.make_request(:post, url + '/buy', @api_key, params)
|
|
19
|
-
self.refresh_from(response, @api_key, true)
|
|
20
|
-
|
|
21
|
-
return self
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
def insure(params={})
|
|
25
|
-
if params.is_a?(Integer) || params.is_a?(Float)
|
|
26
|
-
temp = params.clone
|
|
27
|
-
params = {}
|
|
28
|
-
params[:amount] = temp
|
|
29
|
-
end
|
|
30
|
-
|
|
31
|
-
response = EasyPost.make_request(:post, url + '/insure', @api_key, params)
|
|
32
|
-
self.refresh_from(response, @api_key, true)
|
|
33
|
-
|
|
34
|
-
return self
|
|
35
|
-
end
|
|
36
|
-
|
|
37
|
-
def refund(params={})
|
|
38
|
-
response = EasyPost.make_request(:get, url + '/refund', @api_key, params)
|
|
39
|
-
self.refresh_from(response, @api_key, true)
|
|
40
|
-
|
|
41
|
-
return self
|
|
42
|
-
end
|
|
43
|
-
|
|
44
|
-
def print(params={})
|
|
45
|
-
if params.instance_of?(EasyPost::Printer)
|
|
46
|
-
return params.print(self.postage_label)
|
|
47
|
-
end
|
|
48
|
-
return false
|
|
49
|
-
end
|
|
50
|
-
|
|
51
|
-
def label(params={})
|
|
52
|
-
if params.is_a?(String)
|
|
53
|
-
temp = params.clone
|
|
54
|
-
params = {}
|
|
55
|
-
params[:file_format] = temp
|
|
56
|
-
end
|
|
57
|
-
|
|
58
|
-
response = EasyPost.make_request(:get, url + '/label', @api_key, params)
|
|
59
|
-
self.refresh_from(response, @api_key, true)
|
|
60
|
-
|
|
61
|
-
return self
|
|
62
|
-
end
|
|
63
|
-
|
|
64
|
-
def lowest_rate(carriers=[], services=[])
|
|
65
|
-
lowest = nil
|
|
66
|
-
|
|
67
|
-
self.get_rates unless self.rates
|
|
68
|
-
|
|
69
|
-
carriers = EasyPost::Util.normalize_string_list(carriers)
|
|
70
|
-
|
|
71
|
-
negative_carriers = []
|
|
72
|
-
carriers_copy = carriers.clone
|
|
73
|
-
carriers_copy.each do |carrier|
|
|
74
|
-
if carrier[0,1] == '!'
|
|
75
|
-
negative_carriers << carrier[1..-1]
|
|
76
|
-
carriers.delete(carrier)
|
|
77
|
-
end
|
|
78
|
-
end
|
|
79
|
-
|
|
80
|
-
services = EasyPost::Util.normalize_string_list(services)
|
|
81
|
-
|
|
82
|
-
negative_services = []
|
|
83
|
-
services_copy = services.clone
|
|
84
|
-
services_copy.each do |service|
|
|
85
|
-
if service[0,1] == '!'
|
|
86
|
-
negative_services << service[1..-1]
|
|
87
|
-
services.delete(service)
|
|
88
|
-
end
|
|
89
|
-
end
|
|
90
|
-
|
|
91
|
-
self.rates.each do |k|
|
|
92
|
-
|
|
93
|
-
rate_carrier = k.carrier.downcase
|
|
94
|
-
if carriers.size() > 0 && !carriers.include?(rate_carrier)
|
|
95
|
-
next
|
|
96
|
-
end
|
|
97
|
-
if negative_carriers.size() > 0 && negative_carriers.include?(rate_carrier)
|
|
98
|
-
next
|
|
99
|
-
end
|
|
100
|
-
|
|
101
|
-
rate_service = k.service.downcase
|
|
102
|
-
if services.size() > 0 && !services.include?(rate_service)
|
|
103
|
-
next
|
|
104
|
-
end
|
|
105
|
-
if negative_services.size() > 0 && negative_services.include?(rate_service)
|
|
106
|
-
next
|
|
107
|
-
end
|
|
108
|
-
|
|
109
|
-
if lowest == nil || k.rate.to_f < lowest.rate.to_f
|
|
110
|
-
lowest = k
|
|
111
|
-
end
|
|
112
|
-
end
|
|
113
|
-
|
|
114
|
-
raise Error.new('No rates found.') if lowest == nil
|
|
115
|
-
|
|
116
|
-
return lowest
|
|
117
|
-
end
|
|
118
|
-
|
|
119
|
-
end
|
|
120
|
-
end
|
data/lib/easypost/tracker.rb
DELETED
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
module EasyPost
|
|
2
|
-
class Tracker < Resource
|
|
3
|
-
def self.create_list(params={}, api_key=nil)
|
|
4
|
-
url = self.url + '/create_list'
|
|
5
|
-
response = EasyPost.make_request(:post, url, api_key, params)
|
|
6
|
-
return true
|
|
7
|
-
end
|
|
8
|
-
|
|
9
|
-
def self.all_updated(params={}, api_key=nil)
|
|
10
|
-
url = self.url + '/all_updated'
|
|
11
|
-
response = EasyPost.make_request(:get, url, api_key, params)
|
|
12
|
-
return Util.convert_to_easypost_object(response, api_key)
|
|
13
|
-
end
|
|
14
|
-
end
|
|
15
|
-
end
|
data/lib/easypost/user.rb
DELETED
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
module EasyPost
|
|
2
|
-
class User < Resource
|
|
3
|
-
def self.create(params={}, api_key=nil)
|
|
4
|
-
response = EasyPost.make_request(:post, self.url, api_key, {self.class_name.to_sym => params})
|
|
5
|
-
return Util.convert_to_easypost_object(response, api_key)
|
|
6
|
-
end
|
|
7
|
-
|
|
8
|
-
def save
|
|
9
|
-
if @unsaved_values.length > 0
|
|
10
|
-
values = {}
|
|
11
|
-
@unsaved_values.each { |k| values[k] = @values[k] }
|
|
12
|
-
|
|
13
|
-
wrapped_params = {user: values}
|
|
14
|
-
|
|
15
|
-
response = EasyPost.make_request(:put, url, @api_key, wrapped_params)
|
|
16
|
-
refresh_from(response, api_key)
|
|
17
|
-
end
|
|
18
|
-
return self
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
def self.retrieve_me
|
|
22
|
-
self.all
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
def self.all_api_keys
|
|
26
|
-
response = EasyPost.make_request(:get, "/api_keys", @api_key)
|
|
27
|
-
return Util.convert_to_easypost_object(response, api_key)
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
def api_keys
|
|
31
|
-
api_keys = EasyPost::User.all_api_keys
|
|
32
|
-
|
|
33
|
-
if api_keys.id == self.id
|
|
34
|
-
my_api_keys = api_keys.keys
|
|
35
|
-
else
|
|
36
|
-
for child in api_keys.children
|
|
37
|
-
if child.id == self.id
|
|
38
|
-
my_api_keys = child.keys
|
|
39
|
-
break
|
|
40
|
-
end
|
|
41
|
-
end
|
|
42
|
-
end
|
|
43
|
-
|
|
44
|
-
my_api_keys
|
|
45
|
-
end
|
|
46
|
-
end
|
|
47
|
-
end
|
data/lib/easypost/webhook.rb
DELETED
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
module EasyPost
|
|
2
|
-
class Webhook < Resource
|
|
3
|
-
def update(params={})
|
|
4
|
-
# NOTE: This method is redefined here since the "url" method conflicts
|
|
5
|
-
# with the objects field
|
|
6
|
-
unless self.id
|
|
7
|
-
raise Error.new("Could not determine which URL to request: #{self.class} instance has invalid ID: #{self.id.inspect}")
|
|
8
|
-
end
|
|
9
|
-
instance_url = "#{self.class.url}/#{CGI.escape(id)}"
|
|
10
|
-
|
|
11
|
-
response = EasyPost.make_request(:put, instance_url, @api_key, params)
|
|
12
|
-
self.refresh_from(response, api_key, true)
|
|
13
|
-
|
|
14
|
-
return self
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
def delete
|
|
18
|
-
# NOTE: This method is redefined here since the "url" method conflicts
|
|
19
|
-
# with the objects field
|
|
20
|
-
unless self.id
|
|
21
|
-
raise Error.new("Could not determine which URL to request: #{self.class} instance has invalid ID: #{self.id.inspect}")
|
|
22
|
-
end
|
|
23
|
-
instance_url = "#{self.class.url}/#{CGI.escape(id)}"
|
|
24
|
-
|
|
25
|
-
response = EasyPost.make_request(:delete, instance_url, @api_key)
|
|
26
|
-
refresh_from(response, api_key)
|
|
27
|
-
|
|
28
|
-
return self
|
|
29
|
-
end
|
|
30
|
-
end
|
|
31
|
-
end
|