easypost 3.1.4 → 3.1.5
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/CHANGELOG +6 -0
- data/README.md +1 -0
- data/VERSION +1 -1
- data/lib/easypost.rb +2 -2
- data/lib/easypost/address.rb +47 -49
- data/lib/easypost/batch.rb +34 -38
- data/lib/easypost/carrier_account.rb +4 -6
- data/lib/easypost/customs_info.rb +3 -7
- data/lib/easypost/customs_item.rb +3 -7
- data/lib/easypost/error.rb +25 -27
- data/lib/easypost/event.rb +3 -6
- data/lib/easypost/insurance.rb +1 -3
- data/lib/easypost/item.rb +4 -8
- data/lib/easypost/object.rb +109 -111
- data/lib/easypost/order.rb +20 -22
- data/lib/easypost/parcel.rb +1 -3
- data/lib/easypost/pickup.rb +19 -23
- data/lib/easypost/pickup_rate.rb +1 -3
- data/lib/easypost/postage_label.rb +1 -3
- data/lib/easypost/print_job.rb +1 -5
- data/lib/easypost/printer.rb +18 -22
- data/lib/easypost/rate.rb +1 -3
- data/lib/easypost/refund.rb +1 -3
- data/lib/easypost/report.rb +22 -24
- data/lib/easypost/resource.rb +58 -60
- data/lib/easypost/scan_form.rb +4 -6
- data/lib/easypost/shipment.rb +83 -87
- data/lib/easypost/tracker.rb +10 -12
- data/lib/easypost/user.rb +33 -35
- data/lib/easypost/util.rb +100 -102
- data/lib/easypost/webhook.rb +22 -24
- metadata +2 -2
data/lib/easypost/order.rb
CHANGED
@@ -1,30 +1,28 @@
|
|
1
|
-
|
2
|
-
class Order < Resource
|
1
|
+
class EasyPost::Order < EasyPost::Resource
|
3
2
|
|
4
|
-
|
5
|
-
|
6
|
-
|
3
|
+
def get_rates(params={})
|
4
|
+
response = EasyPost.make_request(:get, url + '/rates', @api_key, params)
|
5
|
+
self.refresh_from(response, @api_key, true)
|
7
6
|
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
def buy(params={})
|
12
|
-
if params.instance_of?(EasyPost::Rate)
|
13
|
-
temp = params.clone
|
14
|
-
params = {}
|
15
|
-
params[:carrier] = temp.carrier
|
16
|
-
params[:service] = temp.service
|
17
|
-
end
|
18
|
-
|
19
|
-
response = EasyPost.make_request(:post, url + '/buy', @api_key, params)
|
20
|
-
self.refresh_from(response, @api_key, true)
|
7
|
+
return self
|
8
|
+
end
|
21
9
|
|
22
|
-
|
10
|
+
def buy(params={})
|
11
|
+
if params.instance_of?(EasyPost::Rate)
|
12
|
+
temp = params.clone
|
13
|
+
params = {}
|
14
|
+
params[:carrier] = temp.carrier
|
15
|
+
params[:service] = temp.service
|
23
16
|
end
|
24
17
|
|
25
|
-
|
26
|
-
|
27
|
-
|
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
|
28
23
|
|
24
|
+
def self.all(filters={}, api_key=nil)
|
25
|
+
raise NotImplementedError.new('Order.all not implemented.')
|
29
26
|
end
|
27
|
+
|
30
28
|
end
|
data/lib/easypost/parcel.rb
CHANGED
data/lib/easypost/pickup.rb
CHANGED
@@ -1,30 +1,26 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
params[:carrier] = temp.carrier
|
9
|
-
params[:service] = temp.service
|
10
|
-
end
|
11
|
-
|
12
|
-
response = EasyPost.make_request(:post, url + '/buy', @api_key, params)
|
13
|
-
self.refresh_from(response, @api_key, true)
|
14
|
-
|
15
|
-
return self
|
1
|
+
class EasyPost::Pickup < EasyPost::Resource
|
2
|
+
def buy(params={})
|
3
|
+
if params.instance_of?(EasyPost::PickupRate)
|
4
|
+
temp = params.clone
|
5
|
+
params = {}
|
6
|
+
params[:carrier] = temp.carrier
|
7
|
+
params[:service] = temp.service
|
16
8
|
end
|
17
9
|
|
18
|
-
|
19
|
-
|
20
|
-
self.refresh_from(response, @api_key, true)
|
10
|
+
response = EasyPost.make_request(:post, url + '/buy', @api_key, params)
|
11
|
+
self.refresh_from(response, @api_key, true)
|
21
12
|
|
22
|
-
|
23
|
-
|
13
|
+
return self
|
14
|
+
end
|
24
15
|
|
25
|
-
|
26
|
-
|
27
|
-
|
16
|
+
def cancel(params={})
|
17
|
+
response = EasyPost.make_request(:post, url + '/cancel', @api_key, params)
|
18
|
+
self.refresh_from(response, @api_key, true)
|
19
|
+
|
20
|
+
return self
|
21
|
+
end
|
28
22
|
|
23
|
+
def self.all(filters={}, api_key=nil)
|
24
|
+
raise NotImplementedError.new('Pickup.all not implemented.')
|
29
25
|
end
|
30
26
|
end
|
data/lib/easypost/pickup_rate.rb
CHANGED
data/lib/easypost/print_job.rb
CHANGED
data/lib/easypost/printer.rb
CHANGED
@@ -1,28 +1,24 @@
|
|
1
|
-
|
2
|
-
class Printer < Resource
|
1
|
+
class EasyPost::Printer < EasyPost::Resource
|
3
2
|
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
def print(params={})
|
12
|
-
if params.instance_of?(EasyPost::PostageLabel)
|
13
|
-
temp = params.clone
|
14
|
-
params = {}
|
15
|
-
params[:postage_label] = temp
|
16
|
-
end
|
3
|
+
def job
|
4
|
+
response = EasyPost.make_request(
|
5
|
+
:get, url + '/jobs', @api_key
|
6
|
+
)
|
7
|
+
return EasyPost::Util::convert_to_easypost_object(response, api_key)
|
8
|
+
end
|
17
9
|
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
return false
|
10
|
+
def print(params={})
|
11
|
+
if params.instance_of?(EasyPost::PostageLabel)
|
12
|
+
temp = params.clone
|
13
|
+
params = {}
|
14
|
+
params[:postage_label] = temp
|
24
15
|
end
|
25
16
|
|
17
|
+
response = EasyPost.make_request(
|
18
|
+
:post, url + '/print_postage_label', @api_key, params
|
19
|
+
)
|
20
|
+
true
|
21
|
+
rescue
|
22
|
+
false
|
26
23
|
end
|
27
24
|
end
|
28
|
-
|
data/lib/easypost/rate.rb
CHANGED
data/lib/easypost/refund.rb
CHANGED
data/lib/easypost/report.rb
CHANGED
@@ -1,31 +1,29 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
wrapped_params[class_name.to_sym] = params
|
1
|
+
class EasyPost::Report < EasyPost::Resource
|
2
|
+
def self.create(params={}, api_key=nil)
|
3
|
+
url = "#{self.url}/#{params[:type]}"
|
4
|
+
wrapped_params = {}
|
5
|
+
wrapped_params[class_name.to_sym] = params
|
7
6
|
|
8
|
-
|
9
|
-
|
10
|
-
|
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
|
7
|
+
response = EasyPost.make_request(:post, url, api_key, params)
|
8
|
+
return EasyPost::Util.convert_to_easypost_object(response, api_key)
|
9
|
+
end
|
18
10
|
|
19
|
-
|
20
|
-
|
21
|
-
|
11
|
+
def self.retrieve(params, api_key=nil)
|
12
|
+
id = if params.is_a?(String)
|
13
|
+
params
|
14
|
+
else
|
15
|
+
params[:id]
|
22
16
|
end
|
23
17
|
|
24
|
-
|
25
|
-
|
18
|
+
instance = self.new(id, api_key)
|
19
|
+
instance.refresh
|
20
|
+
return instance
|
21
|
+
end
|
26
22
|
|
27
|
-
|
28
|
-
|
29
|
-
|
23
|
+
def self.all(filters={}, api_key=nil)
|
24
|
+
url = "#{self.url}/#{filters[:type]}"
|
25
|
+
|
26
|
+
response = EasyPost.make_request(:get, url, api_key, filters)
|
27
|
+
return EasyPost::Util::convert_to_easypost_object(response, api_key) if response
|
30
28
|
end
|
31
29
|
end
|
data/lib/easypost/resource.rb
CHANGED
@@ -1,77 +1,75 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
end
|
1
|
+
class EasyPost::Resource < EasyPost::EasyPostObject
|
2
|
+
def self.class_name
|
3
|
+
camel = self.name.split('::')[-1]
|
4
|
+
snake = camel[0..0] + camel[1..-1].gsub(/([A-Z])/, '_\1')
|
5
|
+
return snake.downcase
|
6
|
+
end
|
8
7
|
|
9
|
-
|
10
|
-
|
11
|
-
|
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
|
8
|
+
def self.url
|
9
|
+
if self.class_name == 'resource'
|
10
|
+
raise NotImplementedError.new('Resource is an abstract class. You should perform actions on its subclasses (Address, Shipment, etc.)')
|
18
11
|
end
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
end
|
24
|
-
return "#{self.class.url}/#{CGI.escape(id)}"
|
12
|
+
if(self.class_name[-1..-1] == 's' || self.class_name[-1..-1] == 'h')
|
13
|
+
return "/v2/#{CGI.escape(self.class_name.downcase)}es"
|
14
|
+
else
|
15
|
+
return "/v2/#{CGI.escape(class_name.downcase)}s"
|
25
16
|
end
|
17
|
+
end
|
26
18
|
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
return self
|
19
|
+
def url
|
20
|
+
unless self.id
|
21
|
+
raise EasyPost::Error.new("Could not determine which URL to request: #{self.class} instance has invalid ID: #{self.id.inspect}")
|
31
22
|
end
|
23
|
+
return "#{self.class.url}/#{CGI.escape(id)}"
|
24
|
+
end
|
32
25
|
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
26
|
+
def refresh
|
27
|
+
response = EasyPost.make_request(:get, url, @api_key, @retrieve_options)
|
28
|
+
refresh_from(response, api_key)
|
29
|
+
return self
|
30
|
+
end
|
37
31
|
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
end
|
32
|
+
def self.all(filters={}, api_key=nil)
|
33
|
+
response = EasyPost.make_request(:get, url, api_key, filters)
|
34
|
+
return EasyPost::Util.convert_to_easypost_object(response, api_key)
|
35
|
+
end
|
43
36
|
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
end
|
37
|
+
def self.retrieve(id, api_key=nil)
|
38
|
+
instance = self.new(id, api_key)
|
39
|
+
instance.refresh
|
40
|
+
return instance
|
41
|
+
end
|
50
42
|
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
43
|
+
def self.create(params={}, api_key=nil)
|
44
|
+
wrapped_params = {}
|
45
|
+
wrapped_params[self.class_name().to_sym] = params
|
46
|
+
response = EasyPost.make_request(:post, self.url, api_key, wrapped_params)
|
47
|
+
return EasyPost::Util.convert_to_easypost_object(response, api_key)
|
48
|
+
end
|
56
49
|
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
50
|
+
def delete
|
51
|
+
response = EasyPost.make_request(:delete, url, @api_key)
|
52
|
+
refresh_from(response, api_key)
|
53
|
+
return self
|
54
|
+
end
|
55
|
+
|
56
|
+
def save
|
57
|
+
if @unsaved_values.length > 0
|
58
|
+
values = {}
|
59
|
+
@unsaved_values.each { |k| values[k] = @values[k] }
|
61
60
|
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
end
|
61
|
+
for key in @unsaved_values
|
62
|
+
value = values[key]
|
63
|
+
if value.is_a?(EasyPost::EasyPostObject)
|
64
|
+
values[key] = value.flatten_unsaved
|
67
65
|
end
|
66
|
+
end
|
68
67
|
|
69
|
-
|
68
|
+
wrapped_params = {self.class.class_name => values}
|
70
69
|
|
71
|
-
|
72
|
-
|
73
|
-
end
|
74
|
-
return self
|
70
|
+
response = EasyPost.make_request(:put, url, @api_key, wrapped_params)
|
71
|
+
refresh_from(response, api_key)
|
75
72
|
end
|
73
|
+
return self
|
76
74
|
end
|
77
75
|
end
|
data/lib/easypost/scan_form.rb
CHANGED
@@ -1,8 +1,6 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
return Util.convert_to_easypost_object(response, api_key)
|
6
|
-
end
|
1
|
+
class EasyPost::ScanForm < EasyPost::Resource
|
2
|
+
def self.create(params={}, api_key=nil)
|
3
|
+
response = EasyPost.make_request(:post, self.url, api_key, params)
|
4
|
+
return EasyPost::Util.convert_to_easypost_object(response, api_key)
|
7
5
|
end
|
8
6
|
end
|
data/lib/easypost/shipment.rb
CHANGED
@@ -1,120 +1,116 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
class EasyPost::Shipment < EasyPost::Resource
|
2
|
+
def get_rates(params={})
|
3
|
+
response = EasyPost.make_request(:get, url + '/rates', @api_key, params)
|
4
|
+
self.refresh_from(response, @api_key, true)
|
3
5
|
|
4
|
-
|
5
|
-
|
6
|
-
self.refresh_from(response, @api_key, true)
|
6
|
+
return self
|
7
|
+
end
|
7
8
|
|
8
|
-
|
9
|
+
def buy(params={})
|
10
|
+
if params.instance_of?(EasyPost::Rate)
|
11
|
+
temp = params.clone
|
12
|
+
params = {}
|
13
|
+
params[:rate] = temp
|
9
14
|
end
|
10
15
|
|
11
|
-
|
12
|
-
|
13
|
-
temp = params.clone
|
14
|
-
params = {}
|
15
|
-
params[:rate] = temp
|
16
|
-
end
|
16
|
+
response = EasyPost.make_request(:post, url + '/buy', @api_key, params)
|
17
|
+
self.refresh_from(response, @api_key, true)
|
17
18
|
|
18
|
-
|
19
|
-
|
19
|
+
return self
|
20
|
+
end
|
20
21
|
|
21
|
-
|
22
|
+
def insure(params={})
|
23
|
+
if params.is_a?(Integer) || params.is_a?(Float)
|
24
|
+
temp = params.clone
|
25
|
+
params = {}
|
26
|
+
params[:amount] = temp
|
22
27
|
end
|
23
28
|
|
24
|
-
|
25
|
-
|
26
|
-
temp = params.clone
|
27
|
-
params = {}
|
28
|
-
params[:amount] = temp
|
29
|
-
end
|
29
|
+
response = EasyPost.make_request(:post, url + '/insure', @api_key, params)
|
30
|
+
self.refresh_from(response, @api_key, true)
|
30
31
|
|
31
|
-
|
32
|
-
|
32
|
+
return self
|
33
|
+
end
|
33
34
|
|
34
|
-
|
35
|
-
|
35
|
+
def refund(params={})
|
36
|
+
response = EasyPost.make_request(:get, url + '/refund', @api_key, params)
|
37
|
+
self.refresh_from(response, @api_key, true)
|
36
38
|
|
37
|
-
|
38
|
-
|
39
|
-
self.refresh_from(response, @api_key, true)
|
39
|
+
return self
|
40
|
+
end
|
40
41
|
|
41
|
-
|
42
|
+
def print(params={})
|
43
|
+
if params.instance_of?(EasyPost::Printer)
|
44
|
+
return params.print(self.postage_label)
|
42
45
|
end
|
46
|
+
return false
|
47
|
+
end
|
43
48
|
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
+
def label(params={})
|
50
|
+
if params.is_a?(String)
|
51
|
+
temp = params.clone
|
52
|
+
params = {}
|
53
|
+
params[:file_format] = temp
|
49
54
|
end
|
50
55
|
|
51
|
-
|
52
|
-
|
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)
|
56
|
+
response = EasyPost.make_request(:get, url + '/label', @api_key, params)
|
57
|
+
self.refresh_from(response, @api_key, true)
|
60
58
|
|
61
|
-
|
62
|
-
|
59
|
+
return self
|
60
|
+
end
|
63
61
|
|
64
|
-
|
65
|
-
|
62
|
+
def lowest_rate(carriers=[], services=[])
|
63
|
+
lowest = nil
|
66
64
|
|
67
|
-
|
65
|
+
self.get_rates unless self.rates
|
68
66
|
|
69
|
-
|
67
|
+
carriers = EasyPost::Util.normalize_string_list(carriers)
|
70
68
|
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
end
|
69
|
+
negative_carriers = []
|
70
|
+
carriers_copy = carriers.clone
|
71
|
+
carriers_copy.each do |carrier|
|
72
|
+
if carrier[0,1] == '!'
|
73
|
+
negative_carriers << carrier[1..-1]
|
74
|
+
carriers.delete(carrier)
|
78
75
|
end
|
76
|
+
end
|
79
77
|
|
80
|
-
|
78
|
+
services = EasyPost::Util.normalize_string_list(services)
|
81
79
|
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
end
|
80
|
+
negative_services = []
|
81
|
+
services_copy = services.clone
|
82
|
+
services_copy.each do |service|
|
83
|
+
if service[0,1] == '!'
|
84
|
+
negative_services << service[1..-1]
|
85
|
+
services.delete(service)
|
89
86
|
end
|
87
|
+
end
|
88
|
+
|
89
|
+
self.rates.each do |k|
|
90
90
|
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
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
|
91
|
+
rate_carrier = k.carrier.downcase
|
92
|
+
if carriers.size() > 0 && !carriers.include?(rate_carrier)
|
93
|
+
next
|
94
|
+
end
|
95
|
+
if negative_carriers.size() > 0 && negative_carriers.include?(rate_carrier)
|
96
|
+
next
|
112
97
|
end
|
113
98
|
|
114
|
-
|
99
|
+
rate_service = k.service.downcase
|
100
|
+
if services.size() > 0 && !services.include?(rate_service)
|
101
|
+
next
|
102
|
+
end
|
103
|
+
if negative_services.size() > 0 && negative_services.include?(rate_service)
|
104
|
+
next
|
105
|
+
end
|
115
106
|
|
116
|
-
|
107
|
+
if lowest == nil || k.rate.to_f < lowest.rate.to_f
|
108
|
+
lowest = k
|
109
|
+
end
|
117
110
|
end
|
118
111
|
|
112
|
+
raise EasyPost::Error.new('No rates found.') if lowest == nil
|
113
|
+
|
114
|
+
return lowest
|
119
115
|
end
|
120
116
|
end
|