easypost 2.7.2 → 3.1.4
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 +5 -5
- data/.travis.yml +9 -0
- data/CHANGELOG +39 -0
- data/README.md +1 -1
- data/VERSION +1 -1
- data/easypost.gemspec +24 -19
- data/lib/easypost.rb +108 -118
- data/lib/easypost/address.rb +9 -7
- data/lib/easypost/batch.rb +7 -7
- data/lib/easypost/carrier_account.rb +1 -1
- data/lib/easypost/customs_info.rb +5 -0
- data/lib/easypost/customs_item.rb +5 -0
- data/lib/easypost/error.rb +16 -22
- data/lib/easypost/item.rb +1 -1
- data/lib/easypost/object.rb +8 -8
- data/lib/easypost/order.rb +6 -2
- data/lib/easypost/pickup.rb +7 -2
- data/lib/easypost/printer.rb +2 -2
- data/lib/easypost/report.rb +2 -2
- data/lib/easypost/resource.rb +7 -7
- data/lib/easypost/scan_form.rb +1 -1
- data/lib/easypost/shipment.rb +7 -11
- data/lib/easypost/tracker.rb +2 -2
- data/lib/easypost/user.rb +3 -5
- data/lib/easypost/util.rb +10 -45
- data/lib/easypost/webhook.rb +6 -3
- metadata +42 -70
- data/circle.yml +0 -3
- data/spec/address_spec.rb +0 -81
- data/spec/batch_spec.rb +0 -48
- data/spec/carrier_account_spec.rb +0 -121
- data/spec/insurance_spec.rb +0 -69
- data/spec/item_spec.rb +0 -105
- data/spec/order_spec.rb +0 -58
- data/spec/pickup_spec.rb +0 -83
- data/spec/report_spec.rb +0 -59
- data/spec/scan_form_spec.rb +0 -46
- data/spec/shipment_spec.rb +0 -144
- data/spec/spec_helper.rb +0 -10
- data/spec/support/constant.rb +0 -106
- data/spec/tracker_spec.rb +0 -94
- data/spec/user_spec.rb +0 -88
- data/spec/webhook_spec.rb +0 -75
@@ -1,7 +1,7 @@
|
|
1
1
|
module EasyPost
|
2
2
|
class CarrierAccount < Resource
|
3
3
|
def self.types
|
4
|
-
response
|
4
|
+
response = EasyPost.make_request(:get, "/carrier_types", @api_key)
|
5
5
|
return Util.convert_to_easypost_object(response, api_key)
|
6
6
|
end
|
7
7
|
end
|
data/lib/easypost/error.rb
CHANGED
@@ -1,39 +1,33 @@
|
|
1
1
|
module EasyPost
|
2
2
|
class Error < StandardError
|
3
3
|
attr_reader :message
|
4
|
-
attr_reader :
|
4
|
+
attr_reader :status
|
5
|
+
attr_reader :http_status # deprecated
|
5
6
|
attr_reader :http_body
|
6
|
-
attr_reader :json_body
|
7
|
-
attr_reader :param
|
8
7
|
attr_reader :code
|
9
8
|
attr_reader :errors
|
10
9
|
|
11
|
-
def initialize(message=nil,
|
10
|
+
def initialize(message = nil, status = nil, code = nil, errors = nil, http_body = nil)
|
12
11
|
@message = message
|
13
|
-
@
|
12
|
+
@status = status
|
13
|
+
@http_status = status # deprecated
|
14
|
+
@code = code
|
15
|
+
@errors = errors
|
14
16
|
@http_body = http_body
|
15
|
-
@json_body = json_body
|
16
|
-
|
17
|
-
@param = @json_body.fetch(:error, {}).fetch(:param, nil)
|
18
|
-
@code = @json_body.fetch(:error, {}).fetch(:code, nil)
|
19
|
-
@errors = @json_body.fetch(:error, {}).fetch(:errors, nil)
|
20
17
|
|
21
18
|
super(message)
|
22
19
|
end
|
23
20
|
|
24
21
|
def to_s
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
end
|
35
|
-
s
|
22
|
+
"#{code} (#{status}): #{message} #{errors}".strip
|
23
|
+
end
|
24
|
+
|
25
|
+
def ==(other)
|
26
|
+
other.is_a?(Error) &&
|
27
|
+
message == other.message &&
|
28
|
+
status == other.status &&
|
29
|
+
code == other.code &&
|
30
|
+
errors == other.errors
|
36
31
|
end
|
37
32
|
end
|
38
33
|
end
|
39
|
-
|
data/lib/easypost/item.rb
CHANGED
@@ -2,7 +2,7 @@ module EasyPost
|
|
2
2
|
class Item < Resource
|
3
3
|
|
4
4
|
def self.retrieve_reference(params={}, api_key=nil)
|
5
|
-
response
|
5
|
+
response = EasyPost.make_request(:get, url + '/retrieve_reference', api_key, params)
|
6
6
|
return EasyPost::Util::convert_to_easypost_object(response, api_key) if response
|
7
7
|
end
|
8
8
|
|
data/lib/easypost/object.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
require "set"
|
2
|
+
|
1
3
|
module EasyPost
|
2
4
|
class EasyPostObject
|
3
5
|
include Enumerable
|
@@ -22,12 +24,12 @@ module EasyPost
|
|
22
24
|
end
|
23
25
|
|
24
26
|
def to_s(*args)
|
25
|
-
|
27
|
+
JSON.dump(@values)
|
26
28
|
end
|
27
29
|
|
28
|
-
def inspect
|
30
|
+
def inspect
|
29
31
|
id_string = (self.respond_to?(:id) && !self.id.nil?) ? " id=#{self.id}" : ""
|
30
|
-
"#<#{self.class}:#{id_string}> JSON: " +
|
32
|
+
"#<#{self.class}:#{id_string}> JSON: " + to_json
|
31
33
|
end
|
32
34
|
|
33
35
|
def refresh_from(values, api_key, partial=false)
|
@@ -40,15 +42,14 @@ module EasyPost
|
|
40
42
|
end
|
41
43
|
|
42
44
|
values.each do |k, v|
|
43
|
-
@values[k] = Util.convert_to_easypost_object(v, api_key, self, k)
|
45
|
+
@values[k.to_s] = Util.convert_to_easypost_object(v, api_key, self, k)
|
44
46
|
@transient_values.delete(k)
|
45
47
|
@unsaved_values.delete(k)
|
46
48
|
end
|
47
49
|
end
|
48
50
|
|
49
51
|
def [](k)
|
50
|
-
k
|
51
|
-
@values[k]
|
52
|
+
@values[k.to_s]
|
52
53
|
end
|
53
54
|
|
54
55
|
def []=(k, v)
|
@@ -64,7 +65,7 @@ module EasyPost
|
|
64
65
|
end
|
65
66
|
|
66
67
|
def to_json(options = {})
|
67
|
-
|
68
|
+
JSON.dump(@values)
|
68
69
|
end
|
69
70
|
|
70
71
|
def as_json(options = {})
|
@@ -144,6 +145,5 @@ module EasyPost
|
|
144
145
|
end
|
145
146
|
end
|
146
147
|
end
|
147
|
-
|
148
148
|
end
|
149
149
|
end
|
data/lib/easypost/order.rb
CHANGED
@@ -2,7 +2,7 @@ module EasyPost
|
|
2
2
|
class Order < Resource
|
3
3
|
|
4
4
|
def get_rates(params={})
|
5
|
-
response
|
5
|
+
response = EasyPost.make_request(:get, url + '/rates', @api_key, params)
|
6
6
|
self.refresh_from(response, @api_key, true)
|
7
7
|
|
8
8
|
return self
|
@@ -16,11 +16,15 @@ module EasyPost
|
|
16
16
|
params[:service] = temp.service
|
17
17
|
end
|
18
18
|
|
19
|
-
response
|
19
|
+
response = EasyPost.make_request(:post, url + '/buy', @api_key, params)
|
20
20
|
self.refresh_from(response, @api_key, true)
|
21
21
|
|
22
22
|
return self
|
23
23
|
end
|
24
24
|
|
25
|
+
def self.all(filters={}, api_key=nil)
|
26
|
+
raise NotImplementedError.new('Order.all not implemented.')
|
27
|
+
end
|
28
|
+
|
25
29
|
end
|
26
30
|
end
|
data/lib/easypost/pickup.rb
CHANGED
@@ -9,17 +9,22 @@ module EasyPost
|
|
9
9
|
params[:service] = temp.service
|
10
10
|
end
|
11
11
|
|
12
|
-
response
|
12
|
+
response = EasyPost.make_request(:post, url + '/buy', @api_key, params)
|
13
13
|
self.refresh_from(response, @api_key, true)
|
14
14
|
|
15
15
|
return self
|
16
16
|
end
|
17
17
|
|
18
18
|
def cancel(params={})
|
19
|
-
response
|
19
|
+
response = EasyPost.make_request(:post, url + '/cancel', @api_key, params)
|
20
20
|
self.refresh_from(response, @api_key, true)
|
21
21
|
|
22
22
|
return self
|
23
23
|
end
|
24
|
+
|
25
|
+
def self.all(filters={}, api_key=nil)
|
26
|
+
raise NotImplementedError.new('Pickup.all not implemented.')
|
27
|
+
end
|
28
|
+
|
24
29
|
end
|
25
30
|
end
|
data/lib/easypost/printer.rb
CHANGED
@@ -2,7 +2,7 @@ module EasyPost
|
|
2
2
|
class Printer < Resource
|
3
3
|
|
4
4
|
def job
|
5
|
-
response
|
5
|
+
response = EasyPost.make_request(
|
6
6
|
:get, url + '/jobs', @api_key
|
7
7
|
)
|
8
8
|
return EasyPost::Util::convert_to_easypost_object(response, api_key)
|
@@ -15,7 +15,7 @@ module EasyPost
|
|
15
15
|
params[:postage_label] = temp
|
16
16
|
end
|
17
17
|
|
18
|
-
response
|
18
|
+
response = EasyPost.make_request(
|
19
19
|
:post, url + '/print_postage_label', @api_key, params
|
20
20
|
)
|
21
21
|
return true
|
data/lib/easypost/report.rb
CHANGED
@@ -5,7 +5,7 @@ module EasyPost
|
|
5
5
|
wrapped_params = {}
|
6
6
|
wrapped_params[class_name.to_sym] = params
|
7
7
|
|
8
|
-
response
|
8
|
+
response = EasyPost.make_request(:post, url, api_key, params)
|
9
9
|
return Util.convert_to_easypost_object(response, api_key)
|
10
10
|
end
|
11
11
|
|
@@ -24,7 +24,7 @@ module EasyPost
|
|
24
24
|
def self.all(filters={}, api_key=nil)
|
25
25
|
url = "#{self.url}/#{filters[:type]}"
|
26
26
|
|
27
|
-
response
|
27
|
+
response = EasyPost.make_request(:get, url, api_key, filters)
|
28
28
|
return EasyPost::Util::convert_to_easypost_object(response, api_key) if response
|
29
29
|
end
|
30
30
|
end
|
data/lib/easypost/resource.rb
CHANGED
@@ -11,9 +11,9 @@ module EasyPost
|
|
11
11
|
raise NotImplementedError.new('Resource is an abstract class. You should perform actions on its subclasses (Address, Shipment, etc.)')
|
12
12
|
end
|
13
13
|
if(self.class_name[-1..-1] == 's' || self.class_name[-1..-1] == 'h')
|
14
|
-
return "/#{CGI.escape(self.class_name.downcase)}es"
|
14
|
+
return "/v2/#{CGI.escape(self.class_name.downcase)}es"
|
15
15
|
else
|
16
|
-
return "/#{CGI.escape(class_name.downcase)}s"
|
16
|
+
return "/v2/#{CGI.escape(class_name.downcase)}s"
|
17
17
|
end
|
18
18
|
end
|
19
19
|
|
@@ -25,13 +25,13 @@ module EasyPost
|
|
25
25
|
end
|
26
26
|
|
27
27
|
def refresh
|
28
|
-
response
|
28
|
+
response = EasyPost.make_request(:get, url, @api_key, @retrieve_options)
|
29
29
|
refresh_from(response, api_key)
|
30
30
|
return self
|
31
31
|
end
|
32
32
|
|
33
33
|
def self.all(filters={}, api_key=nil)
|
34
|
-
response
|
34
|
+
response = EasyPost.make_request(:get, url, api_key, filters)
|
35
35
|
return Util.convert_to_easypost_object(response, api_key)
|
36
36
|
end
|
37
37
|
|
@@ -44,12 +44,12 @@ module EasyPost
|
|
44
44
|
def self.create(params={}, api_key=nil)
|
45
45
|
wrapped_params = {}
|
46
46
|
wrapped_params[self.class_name().to_sym] = params
|
47
|
-
response
|
47
|
+
response = EasyPost.make_request(:post, self.url, api_key, wrapped_params)
|
48
48
|
return Util.convert_to_easypost_object(response, api_key)
|
49
49
|
end
|
50
50
|
|
51
51
|
def delete
|
52
|
-
response
|
52
|
+
response = EasyPost.make_request(:delete, url, @api_key)
|
53
53
|
refresh_from(response, api_key)
|
54
54
|
return self
|
55
55
|
end
|
@@ -68,7 +68,7 @@ module EasyPost
|
|
68
68
|
|
69
69
|
wrapped_params = {self.class.class_name => values}
|
70
70
|
|
71
|
-
response
|
71
|
+
response = EasyPost.make_request(:put, url, @api_key, wrapped_params)
|
72
72
|
refresh_from(response, api_key)
|
73
73
|
end
|
74
74
|
return self
|
data/lib/easypost/scan_form.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
module EasyPost
|
2
2
|
class ScanForm < Resource
|
3
3
|
def self.create(params={}, api_key=nil)
|
4
|
-
response
|
4
|
+
response = EasyPost.make_request(:post, self.url, api_key, params)
|
5
5
|
return Util.convert_to_easypost_object(response, api_key)
|
6
6
|
end
|
7
7
|
end
|
data/lib/easypost/shipment.rb
CHANGED
@@ -2,7 +2,7 @@ module EasyPost
|
|
2
2
|
class Shipment < Resource
|
3
3
|
|
4
4
|
def get_rates(params={})
|
5
|
-
response
|
5
|
+
response = EasyPost.make_request(:get, url + '/rates', @api_key, params)
|
6
6
|
self.refresh_from(response, @api_key, true)
|
7
7
|
|
8
8
|
return self
|
@@ -15,7 +15,7 @@ module EasyPost
|
|
15
15
|
params[:rate] = temp
|
16
16
|
end
|
17
17
|
|
18
|
-
response
|
18
|
+
response = EasyPost.make_request(:post, url + '/buy', @api_key, params)
|
19
19
|
self.refresh_from(response, @api_key, true)
|
20
20
|
|
21
21
|
return self
|
@@ -28,14 +28,14 @@ module EasyPost
|
|
28
28
|
params[:amount] = temp
|
29
29
|
end
|
30
30
|
|
31
|
-
response
|
31
|
+
response = EasyPost.make_request(:post, url + '/insure', @api_key, params)
|
32
32
|
self.refresh_from(response, @api_key, true)
|
33
33
|
|
34
34
|
return self
|
35
35
|
end
|
36
36
|
|
37
37
|
def refund(params={})
|
38
|
-
response
|
38
|
+
response = EasyPost.make_request(:get, url + '/refund', @api_key, params)
|
39
39
|
self.refresh_from(response, @api_key, true)
|
40
40
|
|
41
41
|
return self
|
@@ -55,7 +55,7 @@ module EasyPost
|
|
55
55
|
params[:file_format] = temp
|
56
56
|
end
|
57
57
|
|
58
|
-
response
|
58
|
+
response = EasyPost.make_request(:get, url + '/label', @api_key, params)
|
59
59
|
self.refresh_from(response, @api_key, true)
|
60
60
|
|
61
61
|
return self
|
@@ -66,9 +66,7 @@ module EasyPost
|
|
66
66
|
|
67
67
|
self.get_rates unless self.rates
|
68
68
|
|
69
|
-
carriers =
|
70
|
-
carriers.map!(&:downcase)
|
71
|
-
carriers.map!(&:strip)
|
69
|
+
carriers = EasyPost::Util.normalize_string_list(carriers)
|
72
70
|
|
73
71
|
negative_carriers = []
|
74
72
|
carriers_copy = carriers.clone
|
@@ -79,9 +77,7 @@ module EasyPost
|
|
79
77
|
end
|
80
78
|
end
|
81
79
|
|
82
|
-
services =
|
83
|
-
services.map!(&:downcase)
|
84
|
-
services.map!(&:strip)
|
80
|
+
services = EasyPost::Util.normalize_string_list(services)
|
85
81
|
|
86
82
|
negative_services = []
|
87
83
|
services_copy = services.clone
|
data/lib/easypost/tracker.rb
CHANGED
@@ -2,13 +2,13 @@ module EasyPost
|
|
2
2
|
class Tracker < Resource
|
3
3
|
def self.create_list(params={}, api_key=nil)
|
4
4
|
url = self.url + '/create_list'
|
5
|
-
response
|
5
|
+
response = EasyPost.make_request(:post, url, api_key, params)
|
6
6
|
return true
|
7
7
|
end
|
8
8
|
|
9
9
|
def self.all_updated(params={}, api_key=nil)
|
10
10
|
url = self.url + '/all_updated'
|
11
|
-
response
|
11
|
+
response = EasyPost.make_request(:get, url, api_key, params)
|
12
12
|
return Util.convert_to_easypost_object(response, api_key)
|
13
13
|
end
|
14
14
|
end
|
data/lib/easypost/user.rb
CHANGED
@@ -1,9 +1,7 @@
|
|
1
1
|
module EasyPost
|
2
2
|
class User < Resource
|
3
3
|
def self.create(params={}, api_key=nil)
|
4
|
-
|
5
|
-
wrapped_params[self.class_name().to_sym] = params
|
6
|
-
response, api_key = EasyPost.request(:post, self.url, api_key, wrapped_params, {}, false)
|
4
|
+
response = EasyPost.make_request(:post, self.url, api_key, {self.class_name.to_sym => params})
|
7
5
|
return Util.convert_to_easypost_object(response, api_key)
|
8
6
|
end
|
9
7
|
|
@@ -14,7 +12,7 @@ module EasyPost
|
|
14
12
|
|
15
13
|
wrapped_params = {user: values}
|
16
14
|
|
17
|
-
response
|
15
|
+
response = EasyPost.make_request(:put, url, @api_key, wrapped_params)
|
18
16
|
refresh_from(response, api_key)
|
19
17
|
end
|
20
18
|
return self
|
@@ -25,7 +23,7 @@ module EasyPost
|
|
25
23
|
end
|
26
24
|
|
27
25
|
def self.all_api_keys
|
28
|
-
response
|
26
|
+
response = EasyPost.make_request(:get, "/api_keys", @api_key)
|
29
27
|
return Util.convert_to_easypost_object(response, api_key)
|
30
28
|
end
|
31
29
|
|
data/lib/easypost/util.rb
CHANGED
@@ -15,6 +15,11 @@ module EasyPost
|
|
15
15
|
end
|
16
16
|
end
|
17
17
|
|
18
|
+
def self.normalize_string_list(lst)
|
19
|
+
lst = lst.is_a?(String) ? lst.split(',') : Array(lst)
|
20
|
+
lst.map(&:to_s).map(&:downcase).map(&:strip)
|
21
|
+
end
|
22
|
+
|
18
23
|
def self.convert_to_easypost_object(response, api_key, parent=nil, name=nil)
|
19
24
|
types = {
|
20
25
|
'Address' => Address,
|
@@ -42,6 +47,8 @@ module EasyPost
|
|
42
47
|
'ShipmentReport' => Report,
|
43
48
|
'PaymentLogReport' => Report,
|
44
49
|
'TrackerReport' => Report,
|
50
|
+
'RefundReport' => Report,
|
51
|
+
'ShipmentInvoiceReport' => Report,
|
45
52
|
'Webhook' => Webhook
|
46
53
|
}
|
47
54
|
|
@@ -70,6 +77,8 @@ module EasyPost
|
|
70
77
|
'shprep' => Report,
|
71
78
|
'plrep' => Report,
|
72
79
|
'trkrep' => Report,
|
80
|
+
'refrep' => Report,
|
81
|
+
'shpinvrep' => Report,
|
73
82
|
'hook' => Webhook
|
74
83
|
}
|
75
84
|
|
@@ -86,7 +95,7 @@ module EasyPost
|
|
86
95
|
cls = prefixes[cls_prefix[0..-2]]
|
87
96
|
end
|
88
97
|
elsif response['id']
|
89
|
-
if response[
|
98
|
+
if response['id'].index('_').nil?
|
90
99
|
cls = EasyPostObject
|
91
100
|
elsif cls_prefix = response['id'][0..response['id'].index('_')]
|
92
101
|
cls = prefixes[cls_prefix[0..-2]]
|
@@ -99,49 +108,5 @@ module EasyPost
|
|
99
108
|
return response
|
100
109
|
end
|
101
110
|
end
|
102
|
-
|
103
|
-
def self.symbolize_names(obj)
|
104
|
-
case obj
|
105
|
-
when Hash
|
106
|
-
result = {}
|
107
|
-
obj.each do |k, v|
|
108
|
-
k = (k.to_sym rescue k) || k
|
109
|
-
obj[k] = symbolize_names(v)
|
110
|
-
end
|
111
|
-
return result
|
112
|
-
when Array
|
113
|
-
return obj.map { |v| symbolize_names(v) }
|
114
|
-
else
|
115
|
-
return obj
|
116
|
-
end
|
117
|
-
end
|
118
|
-
|
119
|
-
def self.url_encode(key)
|
120
|
-
URI.escape(key.to_s, Regexp.new("[^#{URI::PATTERN::UNRESERVED}]"))
|
121
|
-
end
|
122
|
-
|
123
|
-
def self.flatten_params(params, parent_key=nil)
|
124
|
-
result = []
|
125
|
-
if params.is_a?(Hash)
|
126
|
-
params.each do |k, v|
|
127
|
-
calculated_key = parent_key ? "#{parent_key}[#{url_encode(k)}]" : url_encode(k)
|
128
|
-
if v.is_a?(Hash) or v.is_a?(Array)
|
129
|
-
result += flatten_params(v, calculated_key)
|
130
|
-
else
|
131
|
-
result << [calculated_key, v]
|
132
|
-
end
|
133
|
-
end
|
134
|
-
elsif params.is_a?(Array)
|
135
|
-
params.each_with_index do |v, i|
|
136
|
-
calculated_key = parent_key ? "#{parent_key}[#{i}]" : i
|
137
|
-
if v.is_a?(Hash) or v.is_a?(Array)
|
138
|
-
result += flatten_params(v, calculated_key)
|
139
|
-
else
|
140
|
-
result << [calculated_key, v]
|
141
|
-
end
|
142
|
-
end
|
143
|
-
end
|
144
|
-
return result
|
145
|
-
end
|
146
111
|
end
|
147
112
|
end
|