duty_calculator 0.0.6 → 0.0.7

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