easypost 2.0.0 → 2.0.1

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.
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