easypost 2.0.0 → 2.0.1

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG CHANGED
@@ -0,0 +1,6 @@
1
+ === 2.0.1 2013-07-07
2
+
3
+ * API Addition: Address.create_and_verify returns a verified address in one step.
4
+ * API Addition: Shipment.label forces the creation of additional label formats (pdf, epl2, zpl).
5
+ * API Addition: Shipment.insure purchases insurance for a shipment.
6
+ * Library Update: Added the ability to negatively filter carriers and services with Shipment.lowest_rate (e.g. '!usps').
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- easypost (2.0.0)
4
+ easypost (2.0.1)
5
5
  multi_json (>= 1.0.4, < 2)
6
6
  rest-client (~> 1.4)
7
7
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 2.0.0
1
+ 2.0.1
@@ -6,7 +6,7 @@ require 'easypost/version'
6
6
  Gem::Specification.new do |spec|
7
7
  spec.name = 'easypost'
8
8
  spec.version = EasyPost::VERSION
9
- spec.date = '2013-06-25'
9
+ spec.date = '2013-07-07'
10
10
  spec.summary = 'EasyPost Ruby Client Library'
11
11
  spec.description = 'Client library for accessing the EasyPost shipping API via Ruby.'
12
12
  spec.authors = ['Jon Calhoun', 'Sawyer Bateman']
@@ -5,6 +5,7 @@ require 'rest_client'
5
5
  require 'multi_json'
6
6
 
7
7
  # Resources
8
+ require 'easypost/version'
8
9
  require 'easypost/util'
9
10
  require 'easypost/object'
10
11
  require 'easypost/resource'
@@ -75,7 +76,7 @@ module EasyPost
75
76
  end
76
77
 
77
78
  headers = {
78
- :user_agent => "EasyPost/v2 RubyClient/2.0.0",
79
+ :user_agent => "EasyPost/v2 RubyClient/#{VERSION}",
79
80
  :authorization => "Bearer #{api_key}",
80
81
  :content_type => 'application/x-www-form-urlencoded'
81
82
  }.merge(headers)
@@ -1,6 +1,22 @@
1
1
  module EasyPost
2
2
  class Address < Resource
3
3
 
4
+ def self.create_and_verify(params={})
5
+ wrapped_params = {}
6
+ wrapped_params[self.class_name().to_sym] = params
7
+ response, api_key = EasyPost.request(:post, url + '/create_and_verify', @api_key, wrapped_params)
8
+
9
+ if response.has_key?(:address)
10
+ if response.has_key?(:message)
11
+ response[:address][:message] = response[:message]
12
+ end
13
+ verified_address = EasyPost::Util::convert_to_easypost_object(response[:address], api_key)
14
+ return verified_address
15
+ else
16
+ raise Error.new("Unable to verify address.")
17
+ end
18
+ end
19
+
4
20
  def verify(params={})
5
21
  response, api_key = EasyPost.request(:get, url + '/verify', @api_key, params)
6
22
 
@@ -9,12 +9,31 @@ module EasyPost
9
9
  end
10
10
 
11
11
  def buy(params={})
12
+ if params.instance_of?(EasyPost::Rate)
13
+ temp = params.clone
14
+ params = {}
15
+ params[:rate] = temp
16
+ end
17
+
12
18
  response, api_key = EasyPost.request(:post, url + '/buy', @api_key, params)
13
19
  self.refresh_from(response, @api_key, true)
14
20
 
15
21
  return self
16
22
  end
17
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, api_key = EasyPost.request(:post, url + '/insure', @api_key, params)
32
+ self.refresh_from(response, @api_key, true)
33
+
34
+ return self
35
+ end
36
+
18
37
  def refund(params={})
19
38
  response, api_key = EasyPost.request(:get, url + '/refund', @api_key, params)
20
39
  self.refresh_from(response, @api_key, true)
@@ -22,8 +41,14 @@ module EasyPost
22
41
  return self
23
42
  end
24
43
 
25
- def track(params={})
26
- response, api_key = EasyPost.request(:get, url + '/track', @api_key, params)
44
+ def label(params={})
45
+ if params.is_a?(String)
46
+ temp = params.clone
47
+ params = {}
48
+ params[:file_format] = temp
49
+ end
50
+
51
+ response, api_key = EasyPost.request(:get, url + '/label', @api_key, params)
27
52
  self.refresh_from(response, @api_key, true)
28
53
 
29
54
  return self
@@ -50,11 +75,31 @@ module EasyPost
50
75
  carriers = carriers.split(',')
51
76
  end
52
77
  carriers.map!(&:downcase)
78
+ carriers.map!(&:strip)
79
+
80
+ negative_carriers = []
81
+ carriers_copy = carriers.clone
82
+ carriers_copy.each do |carrier|
83
+ if carrier[0,1] == '!'
84
+ negative_carriers << carrier[1..-1]
85
+ carriers.delete(carrier)
86
+ end
87
+ end
53
88
 
54
89
  if !services.is_a?(Array)
55
90
  services = services.split(',')
56
91
  end
57
92
  services.map!(&:downcase)
93
+ services.map!(&:strip)
94
+
95
+ negative_services = []
96
+ services_copy = services.clone
97
+ services_copy.each do |service|
98
+ if service[0,1] == '!'
99
+ negative_services << service[1..-1]
100
+ services.delete(service)
101
+ end
102
+ end
58
103
 
59
104
  self.rates.each do |k|
60
105
 
@@ -62,11 +107,17 @@ module EasyPost
62
107
  if carriers.size() > 0 && !carriers.include?(rate_carrier)
63
108
  next
64
109
  end
110
+ if negative_carriers.size() > 0 && negative_carriers.include?(rate_carrier)
111
+ next
112
+ end
65
113
 
66
114
  rate_service = k.service.downcase
67
115
  if services.size() > 0 && !services.include?(rate_service)
68
116
  next
69
117
  end
118
+ if negative_services.size() > 0 && negative_services.include?(rate_service)
119
+ next
120
+ end
70
121
 
71
122
  if lowest == nil || k.rate.to_f < lowest.rate.to_f
72
123
  lowest = k
@@ -1,3 +1,3 @@
1
1
  module EasyPost
2
- VERSION = "2.0.0"
2
+ VERSION = "2.0.1"
3
3
  end
@@ -138,4 +138,21 @@ describe EasyPost::Shipment do
138
138
  end
139
139
  end
140
140
 
141
+ describe '#lowest_rate' do
142
+ context 'domestic shipment' do
143
+ before :all do
144
+ @shipment = EasyPost::Shipment.create(
145
+ :from_address => address_california,
146
+ :to_address => address_missouri,
147
+ :parcel => parcel_dimensions
148
+ )
149
+ end
150
+
151
+ it 'filters negative services' do
152
+ rate = @shipment.lowest_rate('USPS', '!MediaMail, !LibraryMail')
153
+
154
+ expect(rate.service).to eql('ParcelSelect')
155
+ end
156
+ end
157
+ end
141
158
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: easypost
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0
4
+ version: 2.0.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2013-06-25 00:00:00.000000000 Z
13
+ date: 2013-07-07 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: rest-client