duty_calculator 0.0.6 → 0.0.7

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: 3074281a85d5dd3f9b02fa22f529ec9950650a2f
4
- data.tar.gz: ea02f8be01351e59884132c5b09327958bdb0c79
3
+ metadata.gz: acd45bb6bd3eb0e883c0661940510ecd5ca4eb69
4
+ data.tar.gz: d266474849fcd13a2bf9f133e3ccdccbc992fe32
5
5
  SHA512:
6
- metadata.gz: b10a1295f4f29c9f5590024754a99bd93d96fb55932f011f6683fe0a1be2bbb9579426ec067fd3a50e61667ec5a96c56393b903c6e3b8b16dc13f7e5cda30615
7
- data.tar.gz: 99923120a6705604b59beb285d78e984e2f0ce16baad6c2068f2c74b3aebe562f8be1bf070d68609c571e78728d9f96b4dc4d525cbbf32434205af9439965095
6
+ metadata.gz: ecc1d5b1e5dbdb6415bd948f61b54ccef4a2401b68bdf89169bc86a18002a2e1c0aacf52ff5057019082ca40015c1d64d80688f92524fa60b5f95b13fe1e48a3
7
+ data.tar.gz: 51e901b315355add0af9686f533f4f893790fede47c5c8e8183a9fa929a71e6106e40c88ad2f2bccfde4256385c01987b0eb405f2fe3a56c2ba9627e590972b7
@@ -1,10 +1,11 @@
1
- require "duty_calculator/version"
2
1
  require "duty_calculator/configuration"
3
2
  require "duty_calculator/currency"
4
3
  require "duty_calculator/category"
5
4
  require "duty_calculator/calculation"
6
- require "duty_calculator/response"
5
+ require "duty_calculator/dootie"
7
6
  require "duty_calculator/error_messages"
7
+ require "duty_calculator/response"
8
+ require "duty_calculator/version"
8
9
 
9
10
  require "faraday"
10
11
  require "faraday_middleware"
@@ -1,5 +1,6 @@
1
1
  require "duty_calculator/client"
2
2
  require "duty_calculator/response"
3
+ require "duty_calculator/dootie"
3
4
  require "addressable/uri"
4
5
  module DutyCalculator
5
6
  class Calculation
@@ -37,12 +38,17 @@ module DutyCalculator
37
38
 
38
39
  def self.get(params={})
39
40
  transformed_params = transform_params(validate_params(params))
41
+ # initialize connection
40
42
  conn = DutyCalculator::Client.new
43
+
41
44
  resp = conn.get "#{DutyCalculator::Client.api_base}/calculation", transformed_params
42
45
  hashed_resp = DutyCalculator::Response.new(resp.to_hash)
43
46
  resp = Hashie::Mash.new(hashed_resp)
44
- raise Exception, "Duty Calculator Error: #{DutyCalculator::ErrorMessages.for_code(resp.body.error.code)}" if resp.body.error
45
- raise Exception, "HTTP Status Code #{resp.status}" if resp.status.to_i != 200
47
+
48
+ if resp.body["error"]
49
+ return DutyCalculator::Dootie.new({message: "[DutyCalculator][Error]:", error: resp.body["error"]})
50
+ end
51
+
46
52
  resp.body.duty_calculation
47
53
  end
48
54
  end
@@ -10,7 +10,7 @@ module DutyCalculator
10
10
  faraday.use Faraday::Response::ParseXml
11
11
  faraday.use Faraday::Response::Mashify
12
12
  faraday.use Faraday::Response::RaiseError unless DutyCalculator.configuration.debug
13
- faraday.response :logger if DutyCalculator.configuration.debug
13
+ faraday.response :logger, DutyCalculator.configuration.logger
14
14
 
15
15
  faraday.adapter ::Faraday.default_adapter
16
16
  end
@@ -1,10 +1,11 @@
1
1
  require "yaml"
2
-
2
+ require 'logger'
3
3
  require "duty_calculator"
4
4
 
5
5
  module DutyCalculator
6
6
  class Configuration
