auction_inc 0.1.0 → 0.2.0
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.
- data/.gitignore +1 -0
- data/Rakefile +1 -1
- data/VERSION +1 -1
- data/auction_inc.gemspec +94 -0
- data/lib/auction_inc/shipping/base.rb +4 -3
- data/lib/auction_inc/shipping/node/body.rb +2 -0
- data/lib/auction_inc/shipping/node/calc_method.rb +1 -1
- data/lib/auction_inc/shipping/node/carrier.rb +2 -2
- data/lib/auction_inc/shipping/node/error.rb +14 -0
- data/lib/auction_inc/shipping/node/get_item_ship_rate_xs.rb +3 -3
- data/lib/auction_inc/shipping/node/header.rb +1 -0
- data/lib/auction_inc/shipping/node/item_ship_rate.rb +30 -0
- data/lib/auction_inc/shipping/node/package.rb +1 -1
- data/lib/auction_inc/shipping/node/service.rb +1 -1
- data/lib/auction_inc/shipping/node/ship_rate.rb +4 -4
- data/lib/auction_inc/shipping/response.rb +35 -0
- data/lib/auction_inc/shipping/xs.rb +4 -4
- data/lib/auction_inc.rb +2 -0
- data/spec/auction_inc/shipping/base_spec.rb +18 -6
- data/spec/auction_inc/shipping/error_spec.rb +22 -0
- data/spec/auction_inc/shipping/item_ship_rate_spec.rb +63 -0
- data/spec/auction_inc/shipping/response_spec.rb +91 -0
- data/spec/fixtures/auction_inc_detail_level_1_response.xml +29 -0
- data/spec/fixtures/auction_inc_detail_level_2_response.xml +62 -0
- data/spec/fixtures/auction_inc_detail_level_3_response.xml +83 -0
- data/spec/fixtures/auction_inc_get_time_response.xml +11 -0
- data/spec/fixtures/auction_inc_type_1_error_response.xml +14 -0
- data/spec/fixtures/auction_inc_type_2_error_response.xml +28 -0
- data/spec/spec_helper.rb +14 -0
- metadata +33 -3
data/.gitignore
CHANGED
data/Rakefile
CHANGED
@@ -12,7 +12,7 @@ begin
|
|
12
12
|
gem.authors = ["pjkelly"]
|
13
13
|
gem.add_dependency "roxml", ">= 3.1.5"
|
14
14
|
gem.add_development_dependency "rspec", ">= 1.2.9"
|
15
|
-
|
15
|
+
gem.add_development_dependency "fakeweb", ">=1.2.8"
|
16
16
|
end
|
17
17
|
Jeweler::GemcutterTasks.new
|
18
18
|
rescue LoadError
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.2.0
|
data/auction_inc.gemspec
ADDED
@@ -0,0 +1,94 @@
|
|
1
|
+
# Generated by jeweler
|
2
|
+
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
+
# Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
|
4
|
+
# -*- encoding: utf-8 -*-
|
5
|
+
|
6
|
+
Gem::Specification.new do |s|
|
7
|
+
s.name = %q{auction_inc}
|
8
|
+
s.version = "0.2.0"
|
9
|
+
|
10
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
|
+
s.authors = ["pjkelly"]
|
12
|
+
s.date = %q{2010-08-05}
|
13
|
+
s.description = %q{Ruby wrapper around Auction Inc's shipping API.}
|
14
|
+
s.email = %q{pj@crushlovely.com}
|
15
|
+
s.extra_rdoc_files = [
|
16
|
+
"LICENSE",
|
17
|
+
"README.rdoc"
|
18
|
+
]
|
19
|
+
s.files = [
|
20
|
+
".document",
|
21
|
+
".gitignore",
|
22
|
+
"LICENSE",
|
23
|
+
"README.rdoc",
|
24
|
+
"Rakefile",
|
25
|
+
"VERSION",
|
26
|
+
"auction_inc.gemspec",
|
27
|
+
"lib/auction_inc.rb",
|
28
|
+
"lib/auction_inc/shipping/base.rb",
|
29
|
+
"lib/auction_inc/shipping/carriers.yml",
|
30
|
+
"lib/auction_inc/shipping/node.rb",
|
31
|
+
"lib/auction_inc/shipping/node/body.rb",
|
32
|
+
"lib/auction_inc/shipping/node/calc_method.rb",
|
33
|
+
"lib/auction_inc/shipping/node/carrier.rb",
|
34
|
+
"lib/auction_inc/shipping/node/carrier_calc_props.rb",
|
35
|
+
"lib/auction_inc/shipping/node/destination_address.rb",
|
36
|
+
"lib/auction_inc/shipping/node/envelope.rb",
|
37
|
+
"lib/auction_inc/shipping/node/error.rb",
|
38
|
+
"lib/auction_inc/shipping/node/get_item_ship_rate_xs.rb",
|
39
|
+
"lib/auction_inc/shipping/node/header.rb",
|
40
|
+
"lib/auction_inc/shipping/node/item.rb",
|
41
|
+
"lib/auction_inc/shipping/node/item_ship_rate.rb",
|
42
|
+
"lib/auction_inc/shipping/node/origin_address.rb",
|
43
|
+
"lib/auction_inc/shipping/node/package.rb",
|
44
|
+
"lib/auction_inc/shipping/node/pkg_item.rb",
|
45
|
+
"lib/auction_inc/shipping/node/service.rb",
|
46
|
+
"lib/auction_inc/shipping/node/ship_rate.rb",
|
47
|
+
"lib/auction_inc/shipping/response.rb",
|
48
|
+
"lib/auction_inc/shipping/xs.rb",
|
49
|
+
"spec/auction_inc/shipping/base_spec.rb",
|
50
|
+
"spec/auction_inc/shipping/error_spec.rb",
|
51
|
+
"spec/auction_inc/shipping/item_ship_rate_spec.rb",
|
52
|
+
"spec/auction_inc/shipping/response_spec.rb",
|
53
|
+
"spec/fixtures/auction_inc_detail_level_1_response.xml",
|
54
|
+
"spec/fixtures/auction_inc_detail_level_2_response.xml",
|
55
|
+
"spec/fixtures/auction_inc_detail_level_3_response.xml",
|
56
|
+
"spec/fixtures/auction_inc_get_time_response.xml",
|
57
|
+
"spec/fixtures/auction_inc_type_1_error_response.xml",
|
58
|
+
"spec/fixtures/auction_inc_type_2_error_response.xml",
|
59
|
+
"spec/spec.opts",
|
60
|
+
"spec/spec_helper.rb"
|
61
|
+
]
|
62
|
+
s.homepage = %q{http://github.com/pjkelly/auction_inc}
|
63
|
+
s.rdoc_options = ["--charset=UTF-8"]
|
64
|
+
s.require_paths = ["lib"]
|
65
|
+
s.rubygems_version = %q{1.3.7}
|
66
|
+
s.summary = %q{Ruby wrapper around Auction Inc's shipping API.}
|
67
|
+
s.test_files = [
|
68
|
+
"spec/auction_inc/shipping/base_spec.rb",
|
69
|
+
"spec/auction_inc/shipping/error_spec.rb",
|
70
|
+
"spec/auction_inc/shipping/item_ship_rate_spec.rb",
|
71
|
+
"spec/auction_inc/shipping/response_spec.rb",
|
72
|
+
"spec/spec_helper.rb"
|
73
|
+
]
|
74
|
+
|
75
|
+
if s.respond_to? :specification_version then
|
76
|
+
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
77
|
+
s.specification_version = 3
|
78
|
+
|
79
|
+
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
80
|
+
s.add_runtime_dependency(%q<roxml>, [">= 3.1.5"])
|
81
|
+
s.add_development_dependency(%q<rspec>, [">= 1.2.9"])
|
82
|
+
s.add_development_dependency(%q<fakeweb>, [">= 1.2.8"])
|
83
|
+
else
|
84
|
+
s.add_dependency(%q<roxml>, [">= 3.1.5"])
|
85
|
+
s.add_dependency(%q<rspec>, [">= 1.2.9"])
|
86
|
+
s.add_dependency(%q<fakeweb>, [">= 1.2.8"])
|
87
|
+
end
|
88
|
+
else
|
89
|
+
s.add_dependency(%q<roxml>, [">= 3.1.5"])
|
90
|
+
s.add_dependency(%q<rspec>, [">= 1.2.9"])
|
91
|
+
s.add_dependency(%q<fakeweb>, [">= 1.2.8"])
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
@@ -31,7 +31,7 @@ module AuctionInc
|
|
31
31
|
carrier_data.each do |carrier|
|
32
32
|
# TODO allow for PkgMaxWeight and OnDemand values
|
33
33
|
services = carrier['services'].collect { |s| Service.new(:name => s['name'], :code => s['code'], :klass => s['klass']) }
|
34
|
-
result << Carrier.new(:name => carrier['name'], :code => carrier['code'], :entry_point => carrier['entry_point'], :
|
34
|
+
result << Carrier.new(:name => carrier['name'], :code => carrier['code'], :entry_point => carrier['entry_point'], :services => services)
|
35
35
|
end
|
36
36
|
result
|
37
37
|
end
|
@@ -41,7 +41,7 @@ module AuctionInc
|
|
41
41
|
end
|
42
42
|
|
43
43
|
def self.services
|
44
|
-
self.carriers.collect { |carrier| carrier.
|
44
|
+
self.carriers.collect { |carrier| carrier.services }.flatten
|
45
45
|
end
|
46
46
|
|
47
47
|
def parsed_response
|
@@ -60,7 +60,8 @@ module AuctionInc
|
|
60
60
|
http_request = Net::HTTP::Post.new(base_path)
|
61
61
|
http_request.body = self.request_xml
|
62
62
|
|
63
|
-
|
63
|
+
response_string = http_server.start { |http| http.request(http_request) }.body
|
64
|
+
self.response = Response.new(response_string)
|
64
65
|
rescue EOFError => e
|
65
66
|
raise ConnectionError, "The remote server dropped the connection"
|
66
67
|
rescue Errno::ECONNRESET => e
|
@@ -2,9 +2,9 @@ module AuctionInc
|
|
2
2
|
module Shipping
|
3
3
|
class Carrier < Node
|
4
4
|
attr_accessor :name
|
5
|
-
xml_accessor :code, :from => "@
|
5
|
+
xml_accessor :code, :from => "@code"
|
6
6
|
xml_accessor :entry_point
|
7
|
-
xml_accessor :
|
7
|
+
xml_accessor :services, :as => [Service], :in => "ServiceList"
|
8
8
|
end
|
9
9
|
end
|
10
10
|
end
|
@@ -5,6 +5,20 @@ module AuctionInc
|
|
5
5
|
xml_accessor :message
|
6
6
|
xml_accessor :detail, :as => []
|
7
7
|
xml_accessor :severity
|
8
|
+
|
9
|
+
SEVERITIES = [:NOTICE, :WARNING, :CRITICAL]
|
10
|
+
|
11
|
+
def notice?
|
12
|
+
self.severity.to_sym == :NOTICE
|
13
|
+
end
|
14
|
+
|
15
|
+
def warning?
|
16
|
+
self.severity.to_sym == :WARNING
|
17
|
+
end
|
18
|
+
|
19
|
+
def critical?
|
20
|
+
self.severity.to_sym == :CRITICAL
|
21
|
+
end
|
8
22
|
end
|
9
23
|
end
|
10
24
|
end
|
@@ -4,10 +4,10 @@ module AuctionInc
|
|
4
4
|
xml_accessor :version, :from => "@version"
|
5
5
|
xml_accessor :detail_level
|
6
6
|
xml_accessor :currency
|
7
|
-
xml_accessor :
|
8
|
-
xml_accessor :
|
7
|
+
xml_accessor :carriers, :as => [Carrier], :in => "CarrierList"
|
8
|
+
xml_accessor :origin_addresses, :as => [OriginAddress], :in => "OriginAddressList"
|
9
9
|
xml_accessor :destination_address, :as => DestinationAddress
|
10
|
-
xml_accessor :
|
10
|
+
xml_accessor :items, :as => [Item], :in => "ItemList"
|
11
11
|
end
|
12
12
|
end
|
13
13
|
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
module AuctionInc
|
2
|
+
module Shipping
|
3
|
+
class ItemShipRate < Node
|
4
|
+
xml_accessor :currency
|
5
|
+
xml_accessor :ship_rates, :as => [ShipRate], :in => "ShipRateList"
|
6
|
+
|
7
|
+
def has_error?
|
8
|
+
error = false
|
9
|
+
self.ship_rates.each do |ship_rate|
|
10
|
+
error = true if ship_rate.errors.present?
|
11
|
+
end
|
12
|
+
error
|
13
|
+
end
|
14
|
+
alias_method :has_errors?, :has_error?
|
15
|
+
|
16
|
+
def error
|
17
|
+
self.errors.empty? ? nil : self.errors.first
|
18
|
+
end
|
19
|
+
|
20
|
+
def errors
|
21
|
+
@errors = []
|
22
|
+
self.ship_rates.each do |ship_rate|
|
23
|
+
@errors << ship_rate.errors if ship_rate.errors.present?
|
24
|
+
end
|
25
|
+
@errors.flatten
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -2,14 +2,14 @@ module AuctionInc
|
|
2
2
|
module Shipping
|
3
3
|
class ShipRate < Node
|
4
4
|
# Detail Level 1
|
5
|
-
xml_accessor :valid
|
5
|
+
xml_accessor :valid?
|
6
6
|
xml_accessor :carrier_code
|
7
7
|
xml_accessor :service_code
|
8
8
|
xml_accessor :service_name
|
9
9
|
xml_accessor :calc_method
|
10
10
|
xml_accessor :rate
|
11
|
-
xml_accessor :
|
12
|
-
# Detail Level
|
11
|
+
xml_accessor :errors, :as => [Error], :in => "ErrorList"
|
12
|
+
# Detail Level 2
|
13
13
|
xml_accessor :carrier_rate
|
14
14
|
xml_accessor :fixed_rate
|
15
15
|
xml_accessor :surcharges
|
@@ -21,7 +21,7 @@ module AuctionInc
|
|
21
21
|
xml_accessor :package_count
|
22
22
|
xml_accessor :flat_rate_code
|
23
23
|
# Detail Level 3
|
24
|
-
xml_accessor :
|
24
|
+
xml_accessor :packages, :as => [Package], :in => "PackageDetail"
|
25
25
|
end
|
26
26
|
end
|
27
27
|
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
module AuctionInc
|
2
|
+
module Shipping
|
3
|
+
class Response
|
4
|
+
attr_accessor :raw, :parsed
|
5
|
+
|
6
|
+
def initialize(xml_string)
|
7
|
+
self.raw = xml_string
|
8
|
+
self.parsed = Envelope.from_xml(self.raw)
|
9
|
+
end
|
10
|
+
|
11
|
+
def body
|
12
|
+
self.parsed.body
|
13
|
+
end
|
14
|
+
|
15
|
+
def has_error?
|
16
|
+
self.body.error.present? || (self.body.item_ship_rate.present? && self.body.item_ship_rate.has_errors?)
|
17
|
+
end
|
18
|
+
alias_method :has_errors?, :has_error?
|
19
|
+
|
20
|
+
def error
|
21
|
+
if self.body.error.present?
|
22
|
+
self.body.error
|
23
|
+
elsif self.body.item_ship_rate.present? && self.body.item_ship_rate.has_errors?
|
24
|
+
self.body.item_ship_rate.error
|
25
|
+
else
|
26
|
+
nil
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def ship_rates
|
31
|
+
self.parsed.body.item_ship_rate.ship_rates if self.body.item_ship_rate.present?
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -6,7 +6,7 @@ module AuctionInc
|
|
6
6
|
def request_xml
|
7
7
|
doc = Nokogiri::XML::Document.new
|
8
8
|
doc.root = self.envelope.to_xml
|
9
|
-
doc
|
9
|
+
doc.to_s
|
10
10
|
end
|
11
11
|
|
12
12
|
def envelope
|
@@ -26,10 +26,10 @@ module AuctionInc
|
|
26
26
|
content.version = self.class.api_version
|
27
27
|
content.detail_level = self.class.detail_level
|
28
28
|
content.currency = self.currency
|
29
|
-
content.
|
30
|
-
content.
|
29
|
+
content.carriers = self.class.carriers
|
30
|
+
content.origin_addresses = origin_addresses unless origin_addresses.blank?
|
31
31
|
content.destination_address = destination_address unless destination_address.blank?
|
32
|
-
content.
|
32
|
+
content.items = items unless items.blank?
|
33
33
|
content
|
34
34
|
end
|
35
35
|
end
|
data/lib/auction_inc.rb
CHANGED
@@ -21,8 +21,10 @@ require 'auction_inc/shipping/node/calc_method'
|
|
21
21
|
require 'auction_inc/shipping/node/item'
|
22
22
|
require 'auction_inc/shipping/node/carrier'
|
23
23
|
require 'auction_inc/shipping/node/get_item_ship_rate_xs'
|
24
|
+
require 'auction_inc/shipping/node/item_ship_rate'
|
24
25
|
require 'auction_inc/shipping/node/body'
|
25
26
|
require 'auction_inc/shipping/node/envelope'
|
26
27
|
|
28
|
+
require 'auction_inc/shipping/response'
|
27
29
|
require 'auction_inc/shipping/base'
|
28
30
|
require 'auction_inc/shipping/xs'
|
@@ -1,7 +1,6 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe AuctionInc::Shipping::Base do
|
4
|
-
|
5
4
|
before(:each) do
|
6
5
|
AuctionInc::Shipping::Base.license_key = nil
|
7
6
|
end
|
@@ -52,11 +51,15 @@ describe AuctionInc::Shipping::Base do
|
|
52
51
|
|
53
52
|
describe ".services" do
|
54
53
|
it "should return an array of all services" do
|
55
|
-
AuctionInc::Shipping::Base.services.should == AuctionInc::Shipping::Base.carriers.collect { |carrier| carrier.
|
54
|
+
AuctionInc::Shipping::Base.services.should == AuctionInc::Shipping::Base.carriers.collect { |carrier| carrier.services }.flatten
|
56
55
|
end
|
57
56
|
end
|
58
57
|
|
59
58
|
describe "#make_request" do
|
59
|
+
before do
|
60
|
+
FakeWeb.register_uri(:post, %r|api\.auctioninc\.com/|, :body => remote_fixture_file('auction_inc_get_time_response.xml'))
|
61
|
+
end
|
62
|
+
|
60
63
|
context "when no license key is present" do
|
61
64
|
it "should raise a license error" do
|
62
65
|
lambda {
|
@@ -66,11 +69,20 @@ describe AuctionInc::Shipping::Base do
|
|
66
69
|
end
|
67
70
|
|
68
71
|
context "when a license key is present" do
|
69
|
-
|
72
|
+
before do
|
70
73
|
AuctionInc::Shipping::Base.license_key = '123'
|
71
|
-
service = AuctionInc::Shipping::Base.new
|
72
|
-
|
73
|
-
|
74
|
+
@service = AuctionInc::Shipping::Base.new
|
75
|
+
@response_string = File.read(remote_fixture_file('auction_inc_get_time_response.xml'))
|
76
|
+
end
|
77
|
+
|
78
|
+
it "should pass the response string to Response.new" do
|
79
|
+
AuctionInc::Shipping::Response.should_receive(:new).with(@response_string)
|
80
|
+
@service.make_request
|
81
|
+
end
|
82
|
+
|
83
|
+
it "should set the response as a Response object" do
|
84
|
+
@service.make_request
|
85
|
+
@service.response.should be_an(AuctionInc::Shipping::Response)
|
74
86
|
end
|
75
87
|
end
|
76
88
|
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe AuctionInc::Shipping::Error do
|
4
|
+
let(:xml_string) { File.read(remote_fixture_file('auction_inc_type_1_error_response.xml')) }
|
5
|
+
let(:error) { AuctionInc::Shipping::Envelope.from_xml(xml_string).body.error }
|
6
|
+
|
7
|
+
AuctionInc::Shipping::Error::SEVERITIES.each do |severity|
|
8
|
+
describe "##{severity.to_s.downcase}?" do
|
9
|
+
it "should return true when severity is #{severity.to_s}" do
|
10
|
+
error.send("severity=", severity.to_s)
|
11
|
+
error.send("#{severity.to_s.downcase}?").should be_true
|
12
|
+
end
|
13
|
+
|
14
|
+
AuctionInc::Shipping::Error::SEVERITIES.reject { |s| s == severity }.each do |other|
|
15
|
+
it "should return false when severity is #{other.to_s}" do
|
16
|
+
error.send("severity=", other.to_s)
|
17
|
+
error.send("#{severity.to_s.downcase}?").should be_false
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,63 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe AuctionInc::Shipping::ItemShipRate do
|
4
|
+
describe "#has_error?" do
|
5
|
+
context "when there are ship_rate errors" do
|
6
|
+
let(:xml_string) { File.read(remote_fixture_file('auction_inc_type_2_error_response.xml')) }
|
7
|
+
let(:item_ship_rate) { AuctionInc::Shipping::Envelope.from_xml(xml_string).body.item_ship_rate }
|
8
|
+
|
9
|
+
it "should return true" do
|
10
|
+
item_ship_rate.has_error?.should be_true
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
context "when there are not ship_rate errors" do
|
15
|
+
let(:xml_string) { File.read(remote_fixture_file('auction_inc_detail_level_1_response.xml')) }
|
16
|
+
let(:item_ship_rate) { AuctionInc::Shipping::Envelope.from_xml(xml_string).body.item_ship_rate }
|
17
|
+
|
18
|
+
it "should return false" do
|
19
|
+
item_ship_rate.has_error?.should be_false
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
describe "#errors" do
|
25
|
+
context "when there are ship_rate errors" do
|
26
|
+
let(:xml_string) { File.read(remote_fixture_file('auction_inc_type_2_error_response.xml')) }
|
27
|
+
let(:item_ship_rate) { AuctionInc::Shipping::Envelope.from_xml(xml_string).body.item_ship_rate }
|
28
|
+
|
29
|
+
it "should include errors from the ship rates" do
|
30
|
+
item_ship_rate.errors.should include(item_ship_rate.ship_rates.first.errors.first)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
context "when there are not ship_rate errors" do
|
35
|
+
let(:xml_string) { File.read(remote_fixture_file('auction_inc_detail_level_1_response.xml')) }
|
36
|
+
let(:item_ship_rate) { AuctionInc::Shipping::Envelope.from_xml(xml_string).body.item_ship_rate }
|
37
|
+
|
38
|
+
it "should be empty" do
|
39
|
+
item_ship_rate.errors.should be_empty
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
describe "#error" do
|
45
|
+
context "when there are ship_rate errors" do
|
46
|
+
let(:xml_string) { File.read(remote_fixture_file('auction_inc_type_2_error_response.xml')) }
|
47
|
+
let(:item_ship_rate) { AuctionInc::Shipping::Envelope.from_xml(xml_string).body.item_ship_rate }
|
48
|
+
|
49
|
+
it "should return the first error from the errors array" do
|
50
|
+
item_ship_rate.error.should == item_ship_rate.errors.first
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
context "when there are not ship_rate errors" do
|
55
|
+
let(:xml_string) { File.read(remote_fixture_file('auction_inc_detail_level_1_response.xml')) }
|
56
|
+
let(:item_ship_rate) { AuctionInc::Shipping::Envelope.from_xml(xml_string).body.item_ship_rate }
|
57
|
+
|
58
|
+
it "should return nil" do
|
59
|
+
item_ship_rate.error.should be_nil
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
@@ -0,0 +1,91 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe AuctionInc::Shipping::Response do
|
4
|
+
let(:xml_string) { File.read(remote_fixture_file('auction_inc_get_time_response.xml')) }
|
5
|
+
let(:response) { AuctionInc::Shipping::Response.new(xml_string) }
|
6
|
+
|
7
|
+
describe "initialization" do
|
8
|
+
it "should pass the xml_string to Body.from_xml" do
|
9
|
+
AuctionInc::Shipping::Envelope.should_receive(:from_xml).with(xml_string)
|
10
|
+
AuctionInc::Shipping::Response.new(xml_string)
|
11
|
+
end
|
12
|
+
|
13
|
+
it "should put the raw XML in #raw" do
|
14
|
+
response.raw.should == xml_string
|
15
|
+
end
|
16
|
+
|
17
|
+
it "should set #parsed as an Envelope object" do
|
18
|
+
response.parsed.should be_a(AuctionInc::Shipping::Envelope)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
describe "#body" do
|
23
|
+
it "should be a Body object" do
|
24
|
+
response.body.should be_an(AuctionInc::Shipping::Body)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
describe "#has_errors?" do
|
29
|
+
[1, 2].each do |type|
|
30
|
+
context "when there is a type #{type.to_s} error response" do
|
31
|
+
let(:xml_string) { File.read(remote_fixture_file("auction_inc_type_#{type.to_s}_error_response.xml")) }
|
32
|
+
|
33
|
+
it "should return true" do
|
34
|
+
response = AuctionInc::Shipping::Response.new(xml_string)
|
35
|
+
response.has_errors?.should be_true
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
[1, 2, 3].each do |level|
|
41
|
+
context "when there is a detail level #{level.to_s} response" do
|
42
|
+
let(:xml_string) { File.read(remote_fixture_file("auction_inc_detail_level_#{level.to_s}_response.xml")) }
|
43
|
+
|
44
|
+
it "should return false" do
|
45
|
+
response = AuctionInc::Shipping::Response.new(xml_string)
|
46
|
+
response.has_errors?.should be_false
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
describe "#error" do
|
53
|
+
context "when there is a type 1 error response" do
|
54
|
+
let(:xml_string) { File.read(remote_fixture_file("auction_inc_type_1_error_response.xml")) }
|
55
|
+
|
56
|
+
it "should include be error inside <Body/>" do
|
57
|
+
response = AuctionInc::Shipping::Response.new(xml_string)
|
58
|
+
response.error.should == response.body.error
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
context "when there is a type 2 error response" do
|
63
|
+
let(:xml_string) { File.read(remote_fixture_file("auction_inc_type_2_error_response.xml")) }
|
64
|
+
|
65
|
+
it "should be the first ship_rate error" do
|
66
|
+
response = AuctionInc::Shipping::Response.new(xml_string)
|
67
|
+
response.error.should == response.body.item_ship_rate.error
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
[1, 2, 3].each do |level|
|
72
|
+
context "when there is a detail level #{level.to_s} response" do
|
73
|
+
let(:xml_string) { File.read(remote_fixture_file("auction_inc_detail_level_#{level.to_s}_response.xml")) }
|
74
|
+
|
75
|
+
it "should be empty" do
|
76
|
+
response = AuctionInc::Shipping::Response.new(xml_string)
|
77
|
+
response.error.should be_nil
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
describe "#ship_rates" do
|
84
|
+
let(:xml_string) { File.read(remote_fixture_file("auction_inc_detail_level_1_response.xml")) }
|
85
|
+
it "should be a shortcut to #body.item_ship_rate.ship_rates" do
|
86
|
+
response = AuctionInc::Shipping::Response.new(xml_string)
|
87
|
+
response.ship_rates.should == response.body.item_ship_rate.ship_rates
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
<?xml version="2.1" encoding="utf-8" ?>
|
2
|
+
<Envelope>
|
3
|
+
<Header>
|
4
|
+
<Date>2008-10-28 19:53:14 GMT</Date>
|
5
|
+
</Header>
|
6
|
+
<Body>
|
7
|
+
<ItemShipRate>
|
8
|
+
<Currency>USD</Currency>
|
9
|
+
<ShipRateList>
|
10
|
+
<ShipRate>
|
11
|
+
<Valid>1</Valid>
|
12
|
+
<CarrierCode>USPS</CarrierCode>
|
13
|
+
<ServiceCode>USPSPM</ServiceCode>
|
14
|
+
<ServiceName>PriorityMail</ServiceName>
|
15
|
+
<CalcMethod>C</CalcMethod>
|
16
|
+
<Rate>48.26</Rate>
|
17
|
+
</ShipRate>
|
18
|
+
<ShipRate>
|
19
|
+
<Valid>1</Valid>
|
20
|
+
<CarrierCode>UPS</CarrierCode>
|
21
|
+
<ServiceCode>UPSGND</ServiceCode>
|
22
|
+
<ServiceName>Ground</ServiceName>
|
23
|
+
<CalcMethod>C</CalcMethod>
|
24
|
+
<Rate>31.21</Rate>
|
25
|
+
</ShipRate>
|
26
|
+
</ShipRateList>
|
27
|
+
</ItemShipRate>
|
28
|
+
</Body>
|
29
|
+
</Envelope>
|
@@ -0,0 +1,62 @@
|
|
1
|
+
<?xml version="2.1" encoding="utf-8" ?>
|
2
|
+
<Envelope>
|
3
|
+
<Header>
|
4
|
+
<Date>2008-10-28 19:53:14 GMT</Date>
|
5
|
+
</Header>
|
6
|
+
<Body>
|
7
|
+
<ItemShipRate>
|
8
|
+
<Currency>USD</Currency>
|
9
|
+
<ShipRateList>
|
10
|
+
<ShipRate>
|
11
|
+
<Valid>true</Valid>
|
12
|
+
<CarrierCode>USPS</CarrierCode>
|
13
|
+
<ServiceCode>USPPM</ServiceCode>
|
14
|
+
<ServiceName>USPS Priority Mail</ServiceName>
|
15
|
+
<CalcMethod>C</CalcMethod>
|
16
|
+
<Rate>11.50</Rate>
|
17
|
+
<CarrierRate>9.80</CarrierRate>
|
18
|
+
<Surcharges>0.00</Surcharges>
|
19
|
+
<FuelSurcharges>0.00</FuelSurcharges>
|
20
|
+
<HandlingFees>0.00</HandlingFees>
|
21
|
+
<DeclaredValue>19.95</DeclaredValue>
|
22
|
+
<InsuranceCharges>1.70</InsuranceCharges>
|
23
|
+
<Weight>10.00</Weight>
|
24
|
+
<PackageCount>1</PackageCount>
|
25
|
+
<FlatRateCode>FRB1</FlatRateCode>
|
26
|
+
</ShipRate>
|
27
|
+
<ShipRate>
|
28
|
+
<Valid>true</Valid>
|
29
|
+
<CarrierCode>UPS</CarrierCode>
|
30
|
+
<ServiceCode>UPSGND</ServiceCode>
|
31
|
+
<ServiceName>UPS Ground</ServiceName>
|
32
|
+
<CalcMethod>C</CalcMethod>
|
33
|
+
<Rate>11.30</Rate>
|
34
|
+
<CarrierRate>10.81</CarrierRate>
|
35
|
+
<Surcharges>0.00</Surcharges>
|
36
|
+
<FuelSurcharges>0.49</FuelSurcharges>
|
37
|
+
<HandlingFees>0.00</HandlingFees>
|
38
|
+
<DeclaredValue>19.95</DeclaredValue>
|
39
|
+
<InsuranceCharges>0.00</InsuranceCharges>
|
40
|
+
<Weight>10.00</Weight>
|
41
|
+
<PackageCount>1</PackageCount>
|
42
|
+
</ShipRate>
|
43
|
+
<ShipRate>
|
44
|
+
<Valid>true</Valid>
|
45
|
+
<CarrierCode>UPS</CarrierCode>
|
46
|
+
<ServiceCode>UPS2ND</ServiceCode>
|
47
|
+
<ServiceName>UPS 2 Day</ServiceName>
|
48
|
+
<CalcMethod>C</CalcMethod>
|
49
|
+
<Rate>27.47</Rate>
|
50
|
+
<CarrierRate>24.20</CarrierRate>
|
51
|
+
<Surcharges>0.00</Surcharges>
|
52
|
+
<FuelSurcharges>3.27</FuelSurcharges>
|
53
|
+
<HandlingFees>0.00</HandlingFees>
|
54
|
+
<DeclaredValue>19.95</DeclaredValue>
|
55
|
+
<InsuranceCharges>1.70</InsuranceCharges>
|
56
|
+
<Weight>10.00</Weight>
|
57
|
+
<PackageCount>1</PackageCount>
|
58
|
+
</ShipRate>
|
59
|
+
</ShipRateList>
|
60
|
+
</ItemShipRate>
|
61
|
+
</Body>
|
62
|
+
</Envelope>
|
@@ -0,0 +1,83 @@
|
|
1
|
+
<?xml version="2.1" encoding="utf-8" ?>
|
2
|
+
<Envelope>
|
3
|
+
<Header>
|
4
|
+
<Date>2008-10-28 19:53:14 GMT</Date>
|
5
|
+
</Header>
|
6
|
+
<Body>
|
7
|
+
<ItemShipRate>
|
8
|
+
<Currency>USD</Currency>
|
9
|
+
<ShipRateList>
|
10
|
+
<ShipRate>
|
11
|
+
<Valid>true</Valid>
|
12
|
+
<CarrierCode>USPS</CarrierCode>
|
13
|
+
<ServiceCode>USPPM</ServiceCode>
|
14
|
+
<ServiceName>USPS Priority Mail</ServiceName>
|
15
|
+
<CalcMethod>C</CalcMethod>
|
16
|
+
<Rate>39.67</Rate>
|
17
|
+
<CarrierRate>30.50</CarrierRate>
|
18
|
+
<Surcharges>2.40</Surcharges>
|
19
|
+
<FuelSurcharges>1.67</FuelSurcharges>
|
20
|
+
<HandlingFees>0.00</HandlingFees>
|
21
|
+
<DeclaredValue>19.95</DeclaredValue>
|
22
|
+
<InsuranceCharges>5.10</InsuranceCharges>
|
23
|
+
<Weight>20.00</Weight>
|
24
|
+
<PackageCount>2</PackageCount>
|
25
|
+
<FlatRateCode>NONE</FlatRateCode>
|
26
|
+
<PackageDetail>
|
27
|
+
<Package>
|
28
|
+
<Quantity>1</Quantity>
|
29
|
+
<PackMethod>T</PackMethod>
|
30
|
+
<Origin>01610</Origin>
|
31
|
+
<DeclaredValue>19.95</DeclaredValue>
|
32
|
+
<Weight>10</Weight>
|
33
|
+
<Length>5</Length>
|
34
|
+
<Width>3</Width>
|
35
|
+
<Height>4</Height>
|
36
|
+
<OversizeCode>NONE</OversizeCode>
|
37
|
+
<FlatRateCode>NONE</FlatRateCode>
|
38
|
+
<CarrierRate>9.80</CarrierRate>
|
39
|
+
<Surcharge>2.40</Surcharge>
|
40
|
+
<FuelSurcharge>1.67</FuelSurcharge>
|
41
|
+
<Insurance>1.70</Insurance>
|
42
|
+
<Handling>0</Handling>
|
43
|
+
<ShipRate>15.57</ShipRate>
|
44
|
+
<PkgItem>
|
45
|
+
<RefCode>red-keyboard-101</RefCode>
|
46
|
+
<Qty>1</Qty>
|
47
|
+
<Weight>5</Weight>
|
48
|
+
</PkgItem>
|
49
|
+
<PkgItem>
|
50
|
+
<RefCode>yellow-keyboard-101-e</RefCode>
|
51
|
+
<Qty>1</Qty>
|
52
|
+
<Weight>5</Weight>
|
53
|
+
</PkgItem>
|
54
|
+
</Package>
|
55
|
+
<Package>
|
56
|
+
<Quantity>2</Quantity>
|
57
|
+
<PackMethod>S</PackMethod>
|
58
|
+
<Origin>01610</Origin>
|
59
|
+
<DeclaredValue>19.95</DeclaredValue>
|
60
|
+
<Weight>1</Weight>
|
61
|
+
<Length>1</Length>
|
62
|
+
<Width>1</Width>
|
63
|
+
<Height>1</Height>
|
64
|
+
<OversizeCode>NONE</OversizeCode>
|
65
|
+
<FlatRateCode>NONE</FlatRateCode>
|
66
|
+
<CarrierRate>10.35</CarrierRate>
|
67
|
+
<Surcharge>0</Surcharge>
|
68
|
+
<FuelSurcharge>0</FuelSurcharge>
|
69
|
+
<Insurance>1.70</Insurance>
|
70
|
+
<Handling>0</Handling>
|
71
|
+
<ShipRate>12.05</ShipRate>
|
72
|
+
<PkgItem>
|
73
|
+
<RefCode>mouse</RefCode>
|
74
|
+
<Qty>1</Qty>
|
75
|
+
<Weight>1</Weight>
|
76
|
+
</PkgItem>
|
77
|
+
</Package>
|
78
|
+
</PackageDetail>
|
79
|
+
</ShipRate>
|
80
|
+
</ShipRateList>
|
81
|
+
</ItemShipRate>
|
82
|
+
</Body>
|
83
|
+
</Envelope>
|
@@ -0,0 +1,14 @@
|
|
1
|
+
<?xml version="2.1 encoding=iso-8859-1" utf-8 ?>
|
2
|
+
<Envelope>
|
3
|
+
<Header>
|
4
|
+
<AccountId>your access key</AccountId>
|
5
|
+
</Header>
|
6
|
+
<Body>
|
7
|
+
<Error>
|
8
|
+
<Code>560</Code>
|
9
|
+
<Message>Invalid Account Id</Message>
|
10
|
+
<Detail>USPPM:Item weight exceeds limit</Detail>
|
11
|
+
<Severity>CRITICAL</Severity>
|
12
|
+
</Error>
|
13
|
+
</Body>
|
14
|
+
</Envelope>
|
@@ -0,0 +1,28 @@
|
|
1
|
+
<?xml version="2.1" encoding="utf-8" ?>
|
2
|
+
<Envelope>
|
3
|
+
<Header>
|
4
|
+
<Date>2008-10-28 19:53:14 GMT</Date>
|
5
|
+
</Header>
|
6
|
+
<Body>
|
7
|
+
<ItemShipRate>
|
8
|
+
<Currency>USD</Currency>
|
9
|
+
<ShipRateList>
|
10
|
+
<ShipRate>
|
11
|
+
<Valid>False</Valid>
|
12
|
+
<CarrierCode>USPS</CarrierCode>
|
13
|
+
<ServiceCode>USPSPM</ServiceCode>
|
14
|
+
<ServiceName>PriorityMail</ServiceName>
|
15
|
+
<CalcMethod>C</CalcMethod>
|
16
|
+
<Rate></Rate>
|
17
|
+
<ErrorList>
|
18
|
+
<Error>
|
19
|
+
<Code>710</Code>
|
20
|
+
<Message>Item exceeds maximum weight</Message>
|
21
|
+
<Severity>NOTICE</Severity>
|
22
|
+
</Error>
|
23
|
+
</ErrorList>
|
24
|
+
</ShipRate>
|
25
|
+
</ShipRateList>
|
26
|
+
</ItemShipRate>
|
27
|
+
</Body>
|
28
|
+
</Envelope>
|
data/spec/spec_helper.rb
CHANGED
@@ -1,8 +1,22 @@
|
|
1
1
|
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
2
2
|
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
3
|
+
|
3
4
|
require 'auction_inc'
|
4
5
|
require 'spec'
|
5
6
|
require 'spec/autorun'
|
6
7
|
|
7
8
|
Spec::Runner.configure do |config|
|
8
9
|
end
|
10
|
+
|
11
|
+
require 'fakeweb'
|
12
|
+
|
13
|
+
FakeWeb.allow_net_connect = false
|
14
|
+
|
15
|
+
def remote_fixture_file(filename)
|
16
|
+
return '' if filename == ''
|
17
|
+
File.expand_path(File.join(File.dirname(__FILE__), 'fixtures', filename))
|
18
|
+
end
|
19
|
+
|
20
|
+
# Fake out the call to Auction Inc.
|
21
|
+
# e.g. http://api.auctioninc.com
|
22
|
+
# FakeWeb.register_uri(:post, %r|api\.auctioninc\.com/|, :body => remote_fixture_file('auction_inc_get_time_response.xml'))
|
metadata
CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
|
|
4
4
|
prerelease: false
|
5
5
|
segments:
|
6
6
|
- 0
|
7
|
-
-
|
7
|
+
- 2
|
8
8
|
- 0
|
9
|
-
version: 0.
|
9
|
+
version: 0.2.0
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- pjkelly
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2010-08-
|
17
|
+
date: 2010-08-05 00:00:00 -07:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
@@ -47,6 +47,21 @@ dependencies:
|
|
47
47
|
version: 1.2.9
|
48
48
|
type: :development
|
49
49
|
version_requirements: *id002
|
50
|
+
- !ruby/object:Gem::Dependency
|
51
|
+
name: fakeweb
|
52
|
+
prerelease: false
|
53
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
54
|
+
none: false
|
55
|
+
requirements:
|
56
|
+
- - ">="
|
57
|
+
- !ruby/object:Gem::Version
|
58
|
+
segments:
|
59
|
+
- 1
|
60
|
+
- 2
|
61
|
+
- 8
|
62
|
+
version: 1.2.8
|
63
|
+
type: :development
|
64
|
+
version_requirements: *id003
|
50
65
|
description: Ruby wrapper around Auction Inc's shipping API.
|
51
66
|
email: pj@crushlovely.com
|
52
67
|
executables: []
|
@@ -63,6 +78,7 @@ files:
|
|
63
78
|
- README.rdoc
|
64
79
|
- Rakefile
|
65
80
|
- VERSION
|
81
|
+
- auction_inc.gemspec
|
66
82
|
- lib/auction_inc.rb
|
67
83
|
- lib/auction_inc/shipping/base.rb
|
68
84
|
- lib/auction_inc/shipping/carriers.yml
|
@@ -77,13 +93,24 @@ files:
|
|
77
93
|
- lib/auction_inc/shipping/node/get_item_ship_rate_xs.rb
|
78
94
|
- lib/auction_inc/shipping/node/header.rb
|
79
95
|
- lib/auction_inc/shipping/node/item.rb
|
96
|
+
- lib/auction_inc/shipping/node/item_ship_rate.rb
|
80
97
|
- lib/auction_inc/shipping/node/origin_address.rb
|
81
98
|
- lib/auction_inc/shipping/node/package.rb
|
82
99
|
- lib/auction_inc/shipping/node/pkg_item.rb
|
83
100
|
- lib/auction_inc/shipping/node/service.rb
|
84
101
|
- lib/auction_inc/shipping/node/ship_rate.rb
|
102
|
+
- lib/auction_inc/shipping/response.rb
|
85
103
|
- lib/auction_inc/shipping/xs.rb
|
86
104
|
- spec/auction_inc/shipping/base_spec.rb
|
105
|
+
- spec/auction_inc/shipping/error_spec.rb
|
106
|
+
- spec/auction_inc/shipping/item_ship_rate_spec.rb
|
107
|
+
- spec/auction_inc/shipping/response_spec.rb
|
108
|
+
- spec/fixtures/auction_inc_detail_level_1_response.xml
|
109
|
+
- spec/fixtures/auction_inc_detail_level_2_response.xml
|
110
|
+
- spec/fixtures/auction_inc_detail_level_3_response.xml
|
111
|
+
- spec/fixtures/auction_inc_get_time_response.xml
|
112
|
+
- spec/fixtures/auction_inc_type_1_error_response.xml
|
113
|
+
- spec/fixtures/auction_inc_type_2_error_response.xml
|
87
114
|
- spec/spec.opts
|
88
115
|
- spec/spec_helper.rb
|
89
116
|
has_rdoc: true
|
@@ -120,4 +147,7 @@ specification_version: 3
|
|
120
147
|
summary: Ruby wrapper around Auction Inc's shipping API.
|
121
148
|
test_files:
|
122
149
|
- spec/auction_inc/shipping/base_spec.rb
|
150
|
+
- spec/auction_inc/shipping/error_spec.rb
|
151
|
+
- spec/auction_inc/shipping/item_ship_rate_spec.rb
|
152
|
+
- spec/auction_inc/shipping/response_spec.rb
|
123
153
|
- spec/spec_helper.rb
|