shippo 2.0.3 → 2.0.4

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: 105c04ef4d6f5e4b072873aa6bb6f03efad91223
4
- data.tar.gz: 8dbddd63351b6e198f23fa7aeedad433ac797d96
3
+ metadata.gz: 2f9bf9beca739037960540287dff9d9a95ed04b0
4
+ data.tar.gz: 1dda325c2990112fdea3cc71fcad284a28f8d4a8
5
5
  SHA512:
6
- metadata.gz: 3a9b9fb339fd6138f6c9d6c62e003d8e1cd3aaf885ca3626bc7936aa5066784fbdfa6a3233ef84f0b04407144811f7b0da550adec95fbf570473625f8f32580e
7
- data.tar.gz: 8bf08f6931dd898d0e8516470cb2d8abade37614a425bc782b19132c57cb883844255180443d24cc88631a4239dcd1d4e9f0b7e926e669532280d5ac8ac65e99
6
+ metadata.gz: 039577c829fecb5a060e9ba366a297162ea8ba5a97e4863203e037fb0b0a9c2911243d9ceedfa0537c3be112b06fffa2bb0629ba710084a49ce0a1e1123e590c
7
+ data.tar.gz: 2c79359b3e1bd3842cbce98715bf6548226b1a5a3bdf238301ceaacd8d48bc175e33ff3d5911ba7de42660aa7c2d4c41fad64ab10774a800ee6b3ddfa64ba4fe
data/.gitignore CHANGED
@@ -18,5 +18,4 @@ test/version_tmp
18
18
  tmp
19
19
  vendor/
20
20
  **/.DS_Store
21
-
22
21
  .idea/
@@ -11,6 +11,6 @@ notifications:
11
11
  - shippo:JOD4pUgjGlhSJ1s8mNKUTxKB#devcistatus
12
12
  email:
13
13
  recipients:
14
- - kigster@gmail.com
14
+ - wissam@goshippo.com
15
15
  on_success: change
16
16
  on_failure: always
@@ -1,12 +1,19 @@
1
+ #### 2.0.4 release, Oct 6th 2016
2
+ - Rails5 Compatibility via relaxed dependencies
3
+ - removing mime-types dependency
4
+ - relaxing activesupport to allow version 5
5
+ - reorganizing exceptions to enable subclassing with additional parameters and more readable #to_s method
6
+ - adding bin/console for easy irb-ing
7
+
1
8
  #### 2.0.3 release, Oct 3rd 2016
2
9
 
3
- * Handled RestClient::BadRequest to show response content
10
+ - Handled RestClient::BadRequest to show response content
4
11
 
5
12
  #### 2.0.2 release, Aug 17th 2016
6
13
 
7
- * Removed gem dependency `colored2` as directly decorating object and string was causing Rals Rack to throw errors when users uploaded large files.
8
- * Fixed url for `CarrierAccount`
9
- * README fixes
14
+ - Removed gem dependency `colored2` as directly decorating object and string was causing Rals Rack to throw errors when users uploaded large files.
15
+ - Fixed url for `CarrierAccount`
16
+ - README fixes
10
17
 
11
18
  #### 2.0.0-beta July 7th, 2016
12
19
 
data/Gemfile CHANGED
@@ -1,5 +1,5 @@
1
1
  source 'https://rubygems.org'
2
- gem "codeclimate-test-reporter", group: :test, require: nil
2
+ gem 'codeclimate-test-reporter', group: :test, require: nil
3
3
 
4
4
  # Specify your gem's dependencies in counter-cache.gemspec
5
5
  gemspec
@@ -0,0 +1,17 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ lib = File.expand_path('../../lib', __FILE__)
4
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
5
+
6
+ require 'bundler/setup'
7
+ require 'shippo'
8
+
9
+ # You can add fixtures and/or initialization code here to make experimenting
10
+ # with your gem easier. You can also use a different console, if you like.
11
+
12
+ # (If you use this, don't forget to add pry to your Gemfile!)
13
+ # require "pry"
14
+ # Pry.start
15
+
16
+ require 'irb'
17
+ IRB.start
@@ -22,7 +22,6 @@ require 'awesome_print'
22
22
  require 'json'
23
23
 
24
24
  Shippo::API.token = ENV['SHIPPO_TOKEN']
25
- Shippo::API.debug = false # set to true for debugging output
26
25
 
27
26
  # Simple wrapper class to help us print objects to the STDOUT
28
27
  class ExampleHelper
@@ -32,12 +31,11 @@ class ExampleHelper
32
31
  puts 'OK'