7
- attr_accessor :api_root, :api_version, :api_key, :api_base, :sandbox, :debug
7
+ attr_accessor :api_root, :api_version, :api_key, :api_base, :sandbox, :debug, :logger
8
+
8
9
 
9
10
  def initialize
10
11
  defaults = load_defaults
@@ -12,6 +13,7 @@ module DutyCalculator
12
13
  @api_version = defaults[:api_version]
13
14
  @sandbox = defaults[:sandbox]
14
15
  @debug = defaults[:debug]
16
+ @logger = ::Logger.new(STDOUT)
15
17
  end
16
18
 
17
19
  private
@@ -0,0 +1,19 @@
1
+ # encoding: utf-8
2
+ module DutyCalculator
3
+ class Dootie < StandardError
4
+ def initialize(data=nil)
5
+ @data = data
6
+ @default_message = "[DutyCalculator][Error]: ¯\\_(ツ)_/¯"
7
+ end
8
+
9
+ def to_s
10
+ msg = []
11
+ msg << @data[:message] || @default_message
12
+ msg << "Error Code: #{@data[:error][:code]}"
13
+ msg << DutyCalculator::ErrorMessages.for_code(@data[:error][:code]) if @data[:error][:code]
14
+ msg.to_s
15
+ end
16
+ end
17
+
18
+ class NotImplemented < Dootie; end
19
+ end
@@ -10,7 +10,8 @@ module DutyCalculator
10
10
  "4061" => "Account does not support called service: Classification service - get HS codes, duty & tax rates and import restrictions",
11
11
  "4062" => "Account does not support called service: Documents service",
12
12
  "4063" => "Account does not support called operation: Classification service - get DutyCalculator item ID",
13
- "4064" => "Account does not support called operation: Reporting service","4401" => "Parameter is missing",
13
+ "4064" => "Account does not support called operation: Reporting service",
14
+ "4401" => "Parameter is missing",
14
15
  "4421" => "Bad parameter: shipping cost can't be empty",
15
16
  "4422" => "Bad parameter: shipment weight can't be empty",
16
17
  "4423" => "Bad parameter: imported weight can't be empty",
@@ -19,7 +20,8 @@ module DutyCalculator
19
20
  "4426" => "Bad parameter: both category and description for reference <product reference> can't be empty",
20
21
  "4427" => "Bad parameter: SKU for reference <product reference> can't be empty",
21
22
  "4428" => "Bad parameter: HS code for reference <product reference> can't be empty",
22
- "4429" => "Bad parameter: description for reference <product reference> can't be empty","4701" => "Bad parameter: <parameter name> is invalid",
23
+ "4429" => "Bad parameter: description for reference <product reference> can't be empty",
24
+ "4701" => "Bad parameter: <parameter name> is invalid",
23
25
  "4721" => "Classification for the selected import to country is not possible",
24
26
  "4722" => "Bad parameter: country from code",
25
27
  "4723" => "Bad parameter: country to code",
@@ -1,3 +1,3 @@
1
1
  module DutyCalculator
2
- VERSION = "0.0.6"
2
+ VERSION = "0.0.7"
3
3
  end
