fedex 0.0.1 → 0.1.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/Readme.md +3 -3
- data/fedex.gemspec +3 -3
- data/lib/fedex/shipment.rb +10 -2
- data/lib/fedex/version.rb +1 -1
- data/spec/fedex_spec.rb +73 -26
- metadata +46 -75
data/Readme.md
CHANGED
@@ -33,9 +33,9 @@ Define the recipient:
|
|
33
33
|
:company => "Company",
|
34
34
|
:phone_number => "555-555-5555",
|
35
35
|
:address => "Main Street",
|
36
|
-
:city => "
|
37
|
-
:state => "
|
38
|
-
:postal_code => "
|
36
|
+
:city => "Franklin Park",
|
37
|
+
:state => "IL",
|
38
|
+
:postal_code => "60131",
|
39
39
|
:country_code => "US",
|
40
40
|
:residential => "false" }
|
41
41
|
Define the packages(multiple packages in a single shipment are allowed):
|
data/fedex.gemspec
CHANGED
@@ -13,9 +13,9 @@ Gem::Specification.new do |s|
|
|
13
13
|
s.description = %q{Ruby Library to use Fedex Web Services(version 10)}
|
14
14
|
|
15
15
|
s.rubyforge_project = "fedex"
|
16
|
-
s.add_development_dependency "rspec"
|
17
|
-
s.add_dependency 'httparty'
|
18
|
-
s.add_dependency 'nokogiri'
|
16
|
+
s.add_development_dependency "rspec", '~> 2.6.0'
|
17
|
+
s.add_dependency 'httparty', '~> 0.8.0'
|
18
|
+
s.add_dependency 'nokogiri', '~> 1.5.0'
|
19
19
|
# s.add_runtime_dependency "rest-client"
|
20
20
|
|
21
21
|
s.files = `git ls-files`.split("\n")
|
data/lib/fedex/shipment.rb
CHANGED
@@ -64,7 +64,7 @@ module Fedex
|
|
64
64
|
rate_details = [response[:rate_reply][:rate_reply_details][:rated_shipment_details]].flatten.first[:shipment_rate_detail]
|
65
65
|
rate = Fedex::Rate.new(rate_details)
|
66
66
|
else
|
67
|
-
error_message = (response[:rate_reply].nil? ? api_response["Fault"]["detail"]["fault"]["details"]["ValidationFailureDetail"]["message"] : response[:rate_reply][:notifications][:message]) rescue "Unexpected error has occurred
|
67
|
+
error_message = (response[:rate_reply].nil? ? api_response["Fault"]["detail"]["fault"]["details"]["ValidationFailureDetail"]["message"] : [response[:rate_reply][:notifications]].flatten.first[:message]) rescue "Unexpected error has occurred"
|
68
68
|
raise RateError, error_message
|
69
69
|
end
|
70
70
|
end
|
@@ -129,7 +129,7 @@ module Fedex
|
|
129
129
|
def add_requested_shipment(xml)
|
130
130
|
xml.RequestedShipment{
|
131
131
|
xml.DropoffType @shipping_options[:drop_off_type] ||= "REGULAR_PICKUP"
|
132
|
-
xml.ServiceType
|
132
|
+
xml.ServiceType service_type
|
133
133
|
xml.PackagingType @shipping_options[:packaging_type] ||= "YOUR_PACKAGING"
|
134
134
|
add_shipper(xml)
|
135
135
|
add_recipient(xml)
|
@@ -276,5 +276,13 @@ module Fedex
|
|
276
276
|
(!response[:rate_reply].nil? and %w{SUCCESS WARNING NOTE}.include? response[:rate_reply][:highest_severity])
|
277
277
|
end
|
278
278
|
|
279
|
+
# Use GROUND_HOME_DELIVERY for shipments going to a residential address within the US.
|
280
|
+
def service_type
|
281
|
+
if @recipient[:residential].to_s =~ /true/i and @service_type =~ /GROUND/i and @recipient[:country_code] =~ /US/i
|
282
|
+
"GROUND_HOME_DELIVERY"
|
283
|
+
else
|
284
|
+
@service_type
|
285
|
+
end
|
286
|
+
end
|
279
287
|
end
|
280
288
|
end
|
data/lib/fedex/version.rb
CHANGED
data/spec/fedex_spec.rb
CHANGED
@@ -1,8 +1,13 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
describe Fedex::Shipment do
|
3
3
|
let(:test_keys) do
|
4
|
-
{:key => "
|
4
|
+
{:key => "xxxx", :password => "xxxx", :account_number => "xxxx", :meter => "xxxx", :mode => "test"}
|
5
5
|
end
|
6
|
+
|
7
|
+
let(:production_keys) do
|
8
|
+
{:key => "xxxx", :password => "xxxx", :account_number => "xxxx", :meter => "xxxx", :mode => "production"}
|
9
|
+
end
|
10
|
+
|
6
11
|
context "missing required parameters" do
|
7
12
|
it "should raise Fedex::Rate exception" do
|
8
13
|
lambda{ Fedex::Shipment.new}.should raise_error(Fedex::RateError)
|
@@ -14,38 +19,80 @@ describe Fedex::Shipment do
|
|
14
19
|
it "should create a valid instance" do
|
15
20
|
subject.should be_an_instance_of(Fedex::Shipment)
|
16
21
|
end
|
17
|
-
end
|
18
|
-
|
19
|
-
before(:each) do
|
20
|
-
@fedex = Fedex::Shipment.new(test_keys)
|
21
|
-
@shipper = {:name => "Sender", :company => "Company", :phone_number => "555-555-5555", :address => "Main Street", :city => "Harrison", :state => "AR", :postal_code => "72601", :country_code => "US"}
|
22
|
-
@recipient = {:name => "Recipient", :company => "Company", :phone_number => "555-555-5555", :address => "Main Street", :city => "Franklin Park", :state => "IL", :postal_code => "60131", :country_code => "US", :residential => "false"}
|
23
|
-
@packages = []
|
24
|
-
@packages << { :weight => {:units => "LB", :value => 2},
|
25
|
-
:dimensions => {:length => 10, :width => 5, :height => 4, :units => "IN" } }
|
26
|
-
@packages << { :weight => {:units => "LB", :value => 6},
|
27
|
-
:dimensions => {:length => 5, :width => 5, :height => 4, :units => "IN" } }
|
28
|
-
@shipping_options = { :packaging_type => "YOUR_PACKAGING", :drop_off_type => "REGULAR_PICKUP" }
|
29
22
|
end
|
30
23
|
|
31
|
-
context "
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
24
|
+
context "Published Rates(Development Mode)" do
|
25
|
+
before(:each) do
|
26
|
+
@fedex = Fedex::Shipment.new(test_keys)
|
27
|
+
@shipper = {:name => "Sender", :company => "Company", :phone_number => "555-555-5555", :address => "Main Street", :city => "Harrison", :state => "AR", :postal_code => "72601", :country_code => "US"}
|
28
|
+
@recipient = {:name => "Recipient", :company => "Company", :phone_number => "555-555-5555", :address => "Main Street", :city => "Frankin Park", :state => "IL", :postal_code => "60131", :country_code => "US", :residential => true }
|
29
|
+
@packages = []
|
30
|
+
@packages << { :weight => {:units => "LB", :value => 2},
|
31
|
+
:dimensions => {:length => 10, :width => 5, :height => 4, :units => "IN" } }
|
32
|
+
@packages << { :weight => {:units => "LB", :value => 6},
|
33
|
+
:dimensions => {:length => 5, :width => 5, :height => 4, :units => "IN" } }
|
34
|
+
@shipping_options = { :packaging_type => "YOUR_PACKAGING", :drop_off_type => "REGULAR_PICKUP" }
|
35
|
+
end
|
36
|
+
|
37
|
+
context "Domestic Shipment" do
|
38
|
+
describe "rate" do
|
39
|
+
it "should return rate" do
|
40
|
+
rate = @fedex.rate({:shipper=>@shipper, :recipient => @recipient, :packages => @packages, :service_type => "FEDEX_GROUND"})
|
41
|
+
rate.should be_an_instance_of(Fedex::Rate)
|
42
|
+
puts rate.total_net_charge
|
43
|
+
|
44
|
+
end
|
36
45
|
end
|
37
46
|
end
|
47
|
+
|
48
|
+
context "Canadian Shipment" do
|
49
|
+
describe "rate" do
|
50
|
+
it "shoule return international fees" do
|
51
|
+
recipient = {:name => "Recipient", :company => "Company", :phone_number => "555-555-5555", :address=>"Address Line 1", :city => "Richmond", :state => "BC",
|
52
|
+
:postal_code => "V7C4V4", :country_code => "CA", :residential => "true" }
|
53
|
+
rate = @fedex.rate({:shipper => @shipper, :recipient => recipient, :packages => @packages, :service_type => "FEDEX_GROUND", :shipping_options => @shipping_options })
|
54
|
+
rate.should be_an_instance_of(Fedex::Rate)
|
55
|
+
puts rate.total_net_charge
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
38
59
|
end
|
39
60
|
|
40
|
-
context "
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
61
|
+
context "Discounted Rates(Production Mode)" do
|
62
|
+
before(:each) do
|
63
|
+
@fedex = Fedex::Shipment.new(production_keys)
|
64
|
+
@shipper = {:name => "Sender", :company => "Company", :phone_number => "555-555-5555", :address => "Main Street", :city => "Harrison", :state => "AR", :postal_code => "72601", :country_code => "US"}
|
65
|
+
@recipient = {:name => "Recipient", :company => "Company", :phone_number => "555-555-5555", :address => "Main Street", :city => "Frankin Park", :state => "IL", :postal_code => "60131", :country_code => "US", :residential => true }
|
66
|
+
@packages = []
|
67
|
+
@packages << { :weight => {:units => "LB", :value => 2},
|
68
|
+
:dimensions => {:length => 10, :width => 5, :height => 4, :units => "IN" } }
|
69
|
+
@packages << { :weight => {:units => "LB", :value => 6},
|
70
|
+
:dimensions => {:length => 5, :width => 5, :height => 4, :units => "IN" } }
|
71
|
+
@shipping_options = { :packaging_type => "YOUR_PACKAGING", :drop_off_type => "REGULAR_PICKUP" }
|
72
|
+
end
|
73
|
+
|
74
|
+
context "Domestic Shipment" do
|
75
|
+
describe "rate" do
|
76
|
+
it "should return rate" do
|
77
|
+
rate = @fedex.rate({:shipper=>@shipper, :recipient => @recipient, :packages => @packages, :service_type => "FEDEX_GROUND"})
|
78
|
+
rate.should be_an_instance_of(Fedex::Rate)
|
79
|
+
puts rate.total_net_charge
|
80
|
+
|
81
|
+
end
|
47
82
|
end
|
48
83
|
end
|
49
|
-
end
|
50
84
|
|
85
|
+
context "Canadian Shipment" do
|
86
|
+
describe "rate" do
|
87
|
+
it "shoule return international fees" do
|
88
|
+
recipient = {:name => "Recipient", :company => "Company", :phone_number => "555-555-5555", :address=>"Address Line 1", :city => "Richmond", :state => "BC",
|
89
|
+
:postal_code => "V7C4V4", :country_code => "CA", :residential => "true" }
|
90
|
+
rate = @fedex.rate({:shipper => @shipper, :recipient => recipient, :packages => @packages, :service_type => "FEDEX_GROUND", :shipping_options => @shipping_options })
|
91
|
+
rate.should be_an_instance_of(Fedex::Rate)
|
92
|
+
puts rate.total_net_charge
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
51
98
|
end
|
metadata
CHANGED
@@ -1,75 +1,56 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: fedex
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
prerelease:
|
6
|
-
segments:
|
7
|
-
- 0
|
8
|
-
- 0
|
9
|
-
- 1
|
10
|
-
version: 0.0.1
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
prerelease:
|
11
6
|
platform: ruby
|
12
|
-
authors:
|
7
|
+
authors:
|
13
8
|
- Jazmin Schroeder
|
14
9
|
autorequire:
|
15
10
|
bindir: bin
|
16
11
|
cert_chain: []
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
dependencies:
|
21
|
-
- !ruby/object:Gem::Dependency
|
12
|
+
date: 2011-11-03 00:00:00.000000000Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
22
15
|
name: rspec
|
23
|
-
|
24
|
-
requirement: &id001 !ruby/object:Gem::Requirement
|
16
|
+
requirement: &70151002532920 !ruby/object:Gem::Requirement
|
25
17
|
none: false
|
26
|
-
requirements:
|
27
|
-
- -
|
28
|
-
- !ruby/object:Gem::Version
|
29
|
-
|
30
|
-
segments:
|
31
|
-
- 0
|
32
|
-
version: "0"
|
18
|
+
requirements:
|
19
|
+
- - ~>
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: 2.6.0
|
33
22
|
type: :development
|
34
|
-
version_requirements: *id001
|
35
|
-
- !ruby/object:Gem::Dependency
|
36
|
-
name: httparty
|
37
23
|
prerelease: false
|
38
|
-
|
24
|
+
version_requirements: *70151002532920
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: httparty
|
27
|
+
requirement: &70151002532420 !ruby/object:Gem::Requirement
|
39
28
|
none: false
|
40
|
-
requirements:
|
41
|
-
- -
|
42
|
-
- !ruby/object:Gem::Version
|
43
|
-
|
44
|
-
segments:
|
45
|
-
- 0
|
46
|
-
version: "0"
|
29
|
+
requirements:
|
30
|
+
- - ~>
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: 0.8.0
|
47
33
|
type: :runtime
|
48
|
-
version_requirements: *id002
|
49
|
-
- !ruby/object:Gem::Dependency
|
50
|
-
name: nokogiri
|
51
34
|
prerelease: false
|
52
|
-
|
35
|
+
version_requirements: *70151002532420
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: nokogiri
|
38
|
+
requirement: &70151002531960 !ruby/object:Gem::Requirement
|
53
39
|
none: false
|
54
|
-
requirements:
|
55
|
-
- -
|
56
|
-
- !ruby/object:Gem::Version
|
57
|
-
|
58
|
-
segments:
|
59
|
-
- 0
|
60
|
-
version: "0"
|
40
|
+
requirements:
|
41
|
+
- - ~>
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: 1.5.0
|
61
44
|
type: :runtime
|
62
|
-
|
45
|
+
prerelease: false
|
46
|
+
version_requirements: *70151002531960
|
63
47
|
description: Ruby Library to use Fedex Web Services(version 10)
|
64
|
-
email:
|
48
|
+
email:
|
65
49
|
- jazminschroeder@gmail.com
|
66
50
|
executables: []
|
67
|
-
|
68
51
|
extensions: []
|
69
|
-
|
70
52
|
extra_rdoc_files: []
|
71
|
-
|
72
|
-
files:
|
53
|
+
files:
|
73
54
|
- .gitignore
|
74
55
|
- .rspec
|
75
56
|
- Gemfile
|
@@ -82,40 +63,30 @@ files:
|
|
82
63
|
- lib/fedex/version.rb
|
83
64
|
- spec/fedex_spec.rb
|
84
65
|
- spec/spec_helper.rb
|
85
|
-
has_rdoc: true
|
86
66
|
homepage: https://github.com/jazminschroeder/fedex
|
87
67
|
licenses: []
|
88
|
-
|
89
68
|
post_install_message:
|
90
69
|
rdoc_options: []
|
91
|
-
|
92
|
-
require_paths:
|
70
|
+
require_paths:
|
93
71
|
- lib
|
94
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
72
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
95
73
|
none: false
|
96
|
-
requirements:
|
97
|
-
- -
|
98
|
-
- !ruby/object:Gem::Version
|
99
|
-
|
100
|
-
|
101
|
-
- 0
|
102
|
-
version: "0"
|
103
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
74
|
+
requirements:
|
75
|
+
- - ! '>='
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '0'
|
78
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
104
79
|
none: false
|
105
|
-
requirements:
|
106
|
-
- -
|
107
|
-
- !ruby/object:Gem::Version
|
108
|
-
|
109
|
-
segments:
|
110
|
-
- 0
|
111
|
-
version: "0"
|
80
|
+
requirements:
|
81
|
+
- - ! '>='
|
82
|
+
- !ruby/object:Gem::Version
|
83
|
+
version: '0'
|
112
84
|
requirements: []
|
113
|
-
|
114
85
|
rubyforge_project: fedex
|
115
|
-
rubygems_version: 1.
|
86
|
+
rubygems_version: 1.8.6
|
116
87
|
signing_key:
|
117
88
|
specification_version: 3
|
118
89
|
summary: Fedex Rate Webservice
|
119
|
-
test_files:
|
90
|
+
test_files:
|
120
91
|
- spec/fedex_spec.rb
|
121
92
|
- spec/spec_helper.rb
|