33
32
  result
34
33
  rescue Exception => e
35
- puts 'ERROR'
36
34
  raise(e)
37
35
  end
38
36
 
39
37
  def self.dump_object(instance, msg = nil)
40
- return unless ENV['SHIPPO_DEBUG']
38
+ return unless Shippo::API.debug?
41
39
  sep
42
40
  puts "#{msg.upcase}:" if msg
43
41
  puts "\#<#{instance.class.inspect}:0x#{instance.object_id.to_s(16)}> ⇒ "
@@ -101,7 +99,7 @@ begin
101
99
  file.puts JSON.dump(shipment.to_hash)
102
100
  end
103
101
  rescue Shippo::Exceptions::APIServerError => e
104
- puts "Server returned an error:\n#{e.inspect}"
102
+ puts "Server returned an error:\n#{e}"
105
103
  exit 3
106
104
  rescue Shippo::Exceptions::ConnectionError
107
105
  puts 'Error connecting to remote host. Is your Internet working?'
@@ -33,12 +33,12 @@ module Shippo
33
33
  %i[get put post].each do |method|
34
34
  define_method method do |*args|
35
35
  uri, params, headers = *args
36
- request(method, uri, params || {}, headers || {})
36
+ self.request(method, uri, params || {}, headers || {})
37
37
  end
38
38
  end
39
39
 
40
40
  def debug?
41
- Shippo::API.debug
41
+ self.debug
42
42
  end
43
43
  end
44
44
  end
@@ -47,4 +47,4 @@ end
47
47
  Dir[File.dirname(__FILE__) + '/api/*.rb'].each {|file| require file }
48
48
  Dir[File.dirname(__FILE__) + '/api/transformers/*.rb'].each {|file| require file }
49
49
  Dir[File.dirname(__FILE__) + '/api/extend/*.rb'].each {|file| require file }
50
- Dir[File.dirname(__FILE__) + '/model/*.rb'].each {|file| require file }
50
+ Dir[File.dirname(__FILE__) + '/model/*.rb'].each {|file| require file }
@@ -2,6 +2,7 @@ require 'rest_client'
2
2
  require 'socket'
3
3
  require 'json'
4
4
  require 'set'
5
+ require 'awesome_print'
5
6
 
6
7
  require 'shippo/exceptions'
7
8
 
@@ -58,8 +59,15 @@ module Shippo
58
59
  rescue ::RestClient::Unauthorized => e
59
60
  raise Shippo::Exceptions::AuthenticationError.new(e.message)
60
61
 
61
- rescue ::JSON::JSONError, ::JSON::ParserError
62
- raise Shippo::Exceptions::APIServerError.new('Unable to read data received back from the server', self)
62
+ rescue ::RestClient::BadRequest => e
63
+ if e.respond_to?(:response) && e.response.is_a?(RestClient::Response)
64
+ awesome_print_response(e) if Shippo::API.debug?
65
+ raise Shippo::Exceptions::APIServerError.new('Backend responded with an error',
66
+ self, e.response, e.message)
67
+ end
68
+
69
+ rescue ::JSON::JSONError, ::JSON::ParserError => e
70
+ raise Shippo::Exceptions::InvalidJsonError.new(e.message)
63
71
 
64
72
  rescue ::RestClient::BadRequest => e
65
73
  raise Shippo::Exceptions::InvalidInputError.new(e.inspect)
@@ -81,11 +89,17 @@ module Shippo
81
89
  private
82
90
 
83
91
  def shippo_phone_home
84
- payload = {}
92
+ payload = {}
85
93
  request_url = url
86
94
  (method == :get) ? request_url = params_to_url(params, url) : payload = params.to_json
87
95
  setup_headers!(headers)
88
96
  opts = make_opts!(headers, method, payload, request_url)
97
+
98
+ if Shippo::API.debug?
99
+ puts "\nCLIENT REQUEST:"
100
+ ap opts
101
+ end
102
+
89
103
  make_request!(opts)
90
104
  end
91
105
 
@@ -120,6 +134,17 @@ module Shippo
120
134
  )
121
135
  end
122
136
 
137
+ def awesome_print_response(e)
138
+ begin
139
+ h = JSON.parse(e.response)
140
+ if h
141
+ puts "\nSERVER RESPONSE:"
142
+ ap JSON.parse(e.response)
143
+ end
144
+ rescue nil
145
+ end
146
+ end
147
+
123
148
  def base
124
149
  ::Shippo::API.base
125
150
  end
@@ -129,7 +154,7 @@ module Shippo
129
154
  end