@@ -0,0 +1,59 @@
1
+ require 'spec_helper'
2
+
3
+ module DutyCalculator
4
+ describe Dootie do
5
+ context "Status Codes From API" do
6
+ let(:params) do
7
+ {
8
+ from: "US",
9
+ to: "CA",
10
+ shipping_mode: "USPS",
11
+ insurance: 0.0,
12
+ currency: "USD",
13
+ origin: "US",
14
+ reference: "ORD12345",
15
+ preferential_rates: 0,
16
+ detailed_result: 1,
17
+ incl_hs_codes: 1,
18
+ shipping: 10.0,
19
+ cat: ["9999999999999999999992"],
20
+ hs: ["9019100020"],
21
+ country_of_hs_code: ["CN"],
22
+ desc: ["Hydrotherapy Spa Bath"],
23
+ weight: ["1.0"],
24
+ weight_unit: ["lb"],
25
+ value: [ "1234.00" ],
26
+ sku: [ "300101" ],
27
+ qty: [ 1 ],
28
+ commercial_importer: 0,
29
+ classify_by: 'cat',
30
+ }
31
+ end
32
+ it "returns a DutyCalculator error from code for bad api key" do
33
+ DutyCalculator.configure do |config|
34
+ config.api_key = ""
35
+ config.sandbox = true
36
+ config.debug = true
37
+ end
38
+ VCR.use_cassette('dootie__status_codes_from_api_1') do
39
+ duty_calculation = DutyCalculator::Calculation.get(params)
40
+ expect(duty_calculation.class).to eq(DutyCalculator::Dootie)
41
+ expect(duty_calculation.message).to include('Client id is invalid or missing')
42
+ end
43
+ end
44
+ it "returns a DutyCalculator error about a bad category" do
45
+ DutyCalculator.configure do |config|
46
+ config.api_key = 'DUTY_CALC'
47
+ config.sandbox = true
48
+ config.debug = true
49
+ end
50
+ VCR.use_cassette('dootie__status_codes_from_api_2') do
51
+ duty_calculation = DutyCalculator::Calculation.get(params)
52
+ expect(duty_calculation.class).to eq(DutyCalculator::Dootie)
53
+ expect(duty_calculation.message).to include('4747')
54
+ expect(duty_calculation.message).to include('could not be autoclassified')
55
+ end
56
+ end
57
+ end
58
+ end
59
+ end
@@ -0,0 +1,49 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: http://www.dutycalculator.com/api2.1/sandbox/calculation?cat%5B%5D=9999999999999999999992&classify_by=cat&commercial_importer=0&country_of_hs_code%5B%5D=CN&currency=USD&desc%5B%5D=Hydrotherapy%20Spa%20Bath&detailed_result=1&from=US&hs%5B%5D=9019100020&incl_hs_codes=1&insurance=0.0&origin=US&preferential_rates=0&qty%5B%5D=1&reference=ORD12345&shipping=10.0&shipping_mode=USPS&sku%5B%5D=300101&to=CA&value%5B%5D=1234.00&weight%5B%5D=1.0&weight_unit%5B%5D=lb
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers:
10
+ User-Agent:
11
+ - Faraday v0.9.1
12
+ Accept-Encoding:
13
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
14
+ Accept:
15
+ - "*/*"
16
+ response:
17
+ status:
18
+ code: 400
19
+ message: Bad Request
20
+ headers:
21
+ Server:
22
+ - nginx/1.6.1
23
+ Date:
24
+ - Wed, 01 Apr 2015 18:33:37 GMT
25
+ Content-Type:
26
+ - application/xml
27
+ Transfer-Encoding:
28
+ - chunked
29
+ Connection:
30
+ - keep-alive
31
+ X-Powered-By:
32
+ - PHP/5.5.9-1ubuntu4.5
33
+ Set-Cookie:
34
+ - DebugLevel=0; expires=Fri, 01-May-2015 18:33:37 GMT; Max-Age=2592000; path=/
35
+ - PHPSESSID=2r0e1sofgbpetuhrks0nm273o0; path=/
36
+ Expires:
37
+ - Thu, 19 Nov 1981 08:52:00 GMT
38
+ Cache-Control:
39
+ - no-store, no-cache, must-revalidate, post-check=0, pre-check=0
40
+ Pragma:
41
+ - no-cache
42
+ body:
43
+ encoding: UTF-8
44
+ string: |
45
+ <?xml version="1.0" encoding="UTF-8"?>
46
+ <error><code>4046</code><message>Client id is invalid or missing</message></error>
47
+ http_version:
48
+ recorded_at: Wed, 01 Apr 2015 18:31:08 GMT
49
+ recorded_with: VCR 2.9.3
@@ -0,0 +1,49 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: http://www.dutycalculator.com/api2.1/sandbox/DUTY_CALC/calculation?cat%5B%5D=9999999999999999999992&classify_by=cat&commercial_importer=0&country_of_hs_code%5B%5D=CN&currency=USD&desc%5B%5D=Hydrotherapy%20Spa%20Bath&detailed_result=1&from=US&hs%5B%5D=9019100020&incl_hs_codes=1&insurance=0.0&origin=US&preferential_rates=0&qty%5B%5D=1&reference=ORD12345&shipping=10.0&shipping_mode=USPS&sku%5B%5D=300101&to=CA&value%5B%5D=1234.00&weight%5B%5D=1.0&weight_unit%5B%5D=lb
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers:
10
+ User-Agent:
11
+ - Faraday v0.9.1
12
+ Accept-Encoding:
13
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
14
+ Accept:
15
+ - "*/*"
16
+ response:
17
+ status:
18
+ code: 400
19
+ message: Bad Request
20
+ headers:
21
+ Server:
22
+ - nginx/1.6.1
23
+ Date:
24
+ - Wed, 01 Apr 2015 18:33:37 GMT
25
+ Content-Type:
26
+ - application/xml
27
+ Transfer-Encoding:
28
+ - chunked
29
+ Connection:
30
+ - keep-alive
31
+ X-Powered-By:
32
+ - PHP/5.5.9-1ubuntu4.5
33
+ Set-Cookie:
34
+ - DebugLevel=0; expires=Fri, 01-May-2015 18:33:37 GMT; Max-Age=2592000; path=/
35
+ - PHPSESSID=njctv8db05jj19cpk6p42qm621; path=/
36
+ Expires:
37
+ - Thu, 19 Nov 1981 08:52:00 GMT
38
+ Cache-Control:
39
+ - no-store, no-cache, must-revalidate, post-check=0, pre-check=0
40
+ Pragma:
41
+ - no-cache
42
+ body:
43
+ encoding: UTF-8
44
+ string: |
45
+ <?xml version="1.0" encoding="UTF-8"?>
46
+ <error><code>4747</code><message>Reference 0 could not be autoclassified</message></error>
47
+ http_version:
48
+ recorded_at: Wed, 01 Apr 2015 18:31:08 GMT
49
+ recorded_with: VCR 2.9.3
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: duty_calculator
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.6
4
+ version: 0.0.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Thomas Hanley
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2015-03-31 00:00:00.000000000 Z
12
+ date: 2015-04-01 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
@@ -160,17 +160,21 @@ files:
160
160
  - lib/duty_calculator/client.rb
