easypost 3.1.4 → 3.1.5

Sign up to get free protection for your applications and to get access to all the features.
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