shippo 2.0.7 → 2.0.8

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
  SHA1:
3
- metadata.gz: 7cf3a2a856cd835b2b6bd4b9dd581be7aa861c1d
4
- data.tar.gz: 9e18225119fd342921378279dd15ef5827bfe4a0
3
+ metadata.gz: fd31fa476553d97988451c18460953d23d7f5aa6
4
+ data.tar.gz: f02f1f23ba6177ecc8b7db13ae3fdfb696a5684e
5
5
  SHA512:
6
- metadata.gz: 8a4516e0260ac10b5e4437ccd3603f5f69384422a1ff9f57dd014e0b28dc20419ff455e2a334024c9d7482b5940197ef3ac6b9bf1ceb783633d8904dadbab043
7
- data.tar.gz: d103a9d4cf47d126303892dac1281c84e3813525597eca4c8640bfa69f11f21e5ace1f81d5e6081adc963155ae8896e23dab1d7d29f2c8c0069d314eed7a6e4e
6
+ metadata.gz: be7319563465cddd71b074bd6562bbe5d34ea428d7ca027d48fec7798fd2019eab6798f2c08d4551129a00cb1dea26f669fd6a61a25e87a54379a9eafe340532
7
+ data.tar.gz: 308b45777bb9b65fb19b41cadab55883ac46689c0283525408212b03e4e04d0d57744b58b1fc86ed076aea1f8f5770d26bd311a34b1be1e4de476328d11af8cb
@@ -1,3 +1,16 @@
1
+ ### 2.0.8 release, Feb 15th, 2017
2
+ - Add Batch API with example code
3
+ - Creation
4
+ - Retrieval
5
+ - Adding shipments to Batch objects
6
+ - Removing shipments from Batch objects
7
+ - Purchasing
8
+ - Add Track API with example code
9
+ - Retrieving tracking status of a shipment
10
+ - Registering a tracking webhook
11
+ - Add mock tests using VCR (for Batch and Track API)
12
+ - https://github.com/vcr/vcr
13
+
1
14
  ### 2.0.7 release, Jan 2nd, 2017
2
15
  - Fixed bug preventing address validation
3
16
  - Removed trailing slash from base URL, added spec test to ensure this configuration
@@ -5,9 +18,11 @@
5
18
  - Updated basic shipment example to include how to access the Shippo object id
6
19
  ### 2.0.6 release, Nov 22nd, 2016
7
20
  - Fixed bug to send request with correct API version header
21
+
8
22
  #### 2.0.5 release, Oct 24th, 2016
9
23
  - Updated README.md
10
24
  - now possible to send API version
25
+
11
26
  #### 2.0.4 release, Oct 6th 2016
12
27
  - Rails5 Compatibility via relaxed dependencies
13
28
  - removing mime-types dependency
data/README.md CHANGED
@@ -183,13 +183,17 @@ Shippo API returns several generalized fields for each valid resource, that bein
183
183
 
184
184
  Unfortunately Shippo API also returns `object_id`, which in Ruby has a special meaning: it's the pointer address of any object. Overwriting this field causes all sorts of issues.
185
185
 
186
- For this reason we are mapping `object_id` to `resource_id`, as soon as the hash is passed in to initialize `ApiObject`.
186
+ For this reason we are mapping `object_id` to `resource_id`, as soon as the hash is passed in to initialize `ApiObject`. This way `object_id` continues to be used as a ruby internal field, and can be accessed as expected:
187
187
 
188
- The following console output demonstrates many ways of accessing `object_` fields:
188
+ > In the example below, `object_id` does not refer to any API field, and is a ruby internal field.
189
189
 
190
190
  ```ruby
191
191
  @shipment.object_id # this is the Ruby object pointer
192
192
  # ⤷ 70206221831520
193
+ ```
194
+ To access the `"object_id"` field retrieved with the API, see the following session that highlights many ways of accessing `object_id` field:
195
+
196
+ ```ruby
193
197
  @shipment.resource_id # this is the API id (note: deprecated accessor)
194
198
  # ⤷ 20f25e44b16b4051b6dd910cb66fd27b
195
199
  @shipment.object.id # which is actually just this
@@ -198,7 +202,7 @@ The following console output demonstrates many ways of accessing `object_` field
198
202
  # ⤷ 20f25e44b16b4051b6dd910cb66fd27b
199
203
  ```
200
204
 
201
- And with the rest of the `object_` fields:
205
+ Finally, here is how we access the rest of the `object_` fields:
202
206
 