130
155
 
131
156
  def connection_error_message(url, error)
132
- %Q[Could not connect to the Shippo API, via URL
157
+ %Q[Could not connect to the Shippo API, via URL
133
158
  #{url}.
134
159
 
135
160
  Please check your Internet connection, try again, if the problem
@@ -1,5 +1,5 @@
1
1
  module Shippo
2
2
  module API
3
- VERSION = '2.0.3'
3
+ VERSION = '2.0.4'
4
4
  end
5
5
  end
@@ -1,7 +1,8 @@
1
- module Shippo
2
- module Exceptions
3
- end
4
- end
5
-
6
1
  require 'shippo/exceptions/error'
7
- Dir[File.dirname(__FILE__) + '/exceptions/*.rb'].each {|file| require file }
2
+ require 'shippo/exceptions/api_error'
3
+ require 'shippo/exceptions/api_server_error'
4
+
5
+ class Shippo::Exceptions::ConnectionError < Shippo::Exceptions::Error; end
6
+ class Shippo::Exceptions::AuthenticationError < Shippo::Exceptions::Error; end
7
+ class Shippo::Exceptions::MissingDataError < Shippo::Exceptions::Error; end
8
+ class Shippo::Exceptions::AbstractClassInitError < Shippo::Exceptions::Error; end
@@ -1,20 +1,35 @@
1
- class Shippo::Exceptions::APIError < ::Shippo::Exceptions::Error
2
- attr_accessor :message, :req
3
- def initialize(message = nil, req = nil)
4
- super(message)
5
- self.req = req
6
- end
1
+ module Shippo
2
+ module Exceptions
3
+ class APIError < ::Shippo::Exceptions::Error
4
+ attr_accessor :request,
5
+ :response,
6
+ :http_response_message
7
7
 
8
- def to_s
9
- "#{self.class.name} ⇨ #{req.url}#{response} ⇨ #{message}"
10
- end
11
8
 
12
- def response
13
- req.response && req.response.http_code ? "[ ⇨ HTTP #{req.response.http_code} ]" : ''
9
+ def initialize(message = nil,
10
+ request = nil,
11
+ response = nil)
12
+ super(message)
13
+ self.request = request
14
+ self.response = response
15
+ end
16
+
17
+ def to_s_members
18
+ super + %i(server_url response)
19
+ end
20
+
21
+ def server_url
22
+ @server_url ||= (request ? request.url : '')
23
+ end
24
+ end
14
25
  end
15
26
  end
16
27
 
17
- class Shippo::Exceptions::UnsuccessfulResponseError < Shippo::Exceptions::APIError; end
18
- class Shippo::Exceptions::APIServerError < Shippo::Exceptions::APIError; end
19
- class Shippo::Exceptions::InvalidCategoryValueError < Shippo::Exceptions::APIError; end
28
+
29
+ class Shippo::Exceptions::UnsuccessfulResponseError < Shippo::Exceptions::APIError;
30
+ end
31
+ class Shippo::Exceptions::InvalidCategoryValueError < Shippo::Exceptions::APIError;
32
+ end
33
+ class Shippo::Exceptions::InvalidJsonError < Shippo::Exceptions::APIError;
34
+ end
20
35
 
@@ -0,0 +1,25 @@
1
+ require 'shippo/exceptions/api_error'
2
+
3
+ module Shippo
4
+ module Exceptions
5
+ #
6
+ # The +APIServerError+ happens when the server returns a parseable JSON response,
7
+ # but when such response indicates a failed operation due to either
8
+ # validation or other business, data or logic issues.
9
+ #
10
+ # The error adds the HTTP response message member, which would typically be
11
+ # "400 Bad Request"
12
+ #
13
+ class APIServerError < APIError
14
+
15
+ def initialize(message = nil, request = nil, response = nil, http_response_message = nil)
16
+ super(message, request, response)
17
+ self.http_response_message = http_response_message
18
+ end
19
+
20
+ def to_s_members
21
+ %i(http_response_message) + super
22
+ end
23
+ end
24
+ end
25
+ end
@@ -1,23 +1,42 @@
1
- class Shippo::Exceptions::Error < StandardError
2
- attr_accessor :message
3
-
4
- def initialize(thing = nil)
5
- if thing.is_a?(String)
6
- self.message = thing
7
- elsif thing.respond_to?(:message)
8
- self.message = thing.message
9
- else
10
- super(thing)
11
- end
12
- end
1
+ module Shippo
2
+ module Exceptions
3
+
4
+ class Error < StandardError
5
+ attr_accessor :message
6
+
7
+ def initialize(thing = nil)
8
+ if thing.is_a?(String)
9
+ self.message = thing
10
+ elsif thing.respond_to?(:message)
11
+ self.message = thing.message
12
+ else
13
+ super(thing)
14
+ end
15
+ end
16
+
17
+ def to_s_members
18
+ %i()
19
+ end
20
+
21
+ def to_s
22
+ out = super
23
+ out << " (#{message}) " if message
24
+ to_s_members.each do |member|
25
+ out << member_to_s(member)
26
+ end
27
+ out
28
+ end
13
29
 
14
- def to_s
15
- "Error! ⇨ #{message}"
30
+ private
31
+
32
+ def member_to_s(member)
33
+ out = ''
34
+ value = self.send(member)
35
+ out << "\n#{sprintf('%21s', member)}: '#{value}', " if value && (value != '')
36
+ out
37
+ end
38
+
39
+
40
+ end
16
41
  end
17
42
  end
18
-
19
- class Shippo::Exceptions::ConnectionError < Shippo::Exceptions::Error; end
20
- class Shippo::Exceptions::AuthenticationError < Shippo::Exceptions::Error; end
21
- class Shippo::Exceptions::MissingDataError < Shippo::Exceptions::Error; end
22
- class Shippo::Exceptions::AbstractClassInitError < Shippo::Exceptions::Error; end
23
- class Shippo::Exceptions::InvalidInputError < Shippo::Exceptions::Error; end
@@ -17,10 +17,9 @@ Gem::Specification.new do |spec|
17
17
  spec.metadata = { 'shippo_documentation' => 'https://goshippo.com/docs/' }
18
18
 
19
19
  spec.add_dependency 'rest-client', '~> 1.8'
20
- spec.add_dependency 'mime-types', '~> 2'
21
20
  spec.add_dependency 'json', '~> 1.8'
22
21
  spec.add_dependency 'hashie', '~> 3.4'
23
- spec.add_dependency 'activesupport', '~> 4'
22
+ spec.add_dependency 'activesupport', '>= 4'
24
23
  spec.add_dependency 'awesome_print'
25
24
 
26
25
  spec.add_development_dependency 'rake'
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.3
4
+ version: 2.0.4
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: 2016-10-03 00:00:00.000000000 Z
12
+ date: 2016-10-06 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rest-client
@@ -25,20 +25,6 @@ dependencies:
25
25
  - - "~>"
26
26
  - !ruby/object:Gem::Version
27
27
  version: '1.8'
28
- - !ruby/object:Gem::Dependency
29
- name: mime-types
30
- requirement: !ruby/object:Gem::Requirement
31
- requirements:
32
- - - "~>"
33
- - !ruby/object:Gem::Version
34
- version: '2'
35
- type: :runtime
36
- prerelease: false
37
- version_requirements: !ruby/object:Gem::Requirement
38
- requirements:
39
- - - "~>"
40
- - !ruby/object:Gem::Version
41
- version: '2'
42
28
  - !ruby/object:Gem::Dependency
43
29
  name: json
44
30
  requirement: !ruby/object:Gem::Requirement
@@ -71,14 +57,14 @@ dependencies:
71
57
  name: activesupport
72
58
  requirement: !ruby/object:Gem::Requirement
73
59
  requirements:
74
- - - "~>"
60
+ - - ">="
75
61
  - !ruby/object:Gem::Version
76
62
  version: '4'
77
63
  type: :runtime
78
64
  prerelease: false
79
65
  version_requirements: !ruby/object:Gem::Requirement
80
66
  requirements:
81
- - - "~>"
67
+ - - ">="
82
68
  - !ruby/object:Gem::Version
83
69
  version: '4'
84
70
  - !ruby/object:Gem::Dependency
@@ -202,6 +188,7 @@ files:
202
188
  - Guardfile
203
189
  - README.md
204
190
  - Rakefile
191
+ - bin/console
205
192
  - bin/example
206
193
  - lib/shippo.rb
207
194
  - lib/shippo/api.rb
@@ -227,6 +214,7 @@ files:
227
214
  - lib/shippo/api/version.rb
228
215
  - lib/shippo/exceptions.rb
229
216
  - lib/shippo/exceptions/api_error.rb
217
+ - lib/shippo/exceptions/api_server_error.rb
230
218
  - lib/shippo/exceptions/error.rb
231
219
  - lib/shippo/model/address.rb
232
220
  - lib/shippo/model/carrieraccount.rb