shippo 2.0.3 → 2.0.4

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