203
207
  ``` ruby
204
208
  @shipment.object.owner # this is whether 'object_owner' is stored
@@ -0,0 +1,211 @@
1
+ #!/usr/bin/env ruby
2
+ #
3
+ # © 2016 Shippo, Inc.
4
+ #
5
+ # License: MIT
6
+ #
7
+ # This example demonstrates how to get the tracking status of a shipment
8
+ # Please set +SHIPPO_TOKEN+ in the environment before running it.
9
+ #
10
+ # You can also set +SHIPPO_DEBUG+ to see detailed printouts of objects returned.
11
+ #
12
+ #
13
+
14
+ lib = File.expand_path('../../lib', __FILE__)
15
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
16
+
17
+ require 'bundler/setup'
18
+ require 'shippo'
19
+ require 'shippo/api/category'
20
+ require 'shippo/exceptions/api_error'
21
+ require 'awesome_print'
22
+ require 'json'
23
+
24
+ Shippo::API.token = ENV['SHIPPO_TOKEN']
25
+ Hashie.logger = Logger.new(nil)
26
+
27
+ # Simple wrapper class to help us print objects to the STDOUT
28
+ class ExampleHelper
29
+ def self.log_operation(msg)
30
+ printf "%s", msg
31
+ result = yield
32
+ print "OK\n"
33
+ result
34
+ rescue Exception => e
35
+ raise(e)
36
+ end
37
+
38
+ def self.dump_object(instance, msg = nil)
39
+ return unless Shippo::API.debug?
40
+ sep
41
+ puts "#{msg.upcase}:" if msg
42
+ puts "\#<#{instance.class.inspect}:0x#{instance.object_id.to_s(16)}> ⇒ "
43
+ ap instance
44
+ sep
45
+ # See https://github.com/goshippo/shippo-ruby-client#resource-id-and-other-object-fields
46
+ puts "Shippo object id: #{instance.object.id}"
47
+ sep
48
+ end
49
+
50
+ def self.sep
51
+ puts '—' * (ENV['COLUMNS'] || 80)
52
+ end
53
+
54
+ # Retries up to 10 times to retrieve a valid
55
+ # Batch (which takes time to become 'VALID' from
56
+ # 'VALIDATING' after initially being created).
57
+ def self.retrieve_valid_batch(id)
58
+ retries = 10
59
+ retrieve = nil
60
+ until retries == 0 do
61
+ sleep 1
62
+ retrieve = Shippo::Batch::get(id)
63
+ break if retrieve[:object_status] == 'VALID'
64
+ retries -= 1
65
+ end
66
+ STDERR.puts 'Unable to retrieve VALID Batch object' unless retrieve
67
+ retrieve
68
+ end
69
+ end
70
+
71
+ # Create address_from object
72
+ address_from = {
73
+ :object_purpose => 'PURCHASE',
74
+ :name => 'Mr Hippo',
75
+ :company => 'Shippo',
76
+ :street1 => '215 Clayton St.',
77
+ :street2 => '',
78
+ :city => 'San Francisco',
79
+ :state => 'CA',
80
+ :zip => '94117',
81
+ :country => 'US',
82
+ :phone => '+1 555 341 9393',
83
+ :email => 'support@goshippo.com' }
84
+
85
+ # Create address_to object
86
+ address_to = {
87
+ :object_purpose => 'PURCHASE',
88
+ :name => 'Mrs Hippo"',
89
+ :company => 'San Diego Zoo',
90
+ :street1 => '2920 Zoo Drive',
91
+ :city => 'San Diego',
92
+ :state => 'CA',
93
+ :zip => '92101',
94
+ :country => 'US',
95
+ :phone => '+1 555 341 9393',
96
+ :email => 'hippo@goshippo.com' }
97
+
98
+ # Create parcel object
99
+ parcel = {
100
+ :length => 5,
101
+ :width => 2,
102
+ :height => 5,
103
+ :distance_unit => :in,
104
+ :weight => 2,
105
+ :mass_unit => :lb }
106
+
107
+ default_carrier_account = ENV['SHIPPO_TEST_CARRIER_ACCOUNT']
108
+ if !default_carrier_account
109
+ STDERR.puts 'Please set your SHIPPO_TEST_CARRIER_ACCOUNT environment variable.'
110
+ STDERR.puts
111
+ STDERR.puts 'You can do this by setting it to your USPS carrier account object ID:
112
+
113
+ Steps
114
+ --------------------------------------------------------------
115
+ 1. curl https://api.goshippo.com/carrier_accounts/ \
116
+ -H "Authorization: ShippoToken <TEST_API_TOKEN>"
117
+
118
+ 2. Look for {"carrier": "usps"} and find its "object_id"
119
+
120
+ 3. export SHIPPO_TEST_CARRIER_ACCOUNT=<USPS_CARRIER_OBJECT_ID>
121
+ --------------------------------------------------------------
122
+ '
123
+ STDERR.puts
124
+ exit 1
125
+ end
126
+ hash = { :default_carrier_account => default_carrier_account,
127
+ :default_servicelevel_token => 'usps_priority',
128
+ :label_filetype => 'ZPLII',
129
+ :metadata => 'BATCH #170',
130
+ :batch_shipments => [
131
+ {
132
+ :shipment => {
133
+ :object_purpose => 'PURCHASE',
134
+ :address_from => address_from,
135
+ :address_to => address_to,
136
+ :parcel => parcel,
137
+ :async => false
138
+ }
139
+ }
140
+ ]
141
+ }
142
+
143
+ shipment_params = { :object_purpose => 'PURCHASE',
144
+ :address_from => address_from,
145
+ :address_to => address_to,
146
+ :parcel => parcel,
147
+ :async => false }
148
+
149
+ begin
150
+ batch = ExampleHelper.log_operation 'Making first API call to create a batch...' do
151
+ Shippo::Batch.create(hash)
152
+ end
153
+
154
+ retrieve = ExampleHelper.log_operation 'Making API call to retrieve newly created batch...' do
155
+ ExampleHelper.retrieve_valid_batch(batch[:object_id])
156
+ end
157
+ puts "Batch status : #{retrieve[:object_status]}"
158
+ puts "metadata : #{retrieve[:metadata]}"
159
+ puts "Batch shipment count = #{retrieve[:batch_shipments][:count]}"
160
+ puts
161
+
162
+ shipment = ExampleHelper.log_operation 'Making API call to create a shipment... ' do
163
+ Shippo::Shipment.create(shipment_params)
164
+ end
165
+ raise Shippo::Exceptions::UnsuccessfulResponseError.new(shipment.object.inspect) unless shipment.success?
166
+ File.open('example-shipment.json', 'w') do |file|
167
+ file.puts JSON.dump(shipment.to_hash)
168
+ end
169
+
170
+ # Adding shipments
171
+ shipments = Array.new
172
+ shipments.push({"shipment" => shipment[:object_id]})
173
+ added = ExampleHelper.log_operation 'Making API call to add a new shipment to batch...' do
174
+ Shippo::Batch::add_shipment(retrieve[:object_id], shipments)
175
+ end
176
+ puts "Batch shipment count = #{added[:batch_shipments][:count]}"
177
+ puts
178
+
179
+ # Removing shipments
180
+ shipments_to_remove = Array.new
181
+ shipments_to_remove.push(added.batch_shipments.results[0][:object_id])
182
+ removed = ExampleHelper.log_operation 'Making API call to remove the new shipment from batch...' do
183
+ Shippo::Batch::remove_shipment(retrieve[:object_id], shipments_to_remove)
184
+ end
185
+ puts "Batch shipment count = #{removed[:batch_shipments][:count]}"
186
+ puts
187
+
188
+ # Purchasing a batch
189
+ purchase = ExampleHelper.log_operation 'Making API call to purchase a batch...' do
190
+ Shippo::Batch::purchase(retrieve[:object_id])
191
+ end
192
+ puts "Batch status = #{purchase[:object_status]}"
193
+ puts
194
+
195
+ rescue Shippo::Exceptions::APIServerError => e
196
+ puts "Server returned an error:\n#{e}"
197
+ exit 3
198
+ rescue Shippo::Exceptions::ConnectionError
199
+ puts 'Error connecting to remote host. Is your Internet working?'
200
+ exit 2
201
+ rescue Shippo::Exceptions::AuthenticationError
202
+ if Shippo::API.token
203
+ puts "Token '#{Shippo::API.token}' does not appear to be valid."
204
+ puts 'Access denied.'
205
+ else
206
+ puts 'Please set authentication token in the environment:'
207
+ puts 'export SHIPPO_TOKEN="<your token here>"'
208
+ puts 'and re-run the example.'
209
+ end
210
+ exit 1
211
+ end
@@ -0,0 +1,131 @@
1
+ #!/usr/bin/env ruby
2
+ #
3
+ # © 2016 Shippo, Inc.
4
+ #
5
+ # License: MIT
6
+ #
7
+ # This example demonstrates how to get the tracking status of a shipment
8
+ # Please set +SHIPPO_TOKEN+ in the environment before running it.
9
+ #
10
+ # You can also set +SHIPPO_DEBUG+ to see detailed printouts of objects returned.
11
+ #
12
+ #
13
+
14
+ lib = File.expand_path('../../lib', __FILE__)
15
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
16
+
17
+ require 'bundler/setup'
18
+ require 'shippo'
19
+ require 'shippo/api/category'
20
+ require 'shippo/exceptions/api_error'
21
+ require 'awesome_print'
22
+ require 'json'
23
+
24
+ Shippo::API.token = ENV['SHIPPO_TOKEN']
25
+ Hashie.logger = Logger.new(nil)
26
+
27
+ # Simple wrapper class to help us print objects to the STDOUT
28
+ class ExampleHelper
29
+ def self.log_operation(msg)
30
+ printf '%s', msg
31
+ result = yield
32
+ printf "OK\n"
33
+ result
34
+ rescue Exception => e
35
+ raise(e)
36
+ end
37
+
38
+ def self.dump_object(instance, msg = nil)
39
+ return unless Shippo::API.debug?
40
+ sep
41
+ puts "#{msg.upcase}:" if msg
42
+ puts "\#<#{instance.class.inspect}:0x#{instance.object_id.to_s(16)}> ⇒ "
43
+ ap instance
44
+ sep
45
+ # See https://github.com/goshippo/shippo-ruby-client#resource-id-and-other-object-fields
46
+ puts "Shippo object id: #{instance.object.id}"
47
+ sep
48
+ end
49
+
50
+ def self.sep
51
+ puts '—' * (ENV['COLUMNS'] || 80)
52
+ end
53
+ end
54
+
55
+ # Create address_from object
56
+ address_from = {
57
+ :object_purpose => 'PURCHASE',
58
+ :name => 'Mr Hippo',
59
+ :company => 'Shippo',
60
+ :street1 => '215 Clayton St.',
61
+ :street2 => '',
62
+ :city => 'San Francisco',
63
+ :state => 'CA',
64
+ :zip => '94117',
65
+ :country => 'US',
66
+ :phone => '+1 555 341 9393',
67
+ :email => 'support@goshippo.com' }
68
+
69
+ # Create address_to object
70
+ address_to = {
71
+ :object_purpose => 'PURCHASE',
72
+ :name => 'Mrs Hippo"',
73
+ :company => 'San Diego Zoo',
74
+ :street1 => '2920 Zoo Drive',
75
+ :city => 'San Diego',
76
+ :state => 'CA',
77
+ :zip => '92101',
78
+ :country => 'US',
79
+ :phone => '+1 555 341 9393',
80
+ :email => 'hippo@goshippo.com' }
81
+
82
+ # Create parcel object
83
+ parcel = {
84
+ :length => 5,
85
+ :width => 2,
86
+ :height => 5,
87
+ :distance_unit => :in,
88
+ :weight => 2,
89
+ :mass_unit => :lb }
90
+
91
+ hash = { :object_purpose => 'PURCHASE',
92
+ :address_from => address_from,
93
+ :address_to => address_to,
94
+ :parcel => parcel,
95
+ :async => false }
96
+
97
+ begin
98
+ shipment = ExampleHelper.log_operation 'Making first API call for shipment rates...' do
99
+ Shippo::Shipment.create(hash)
100
+ end
101
+ track = ExampleHelper.log_operation 'Making API call to retrieve tracking status...' do
102
+ Shippo::Track.get(shipment[:object_id], 'usps')
103
+ end
104
+ raise Shippo::Exceptions::UnsuccessfulResponseError.new(shipment.object.inspect) unless shipment.success?
105
+ File.open('example-shipment.json', 'w') do |file|
106
+ file.puts JSON.dump(shipment.to_hash)
107
+ end
108
+ rescue Shippo::Exceptions::APIServerError => e
109
+ puts "Server returned an error:\n#{e}"
110
+ exit 3
111
+ rescue Shippo::Exceptions::ConnectionError
112
+ puts 'Error connecting to remote host. Is your Internet working?'
113
+ exit 2
114
+ rescue Shippo::Exceptions::AuthenticationError
115
+ if Shippo::API.token
116
+ puts "Token '#{Shippo::API.token}' does not appear to be valid."
117
+ puts 'Access denied.'
118
+ else
119
+ puts 'Please set authentication token in the environment:'
120
+ puts 'export SHIPPO_TOKEN="<your token here>"'
121
+ puts 'and re-run the example.'
122
+ end
123
+ exit 1
124
+ end
125
+
126
+ if track
127
+ puts "Carrier : #{track[:carrier]}"
128
+ puts "Tracking NO : #{track[:tracking_number]}"
129
+ else
130
+ puts 'Track ERROR'
131
+ end
@@ -78,7 +78,7 @@ module Shippo
78
78
 
79
79
  # list of allowed properties, of a given type.
80
80
  PROPS_ID = %i(id).freeze
81
- PROPS_CATEG = %i(state purpose source status).freeze
81
+ PROPS_CATEG = %i(state purpose source status results).freeze
82
82
  PROPS_EMAIL = %i(owner).freeze
83
83
  PROPS_TIMED = %i(created updated).freeze
84
84
 
@@ -0,0 +1,38 @@
1
+ module Shippo
2
+ module API
3
+ module Operations
4
+ module Batch
5
+ # Retrieves a Batch by its ID
6
+ # @param [String] id The ID of the Batch object
7
+ # @param [Hash] params Optional params tacked onto the URL as URI parameters
8
+ def get(id, params={})
9
+ response = Shippo::API.get("#{url}/#{CGI.escape(id)}", params)
10
+ self.from(response)
11
+ end
12
+
13
+ # Adds a new shipment to a batch object
14
+ # @param [String] id The ID of the Batch object
15
+ # @param [Array] shipments Array of shipment objects to be added
16
+ def add_shipment(id, shipments=[])
17
+ response = Shippo::API.post("#{url}/#{CGI.escape(id)}/add_shipments", shipments)
18
+ self.from(response)
19
+ end
20
+
21
+ # Removes an existing shipment from a batch object
22
+ # @param [String] id The ID of the Batch object
23
+ # @param [Array] shipment_ids Array of shipment IDs to be removed
24
+ def remove_shipment(id, shipment_ids=[])
25
+ response = Shippo::API.post("#{url}/#{CGI.escape(id)}/remove_shipments", shipment_ids)
26
+ self.from(response)
27
+ end
28
+
29
+ # Purchases an existing batch
30
+ # @param [String] id The ID of the Batch object
31
+ def purchase(id)
32
+ response = Shippo::API.post("#{url}/#{CGI.escape(id)}/purchase")
33
+ self.from(response)
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,15 @@
1
+ module Shippo
2
+ module API
3
+ module Operations
4
+ module Track
5
+ # Retrieves tracking status of a shipment
6
+ # @param [Fixnum] id Database ID of the shipment to be received
7
+ # @param [String] carrier The carrier of the item to be received
8
+ def get(id, carrier)
9
+ response = Shippo::API.get("#{url}/#{CGI.escape(carrier)}/#{CGI.escape(id)}/")
10
+ self.from(response)
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
@@ -19,6 +19,8 @@ module Shippo
19
19
  include Enumerable
20
20
  extend Forwardable
21
21
 
22
+ disable_warnings
23
+
22
24
  def self.object_properties
23
25
  Shippo::API::ApiObject::PROPS
24
26
  end
@@ -62,7 +64,7 @@ module Shippo
62
64
 
63
65
  # As a Hashie::Mash subclass, Resource can initialize from another hash
64
66
  def initialize(*args)
65
- if args.first.is_a?(Fixnum) or
67
+ if args.first.is_a?(Integer) or
66
68
  (args.first.is_a?(String) && args.first =~ /^[0-9A-Fa-f]+$/)
67
69
  self.id = args.first
68
70
  elsif args.first.respond_to?(:keys)
@@ -1,5 +1,5 @@
1
1
  module Shippo
2
2
  module API
3
- VERSION = '2.0.7'
3
+ VERSION = '2.0.8'
4
4
  end
5
5
  end
@@ -0,0 +1,5 @@
1
+ module Shippo
2
+ class Batch < ::Shippo::API::Resource
3
+ operations :create, :batch
4
+ end
5
+ end
@@ -0,0 +1,5 @@
1
+ module Shippo
2
+ class Track < ::Shippo::API::Resource
3
+ operations :create, :track
4
+ end
5
+ end
@@ -28,4 +28,6 @@ Gem::Specification.new do |spec|
28
28
  spec.add_development_dependency 'guard-rspec'
29
29
  spec.add_development_dependency 'yard'
30
30
  spec.add_development_dependency 'rspec', '~> 3.4'
31
+ spec.add_development_dependency 'webmock', '~> 2.1'
32
+ spec.add_development_dependency 'vcr', '~> 3.0', '>= 3.0.3'
31
33
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: shippo
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.7
4
+ version: 2.0.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Shippo & Contributors
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2017-01-24 00:00:00.000000000 Z
12
+ date: 2017-02-16 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rest-client
@@ -165,6 +165,40 @@ dependencies:
165
165
  - - "~>"
166
166
  - !ruby/object:Gem::Version
167
167
  version: '3.4'
168
+ - !ruby/object:Gem::Dependency
169
+ name: webmock
170
+ requirement: !ruby/object:Gem::Requirement
171
+ requirements:
172
+ - - "~>"
173
+ - !ruby/object:Gem::Version
174
+ version: '2.1'
175
+ type: :development
176
+ prerelease: false
177
+ version_requirements: !ruby/object:Gem::Requirement
178
+ requirements:
179
+ - - "~>"
180
+ - !ruby/object:Gem::Version
181
+ version: '2.1'
182
+ - !ruby/object:Gem::Dependency
183
+ name: vcr
184
+ requirement: !ruby/object:Gem::Requirement
185
+ requirements:
186
+ - - "~>"
187
+ - !ruby/object:Gem::Version
188
+ version: '3.0'
189
+ - - ">="
190
+ - !ruby/object:Gem::Version
191
+ version: 3.0.3
192
+ type: :development
193
+ prerelease: false
194
+ version_requirements: !ruby/object:Gem::Requirement
195
+ requirements:
196
+ - - "~>"
197
+ - !ruby/object:Gem::Version
198
+ version: '3.0'
199
+ - - ">="
200
+ - !ruby/object:Gem::Version
201
+ version: 3.0.3
168
202
  description: A gem for connecting with over 20 shipping carriers and consolidators
169
203
  via a single integration using Shippo API. Support for shipping rates, buying and
170
204
  printing labels, tracking as well as some carrier specific functionality such as
@@ -190,7 +224,9 @@ files:
190
224
  - Rakefile
191
225
  - bin/address_validation_example
192
226
  - bin/basic_shipment_example
227
+ - bin/batch_example
193
228
  - bin/console
229
+ - bin/track_example
194
230
  - lib/shippo.rb
195
231
  - lib/shippo/api.rb
196
232
  - lib/shippo/api/api_object.rb
@@ -204,9 +240,11 @@ files:
204
240
  - lib/shippo/api/extend/transformers.rb
205
241
  - lib/shippo/api/extend/url.rb
206
242
  - lib/shippo/api/operations.rb
243
+ - lib/shippo/api/operations/batch.rb
207
244
  - lib/shippo/api/operations/create.rb
208
245
  - lib/shippo/api/operations/list.rb
209
246
  - lib/shippo/api/operations/rates.rb
247
+ - lib/shippo/api/operations/track.rb
210
248
  - lib/shippo/api/operations/update.rb
211
249
  - lib/shippo/api/operations/validate.rb
212
250
  - lib/shippo/api/request.rb
@@ -218,6 +256,7 @@ files:
218
256
  - lib/shippo/exceptions/api_server_error.rb
219
257
  - lib/shippo/exceptions/error.rb
220
258
  - lib/shippo/model/address.rb
259
+ - lib/shippo/model/batch.rb
221
260
  - lib/shippo/model/carrieraccount.rb
222
261
  - lib/shippo/model/customs_declaration.rb
223
262
  - lib/shippo/model/customs_item.rb
@@ -226,6 +265,7 @@ files:
226
265
  - lib/shippo/model/rate.rb
227
266
  - lib/shippo/model/refund.rb
228
267
  - lib/shippo/model/shipment.rb
268
+ - lib/shippo/model/track.rb
229
269
  - lib/shippo/model/transaction.rb
230
270
  - lib/shippo/tasks/shippo.rb
231
271
  - shippo.gemspec
@@ -250,7 +290,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
250
290
  version: '0'
251
291
  requirements: []
252
292
  rubyforge_project:
253
- rubygems_version: 2.6.9
293
+ rubygems_version: 2.6.8
254
294
  signing_key:
255
295
  specification_version: 4
256
296
  summary: API client for Shippo® APIs. Shippo helps you connect with multiple carriers