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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 3f2b1945f7283b88880be5fa9700332289d7007137056113d6223a61e59be79a
4
- data.tar.gz: a168444a606c919ca7a5f1a940040b2822d25ee88d555ca7a11fb289a3e06962
3
+ metadata.gz: b9e4ea3a1f185f475aac49ab7985092a8ba095e928a812ad77c68eb7b450afdc
4
+ data.tar.gz: b1291c1f7325559896f109257231fba6f0e781e7f9778c619ec115a86abf9731
5
5
  SHA512:
6
- metadata.gz: e53924a901d7dc9f25272991d589d7c08b1f28ccba941792925d9fd6ad8b65a57568caf5a15062e227086a2c9d997d85d72d655b21c1be08addc47093a956bff
7
- data.tar.gz: 6bf95b960ec71c8b79effae947a38fd11a902fba63d98db28b6f7d448a05b4914f7f8a56ffc33452d8660e5898b60a0f953de10f7be0764b9b2b40058034ec4c
6
+ metadata.gz: f3c88ce92a498fa4a0bb45e4d0ca06aeee55158af398632ddce04c0513b0e3dae99f27d1d752f3fb6e69daf3cc536d3872c4c18ba141e20eab9e60fdc58872ae
7
+ data.tar.gz: ec5ec3ad97341782372ba9c7b3e836b451a8c23dd5b9bf27e51dfcfeb561eb1140751c9529b13bbe8b384151ac5023628dff6803fe70a57a4b34070b1d83d64a
data/CHANGELOG CHANGED
@@ -1,3 +1,9 @@
1
+ === 3.1.5 2020-12-16
2
+
3
+ * Fix attribute lookup when manually constructing objects (#105; thanks @drewtempelmeyer)
4
+ * Flatten class names and clean up some other style issues
5
+ * Fix `EasyPost::Address.create_and_verify`, broken since 3.1.0 (#108; thanks @rajbirverma)
6
+
1
7
  === 3.1.4 2020-09-29
2
8
 
3
9
  * Don't modify params passed into Address#create (#78; thanks @TheRusskiy)
data/README.md CHANGED
@@ -1,6 +1,7 @@
1
1
  # EasyPost Ruby Client Library
2
2
 
3
3
  [![Build Status](https://travis-ci.com/EasyPost/easypost-ruby.svg?branch=master)](https://travis-ci.com/EasyPost/easypost-ruby)
4
+ [![Gem Version](https://badge.fury.io/rb/easypost.svg)](https://badge.fury.io/rb/easypost)
4
5
 
5
6
 
6
7
  EasyPost is a simple shipping API. You can sign up for an account at https://easypost.com
data/VERSION CHANGED
@@ -1 +1 @@
1
- 3.1.4
1
+ 3.1.5
@@ -118,7 +118,7 @@ module EasyPost
118
118
 
119
119
  request = Net::HTTP.const_get(method.capitalize).new(path)
120
120
  if body
121
- request.body = JSON.dump(Util.objects_to_ids(body))
121
+ request.body = JSON.dump(EasyPost::Util.objects_to_ids(body))
122
122
  end
123
123
 
124
124
  request["Content-Type"] = "application/json"
@@ -131,7 +131,7 @@ module EasyPost
131
131
 
132
132
  if (400..599).include? response.code.to_i
133
133
  error = JSON.parse(response.body)["error"]
134
- raise Error.new(error["message"], response.code.to_i, error["code"], error["errors"], response.body)
134
+ raise EasyPost::Error.new(error["message"], response.code.to_i, error["code"], error["errors"], response.body)
135
135
  end
136
136
 
137
137
  if response["Content-Type"].include? "application/json"
@@ -1,60 +1,58 @@
1
- module EasyPost
2
- class Address < Resource
3
- attr_accessor :message # Backwards compatibility
4
-
5
- def self.create(params={}, api_key=nil)
6
- url = self.url
7
-
8
- address = params.reject { |k,_| k == :verify || k == :verify_strict }
9
-
10
- if params[:verify] || params[:verify_strict]
11
- verify = params[:verify] || []
12
- verify_strict = params[:verify_strict] || []
13
-
14
- url += "?"
15
- verify.each do |verification|
16
- url += "verify[]=#{verification}&"
17
- end
18
- verify_strict.each do |verification|
19
- url += "verify_strict[]=#{verification}&"
20
- end
21
- end
1
+ class EasyPost::Address < EasyPost::Resource
2
+ attr_accessor :message # Backwards compatibility
22
3
 
23
- response = EasyPost.make_request(:post, url, api_key, {address: address})
24
- return Util.convert_to_easypost_object(response, api_key)
25
- end
4
+ def self.create(params={}, api_key=nil)
5
+ url = self.url
6
+
7
+ address = params.reject { |k,_| k == :verify || k == :verify_strict }
8
+
9
+ if params[:verify] || params[:verify_strict]
10
+ verify = params[:verify] || []
11
+ verify_strict = params[:verify_strict] || []
26
12
 
27
- def self.create_and_verify(params={}, carrier=nil, api_key=nil)
28
- wrapped_params = {}
29
- wrapped_params[self.class_name().to_sym] = params
30
- wrapped_params[:carrier] = carrier
31
- response = EasyPost.make_request(:post, url + '/create_and_verify', api_key, wrapped_params)
32
-
33
- if response.has_key?(:address)
34
- if response.has_key?(:message)
35
- response[:address][:message] = response[:message]
36
- end
37
- verified_address = EasyPost::Util::convert_to_easypost_object(response[:address], api_key)
38
- return verified_address
39
- else
40
- raise Error.new("Unable to verify address.")
13
+ url += "?"
14
+ verify.each do |verification|
15
+ url += "verify[]=#{verification}&"
16
+ end
17
+ verify_strict.each do |verification|
18
+ url += "verify_strict[]=#{verification}&"
41
19
  end
42
20
  end
43
21
 
44
- def verify(params={}, carrier=nil)
45
- begin
46
- response = EasyPost.make_request(:get, url + '/verify?carrier=' + String(carrier), @api_key, params)
47
- rescue
48
- raise Error.new("Unable to verify address.")
49
- end
22
+ response = EasyPost.make_request(:post, url, api_key, {address: address})
23
+ return EasyPost::Util.convert_to_easypost_object(response, api_key)
24
+ end
50
25
 
51
- if response.has_key?("address")
52
- return EasyPost::Util::convert_to_easypost_object(response["address"], api_key)
53
- else
54
- raise Error.new("Unable to verify address.")
26
+ def self.create_and_verify(params={}, carrier=nil, api_key=nil)
27
+ wrapped_params = {}
28
+ wrapped_params[self.class_name().to_sym] = params
29
+ wrapped_params[:carrier] = carrier
30
+ response = EasyPost.make_request(:post, url + '/create_and_verify', api_key, wrapped_params)
31
+
32
+ if response.has_key?("address")
33
+ if response.has_key?("message")
34
+ response["address"]["message"] = response["message"]
55
35
  end
36
+ verified_address = EasyPost::Util::convert_to_easypost_object(response["address"], api_key)
37
+ return verified_address
38
+ else
39
+ raise EasyPost::Error.new("Unable to verify address.")
40
+ end
41
+ end
56
42
 
57
- return self
43
+ def verify(params={}, carrier=nil)
44
+ begin
45
+ response = EasyPost.make_request(:get, url + '/verify?carrier=' + String(carrier), @api_key, params)
46
+ rescue
47
+ raise EasyPost::Error.new("Unable to verify address.")
58
48
  end
49
+
50
+ if response.has_key?("address")
51
+ return EasyPost::Util::convert_to_easypost_object(response["address"], api_key)
52
+ else
53
+ raise EasyPost::Error.new("Unable to verify address.")
54
+ end
55
+
56
+ return self
59
57
  end
60
58
  end
@@ -1,53 +1,49 @@
1
- module EasyPost
2
- class Batch < Resource
1
+ class EasyPost::Batch < EasyPost::Resource
2
+ def self.create_and_buy(params={}, api_key=nil)
3
+ wrapped_params = {}
4
+ wrapped_params[self.class_name().to_sym] = params
5
+ response = EasyPost.make_request(:post, url + '/create_and_buy', api_key, wrapped_params)
3
6
 
4
- def self.create_and_buy(params={}, api_key=nil)
5
- wrapped_params = {}
6
- wrapped_params[self.class_name().to_sym] = params
7
- response = EasyPost.make_request(:post, url + '/create_and_buy', api_key, wrapped_params)
8
-
9
- return Util.convert_to_easypost_object(response, api_key)
10
- end
11
-
12
- def buy(params={})
13
- response = EasyPost.make_request(:post, url + '/buy', @api_key, params)
14
- self.refresh_from(response, @api_key, true)
7
+ return EasyPost::Util.convert_to_easypost_object(response, api_key)
8
+ end
15
9
 
16
- return self
17
- end
10
+ def buy(params={})
11
+ response = EasyPost.make_request(:post, url + '/buy', @api_key, params)
12
+ self.refresh_from(response, @api_key, true)
18
13
 
19
- def label(params={})
20
- response = EasyPost.make_request(:post, url + '/label', @api_key, params)
21
- self.refresh_from(response, @api_key, true)
14
+ return self
15
+ end
22
16
 
23
- return self
24
- end
17
+ def label(params={})
18
+ response = EasyPost.make_request(:post, url + '/label', @api_key, params)
19
+ self.refresh_from(response, @api_key, true)
25
20
 
26
- def remove_shipments(params={})
27
- response = EasyPost.make_request(:post, url + '/remove_shipments', @api_key, params)
28
- self.refresh_from(response, @api_key, true)
21
+ return self
22
+ end
29
23
 
30
- return self
31
- end
24
+ def remove_shipments(params={})
25
+ response = EasyPost.make_request(:post, url + '/remove_shipments', @api_key, params)
26
+ self.refresh_from(response, @api_key, true)
32
27
 
33
- def add_shipments(params={})
34
- response = EasyPost.make_request(:post, url + '/add_shipments', @api_key, params)
35
- self.refresh_from(response, @api_key, true)
28
+ return self
29
+ end
36
30
 
37
- return self
38
- end
31
+ def add_shipments(params={})
32
+ response = EasyPost.make_request(:post, url + '/add_shipments', @api_key, params)
33
+ self.refresh_from(response, @api_key, true)
39
34
 
40
- def stamp_and_barcode_by_reference(params={})
41
- response = EasyPost.make_request(:get, url + '/stamp_and_barcode_by_reference', @api_key, params)
35
+ return self
36
+ end
42
37
 
43
- return response
44
- end
38
+ def stamp_and_barcode_by_reference(params={})
39
+ response = EasyPost.make_request(:get, url + '/stamp_and_barcode_by_reference', @api_key, params)
45
40
 
46
- def create_scan_form(params={})
47
- response = EasyPost.make_request(:post, url + '/scan_form', @api_key, params)
41
+ return response
42
+ end
48
43
 
49
- return response
50
- end
44
+ def create_scan_form(params={})
45
+ response = EasyPost.make_request(:post, url + '/scan_form', @api_key, params)
51
46
 
47
+ return response
52
48
  end
53
49
  end
@@ -1,8 +1,6 @@
1
- module EasyPost
2
- class CarrierAccount < Resource
3
- def self.types
4
- response = EasyPost.make_request(:get, "/carrier_types", @api_key)
5
- return Util.convert_to_easypost_object(response, api_key)
6
- end
1
+ class EasyPost::CarrierAccount < EasyPost::Resource
2
+ def self.types
3
+ response = EasyPost.make_request(:get, "/carrier_types", @api_key)
4
+ return EasyPost::Util.convert_to_easypost_object(response, api_key)
7
5
  end
8
6
  end
@@ -1,9 +1,5 @@
1
- module EasyPost
2
- class CustomsInfo < Resource
3
-
4
- def self.all(filters={}, api_key=nil)
5
- raise NotImplementedError.new('CustomsInfo.all not implemented.')
6
- end
7
-
1
+ class EasyPost::CustomsInfo < EasyPost::Resource
2
+ def self.all(filters={}, api_key=nil)
3
+ raise NotImplementedError.new('CustomsInfo.all not implemented.')
8
4
  end
9
5
  end
@@ -1,9 +1,5 @@
1
- module EasyPost
2
- class CustomsItem < Resource
3
-
4
- def self.all(filters={}, api_key=nil)
5
- raise NotImplementedError.new('CustomsItem.all not implemented.')
6
- end
7
-
1
+ class EasyPost::CustomsItem < EasyPost::Resource
2
+ def self.all(filters={}, api_key=nil)
3
+ raise NotImplementedError.new('CustomsItem.all not implemented.')
8
4
  end
9
5
  end
@@ -1,33 +1,31 @@
1
- module EasyPost
2
- class Error < StandardError
3
- attr_reader :message
4
- attr_reader :status
5
- attr_reader :http_status # deprecated
6
- attr_reader :http_body
7
- attr_reader :code
8
- attr_reader :errors
1
+ class EasyPost::Error < StandardError
2
+ attr_reader :message
3
+ attr_reader :status
4
+ attr_reader :http_status # deprecated
5
+ attr_reader :http_body
6
+ attr_reader :code
7
+ attr_reader :errors
9
8
 
10
- def initialize(message = nil, status = nil, code = nil, errors = nil, http_body = nil)
11
- @message = message
12
- @status = status
13
- @http_status = status # deprecated
14
- @code = code
15
- @errors = errors
16
- @http_body = http_body
9
+ def initialize(message = nil, status = nil, code = nil, errors = nil, http_body = nil)
10
+ @message = message
11
+ @status = status
12
+ @http_status = status # deprecated
13
+ @code = code
14
+ @errors = errors
15
+ @http_body = http_body
17
16
 
18
- super(message)
19
- end
17
+ super(message)
18
+ end
20
19
 
21
- def to_s
22
- "#{code} (#{status}): #{message} #{errors}".strip
23
- end
20
+ def to_s
21
+ "#{code} (#{status}): #{message} #{errors}".strip
22
+ end
24
23
 
25
- def ==(other)
26
- other.is_a?(Error) &&
27
- message == other.message &&
28
- status == other.status &&
29
- code == other.code &&
30
- errors == other.errors
31
- end
24
+ def ==(other)
25
+ other.is_a?(EasyPost::Error) &&
26
+ message == other.message &&
27
+ status == other.status &&
28
+ code == other.code &&
29
+ errors == other.errors
32
30
  end
33
31
  end
@@ -1,10 +1,7 @@
1
1
  require 'json'
2
2
 
3
- module EasyPost
4
- class Event < Resource
5
-
6
- def self.receive(values)
7
- return EasyPost::Util::convert_to_easypost_object(JSON.parse(values), nil)
8
- end
3
+ class EasyPost::Event < EasyPost::Resource
4
+ def self.receive(values)
5
+ return EasyPost::Util::convert_to_easypost_object(JSON.parse(values), nil)
9
6
  end
10
7
  end
@@ -1,4 +1,2 @@
1
- module EasyPost
2
- class Insurance < Resource
3
- end
1
+ class EasyPost::Insurance < EasyPost::Resource
4
2
  end
@@ -1,10 +1,6 @@
1
- module EasyPost
2
- class Item < Resource
3
-
4
- def self.retrieve_reference(params={}, api_key=nil)
5
- response = EasyPost.make_request(:get, url + '/retrieve_reference', api_key, params)
6
- return EasyPost::Util::convert_to_easypost_object(response, api_key) if response
7
- end
8
-
1
+ class EasyPost::Item < EasyPost::Resource
2
+ def self.retrieve_reference(params={}, api_key=nil)
3
+ response = EasyPost.make_request(:get, url + '/retrieve_reference', api_key, params)
4
+ return EasyPost::Util::convert_to_easypost_object(response, api_key) if response
9
5
  end
10
6
  end
@@ -1,146 +1,144 @@
1
1
  require "set"
2
2
 
3
- module EasyPost
4
- class EasyPostObject
5
- include Enumerable
6
-
7
- attr_accessor :parent, :name, :api_key, :unsaved_values
8
- @@immutable_values = Set.new([:api_key, :id])
9
-
10
- def initialize(id=nil, api_key=nil, parent=nil, name=nil)
11
- @api_key = api_key
12
- @values = {}
13
- @unsaved_values = Set.new
14
- @transient_values = Set.new
15
- @parent = parent
16
- @name = name
17
- self.id = id if id
18
- end
19
-
20
- def self.construct_from(values, api_key=nil, parent=nil, name=nil)
21
- obj = self.new(values[:id], api_key, parent, name)
22
- obj.refresh_from(values, api_key)
23
- obj
24
- end
3
+ class EasyPost::EasyPostObject
4
+ include Enumerable
5
+
6
+ attr_accessor :parent, :name, :api_key, :unsaved_values
7
+ @@immutable_values = Set.new([:api_key, :id])
8
+
9
+ def initialize(id=nil, api_key=nil, parent=nil, name=nil)
10
+ @api_key = api_key
11
+ @values = {}
12
+ @unsaved_values = Set.new
13
+ @transient_values = Set.new
14
+ @parent = parent
15
+ @name = name
16
+ self.id = id if id
17
+ end
25
18
 
26
- def to_s(*args)
27
- JSON.dump(@values)
28
- end
19
+ def self.construct_from(values, api_key=nil, parent=nil, name=nil)
20
+ obj = self.new(values[:id], api_key, parent, name)
21
+ obj.refresh_from(values, api_key)
22
+ obj
23
+ end
29
24
 
30
- def inspect
31
- id_string = (self.respond_to?(:id) && !self.id.nil?) ? " id=#{self.id}" : ""
32
- "#<#{self.class}:#{id_string}> JSON: " + to_json
33
- end
25
+ def to_s(*args)
26
+ JSON.dump(@values)
27
+ end
34
28
 
35
- def refresh_from(values, api_key, partial=false)
36
- @api_key = api_key
29
+ def inspect
30
+ id_string = (self.respond_to?(:id) && !self.id.nil?) ? " id=#{self.id}" : ""
31
+ "#<#{self.class}:#{id_string}> JSON: " + to_json
32
+ end
37
33
 
38
- added = Set.new(values.keys - @values.keys)
34
+ def refresh_from(values, api_key, partial=false)
35
+ @api_key = api_key
39
36
 
40
- instance_eval do
41
- add_accessors(added)
42
- end
37
+ added = Set.new(values.keys - @values.keys)
43
38
 
44
- values.each do |k, v|
45
- @values[k.to_s] = Util.convert_to_easypost_object(v, api_key, self, k)
46
- @transient_values.delete(k)
47
- @unsaved_values.delete(k)
48
- end
39
+ instance_eval do
40
+ add_accessors(added)
49
41
  end
50
42
 
51
- def [](k)
52
- @values[k.to_s]
43
+ values.each do |k, v|
44
+ @values[k.to_s] = EasyPost::Util.convert_to_easypost_object(v, api_key, self, k)
45
+ @transient_values.delete(k)
46
+ @unsaved_values.delete(k)
53
47
  end
48
+ end
54
49
 
55
- def []=(k, v)
56
- send(:"#{k}=", v)
57
- end
50
+ def [](k)
51
+ @values[k.to_s]
52
+ end
58
53
 
59
- def keys
60
- @values.keys
61
- end
54
+ def []=(k, v)
55
+ send(:"#{k}=", v)
56
+ end
62
57
 
63
- def values
64
- @values.values
65
- end
58
+ def keys
59
+ @values.keys
60
+ end
66
61
 
67
- def to_json(options = {})
68
- JSON.dump(@values)
69
- end
62
+ def values
63
+ @values.values
64
+ end
70
65
 
71
- def as_json(options = {})
72
- @values.as_json
73
- end
66
+ def to_json(options = {})
67
+ JSON.dump(@values)
68
+ end
74
69
 
75
- def to_hash
76
- @values
77
- end
70
+ def as_json(options = {})
71
+ @values.as_json
72
+ end
78
73
 
79
- def each(&blk)
80
- @values.each(&blk)
81
- end
74
+ def to_hash
75
+ @values
76
+ end
82
77
 
83
- def id=(id)
84
- @values[:id] = id
85
- end
78
+ def each(&blk)
79
+ @values.each(&blk)
80
+ end
86
81
 
87
- def id
88
- @values[:id]
89
- end
82
+ def id=(id)
83
+ @values[:id] = id
84
+ end
85
+
86
+ def id
87
+ @values[:id]
88
+ end
90
89
 
91
- protected
90
+ protected
92
91
 
93
- def flatten_unsaved
94
- values = {}
95
- for key in @unsaved_values
96
- value = @values[key]
92
+ def flatten_unsaved
93
+ values = {}
94
+ for key in @unsaved_values
95
+ value = @values[key]
97
96
 
98
- values[key] = value
97
+ values[key] = value
99
98
 
100
- if value.is_a?(EasyPost::EasyPostObject)
101
- values[key] = flatten_unsaved(value)
102
- end
99
+ if value.is_a?(EasyPost::EasyPostObject)
100
+ values[key] = flatten_unsaved(value)
103
101
  end
104
-
105
- return values
106
102
  end
107
103
 
108
- def metaclass
109
- class << self; self; end
110
- end
104
+ return values
105
+ end
111
106
 
112
- def remove_accessors(keys)
113
- metaclass.instance_eval do
114
- keys.each do |k|
115
- next if @@immutable_values.include?(k)
116
- k_eq = :"#{k}="
117
- remove_method(k) if method_defined?(k)
118
- remove_method(k_eq) if method_defined?(k_eq)
119
- end
107
+ def metaclass
108
+ class << self; self; end
109
+ end
110
+
111
+ def remove_accessors(keys)
112
+ metaclass.instance_eval do
113
+ keys.each do |k|
114
+ next if @@immutable_values.include?(k)
115
+ k_eq = :"#{k}="
116
+ remove_method(k) if method_defined?(k)
117
+ remove_method(k_eq) if method_defined?(k_eq)
120
118
  end
121
119
  end
120
+ end
122
121
 
123
- def add_accessors(keys)
124
- metaclass.instance_eval do
125
- keys.each do |k|
126
- next if @@immutable_values.include?(k)
127
- k_eq = :"#{k}="
128
- define_method(k) { @values[k] }
129
- define_method(k_eq) do |v|
130
- @values[k] = v
131
- @unsaved_values.add(k)
132
-
133
- cur = self
134
- cur_parent = self.parent
135
- param = {}
136
- while cur_parent
137
- if cur.name
138
- cur_parent.unsaved_values.add(cur.name)
139
- end
140
-
141
- cur = cur_parent
142
- cur_parent = cur.parent
122
+ def add_accessors(keys)
123
+ metaclass.instance_eval do
124
+ keys.each do |k|
125
+ next if @@immutable_values.include?(k)
126
+ k = k.to_s
127
+ k_eq = :"#{k}="
128
+ define_method(k) { @values[k] }
129
+ define_method(k_eq) do |v|
130
+ @values[k] = v
131
+ @unsaved_values.add(k)
132
+
133
+ cur = self
134
+ cur_parent = self.parent
135
+ while cur_parent
136
+ if cur.name
137
+ cur_parent.unsaved_values.add(cur.name)
143
138
  end
139
+
140
+ cur = cur_parent
141
+ cur_parent = cur.parent
144
142
  end
145
143
  end
146
144
  end