161
161
  - lib/duty_calculator/configuration.rb
162
162
  - lib/duty_calculator/currency.rb
163
+ - lib/duty_calculator/dootie.rb
163
164
  - lib/duty_calculator/error_messages.rb
164
165
  - lib/duty_calculator/response.rb
165
166
  - lib/duty_calculator/version.rb
166
167
  - spec/duty_calculator/calculation_spec.rb
167
168
  - spec/duty_calculator/configuration_spec.rb
168
169
  - spec/duty_calculator/currency_spec.rb
170
+ - spec/duty_calculator/dootie_spec.rb
169
171
  - spec/duty_calculator/response_spec.rb
170
172
  - spec/spec_helper.rb
171
173
  - spec/support/vcr.rb
172
174
  - spec/vcr/calculate__nice_hash_for_multiple_products.yml
173
175
  - spec/vcr/calculate__nice_hash_for_single_product.yml
176
+ - spec/vcr/dootie__status_codes_from_api_1.yml
177
+ - spec/vcr/dootie__status_codes_from_api_2.yml
174
178
  homepage: https://github.com/tjhanley/duty-calculator
175
179
  licenses:
176
180
  - MIT
@@ -199,8 +203,11 @@ test_files:
199
203
  - spec/duty_calculator/calculation_spec.rb
200
204
  - spec/duty_calculator/configuration_spec.rb
201
205
  - spec/duty_calculator/currency_spec.rb
206
+ - spec/duty_calculator/dootie_spec.rb
202
207
  - spec/duty_calculator/response_spec.rb
203
208
  - spec/spec_helper.rb
204
209
  - spec/support/vcr.rb
205
210
  - spec/vcr/calculate__nice_hash_for_multiple_products.yml
206
211
  - spec/vcr/calculate__nice_hash_for_single_product.yml
212
+ - spec/vcr/dootie__status_codes_from_api_1.yml
213
+ - spec/vcr/dootie__status_codes_from_api_2.yml