fedex 1.0.0 → 2.0.1

Sign up to get free protection for your applications and to get access to all the features.
data/lib/fedex/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Fedex
2
- VERSION = "1.0.0"
2
+ VERSION = "2.0.1"
3
3
  end
@@ -0,0 +1,54 @@
1
+ require 'spec_helper'
2
+
3
+ module Fedex
4
+ describe Label do
5
+ describe "ship service for label" do
6
+ let(:fedex) { Shipment.new(fedex_credentials) }
7
+ let(:shipper) do
8
+ {:name => "Sender", :company => "Company", :phone_number => "555-555-5555", :address => "Main Street", :city => "Harrison", :state => "AR", :postal_code => "72601", :country_code => "US"}
9
+ end
10
+ let(:recipient) do
11
+ {: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 }
12
+ end
13
+ let(:packages) do
14
+ [
15
+ {
16
+ :weight => {:units => "LB", :value => 2},
17
+ :dimensions => {:length => 10, :width => 5, :height => 4, :units => "IN" }
18
+ }
19
+ ]
20
+ end
21
+ let(:shipping_options) do
22
+ { :packaging_type => "YOUR_PACKAGING", :drop_off_type => "REGULAR_PICKUP" }
23
+ end
24
+
25
+ context "domestic shipment", :vcr do
26
+ let(:filename) {
27
+ require 'tmpdir'
28
+ File.join(Dir.tmpdir, "label#{rand(15000)}.pdf")
29
+ }
30
+ let(:options) do
31
+ {:shipper => shipper, :recipient => recipient, :packages => packages, :service_type => "FEDEX_GROUND", :filename => filename}
32
+ end
33
+
34
+ before do
35
+ @label = fedex.label(options)
36
+ end
37
+
38
+ it "returns a label" do
39
+ @label.should be_an_instance_of(Label)
40
+ end
41
+
42
+ it "creates a label file" do
43
+ File.should exist(filename)
44
+ end
45
+
46
+ after do
47
+ require 'fileutils'
48
+ FileUtils.rm_r(filename) if File.exist?(filename)
49
+ end
50
+ end
51
+
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,149 @@
1
+ require 'spec_helper'
2
+
3
+ module Fedex
4
+ describe Shipment do
5
+ context "missing required parameters" do
6
+ it "should raise Rate exception" do
7
+ lambda{ Shipment.new}.should raise_error(RateError)
8
+ end
9
+ end
10
+
11
+ context "required parameters present" do
12
+ subject { Shipment.new(fedex_credentials) }
13
+ it "should create a valid instance" do
14
+ subject.should be_an_instance_of(Shipment)
15
+ end
16
+ end
17
+
18
+ describe "rate service" do
19
+ let(:fedex) { Shipment.new(fedex_credentials) }
20
+ let(:shipper) do
21
+ {:name => "Sender", :company => "Company", :phone_number => "555-555-5555", :address => "Main Street", :city => "Harrison", :state => "AR", :postal_code => "72601", :country_code => "US"}
22
+ end
23
+ let(:recipient) do
24
+ {: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 }
25
+ end
26
+ let(:packages) do
27
+ [
28
+ {
29
+ :weight => {:units => "LB", :value => 2},
30
+ :dimensions => {:length => 10, :width => 5, :height => 4, :units => "IN" }
31
+ },
32
+ {
33
+ :weight => {:units => "LB", :value => 6},
34
+ :dimensions => {:length => 5, :width => 5, :height => 4, :units => "IN" }
35
+ }
36
+ ]
37
+ end
38
+ let(:shipping_options) do
39
+ { :packaging_type => "YOUR_PACKAGING", :drop_off_type => "REGULAR_PICKUP" }
40
+ end
41
+
42
+ context "domestic shipment", :vcr do
43
+ it "should return a rate" do
44
+ rate = fedex.rate({:shipper => shipper, :recipient => recipient, :packages => packages, :service_type => "FEDEX_GROUND"})
45
+ rate.should be_an_instance_of(Rate)
46
+ end
47
+ end
48
+
49
+ context "canadian shipment", :vcr do
50
+ it "should return a rate" do
51
+ canadian_recipient = {:name => "Recipient", :company => "Company", :phone_number => "555-555-5555", :address=>"Address Line 1", :city => "Richmond", :state => "BC", :postal_code => "V7C4V4", :country_code => "CA", :residential => "true" }
52
+ rate = fedex.rate({:shipper => shipper, :recipient => canadian_recipient, :packages => packages, :service_type => "FEDEX_GROUND"})
53
+ rate.should be_an_instance_of(Rate)
54
+ end
55
+ end
56
+
57
+ context "canadian shipment including customs", :vcr do
58
+ it "should return a rate including international fees" do
59
+ canadian_recipient = {:name => "Recipient", :company => "Company", :phone_number => "555-555-5555", :address=>"Address Line 1", :city => "Richmond", :state => "BC", :postal_code => "V7C4V4", :country_code => "CA", :residential => "true" }
60
+ broker = {
61
+ :account_number => "510087143",
62
+ :tins => { :tin_type => "BUSINESS_NATIONAL",
63
+ :number => "431870271",
64
+ :usage => "Usage" },
65
+ :contact => { :contact_id => "1",
66
+ :person_name => "Broker Name",
67
+ :title => "Broker",
68
+ :company_name => "Broker One",
69
+ :phone_number => "555-555-5555",
70
+ :phone_extension => "555-555-5555",
71
+ :pager_number => "555",
72
+ :fax_number=> "555-555-5555",
73
+ :e_mail_address => "contact@me.com" },
74
+ :address => { :street_lines => "Main Street",
75
+ :city => "Franklin Park",
76
+ :state_or_province_code => 'IL',
77
+ :postal_code => '60131',
78
+ :urbanization_code => '123',
79
+ :country_code => 'US',
80
+ :residential => 'false' }
81
+ }
82
+
83
+ clearance_brokerage = "BROKER_INCLUSIVE"
84
+
85
+ importer_of_record= {
86
+ :account_number => "22222",
87
+ :tins => { :tin_type => "BUSINESS_NATIONAL",
88
+ :number => "22222",
89
+ :usage => "Usage" },
90
+ :contact => { :contact_id => "1",
91
+ :person_name => "Importer Name",
92
+ :title => "Importer",
93
+ :company_name => "Importer One",
94
+ :phone_number => "555-555-5555",
95
+ :phone_extension => "555-555-5555",
96
+ :pager_number => "555",
97
+ :fax_number=> "555-555-5555",
98
+ :e_mail_address => "contact@me.com" },
99
+ :address => { :street_lines => "Main Street",
100
+ :city => "Chicago",
101
+ :state_or_province_code => 'IL',
102
+ :postal_code => '60611',
103
+ :urbanization_code => '2308',
104
+ :country_code => 'US',
105
+ :residential => 'false' }
106
+ }
107
+
108
+ recipient_customs_id = { :type => 'COMPANY',
109
+ :value => '1254587' }
110
+
111
+
112
+ duties_payment = { :payment_type => "SENDER",
113
+ :payor => { :account_number => "510087143",
114
+ :country_code => "US" } }
115
+
116
+ customs_value = { :currency => "USD",
117
+ :amount => "200" }
118
+ commodities = [{
119
+ :name => "Cotton Coat",
120
+ :number_of_pieces => "2",
121
+ :description => "Cotton Coat",
122
+ :country_of_manufacture => "US",
123
+ :harmonized_code => "6103320000",
124
+ :weight => {:units => "LB", :value => "2"},
125
+ :quantity => "3",
126
+ :unit_price => {:currency => "USD", :amount => "50" },
127
+ :customs_value => {:currency => "USD", :amount => "150" }
128
+ },
129
+ {
130
+ :name => "Poster",
131
+ :number_of_pieces => "1",
132
+ :description => "Paper Poster",
133
+ :country_of_manufacture => "US",
134
+ :harmonized_code => "4817100000",
135
+ :weight => {:units => "LB", :value => "0.2"},
136
+ :quantity => "3",
137
+ :unit_price => {:currency => "USD", :amount => "50" },
138
+ :customs_value => {:currency => "USD", :amount => "150" }
139
+ }
140
+ ]
141
+
142
+ customs_clearance = { :broker => broker, :clearance_brokerage => clearance_brokerage, :importer_of_record => importer_of_record, :recipient_customs_id => recipient_customs_id, :duties_payment => duties_payment, :commodities => commodities }
143
+ rate = fedex.rate({:shipper => shipper, :recipient => canadian_recipient, :packages => packages, :service_type => "FEDEX_GROUND", :customs_clearance => customs_clearance})
144
+ rate.should be_an_instance_of(Rate)
145
+ end
146
+ end
147
+ end
148
+ end
149
+ end
data/spec/spec_helper.rb CHANGED
@@ -1 +1,7 @@
1
+ require 'rspec'
1
2
  require 'fedex'
3
+ require 'support/vcr'
4
+
5
+ def fedex_credentials
6
+ @fedex_credentials ||= YAML.load(File.read("#{File.dirname(__FILE__)}/config/fedex_credentials.yml"))["development"]
7
+ end
@@ -0,0 +1,15 @@
1
+ require 'vcr'
2
+
3
+ VCR.configure do |c|
4
+ c.cassette_library_dir = File.expand_path('../../vcr', __FILE__)
5
+ c.hook_into :fakeweb
6
+ end
7
+
8
+ RSpec.configure do |c|
9
+ c.include Fedex::Helpers
10
+ c.treat_symbols_as_metadata_keys_with_true_values = true
11
+ c.around(:each, :vcr) do |example|
12
+ name = underscorize(example.metadata[:full_description].split(/\s+/, 2).join("/")).gsub(/[^\w\/]+/, "_")
13
+ VCR.use_cassette(name) { example.call }
14
+ end
15
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fedex
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 2.0.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,41 +9,63 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-03-18 00:00:00.000000000Z
12
+ date: 2012-05-03 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
- name: rspec
16
- requirement: &70272415391000 !ruby/object:Gem::Requirement
15
+ name: httparty
16
+ requirement: &70228298304000 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
20
20
  - !ruby/object:Gem::Version
21
- version: 2.6.0
22
- type: :development
21
+ version: 0.8.0
22
+ type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70272415391000
24
+ version_requirements: *70228298304000
25
25
  - !ruby/object:Gem::Dependency
26
- name: httparty
27
- requirement: &70272415390500 !ruby/object:Gem::Requirement
26
+ name: nokogiri
27
+ requirement: &70228298303500 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ~>
31
31
  - !ruby/object:Gem::Version
32
- version: 0.8.0
32
+ version: 1.5.0
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *70272415390500
35
+ version_requirements: *70228298303500
36
36
  - !ruby/object:Gem::Dependency
37
- name: nokogiri
38
- requirement: &70272415390040 !ruby/object:Gem::Requirement
37
+ name: rspec
38
+ requirement: &70228298303000 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ~>
42
42
  - !ruby/object:Gem::Version
43
- version: 1.5.0
44
- type: :runtime
43
+ version: 2.9.0
44
+ type: :development
45
+ prerelease: false
46
+ version_requirements: *70228298303000
47
+ - !ruby/object:Gem::Dependency
48
+ name: vcr
49
+ requirement: &70228298302520 !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - ~>
53
+ - !ruby/object:Gem::Version
54
+ version: 2.0.0
55
+ type: :development
56
+ prerelease: false
57
+ version_requirements: *70228298302520
58
+ - !ruby/object:Gem::Dependency
59
+ name: fakeweb
60
+ requirement: &70228298302060 !ruby/object:Gem::Requirement
61
+ none: false
62
+ requirements:
63
+ - - ! '>='
64
+ - !ruby/object:Gem::Version
65
+ version: '0'
66
+ type: :development
45
67
  prerelease: false
46
- version_requirements: *70272415390040
68
+ version_requirements: *70228298302060
47
69
  description: Ruby Library to use Fedex Web Services(version 10)
48
70
  email:
49
71
  - jazminschroeder@gmail.com
@@ -58,12 +80,20 @@ files:
58
80
  - Readme.md
59
81
  - fedex.gemspec
60
82
  - lib/fedex.rb
83
+ - lib/fedex/credentials.rb
84
+ - lib/fedex/helpers.rb
85
+ - lib/fedex/label.rb
61
86
  - lib/fedex/rate.rb
87
+ - lib/fedex/request/base.rb
88
+ - lib/fedex/request/label.rb
89
+ - lib/fedex/request/rate.rb
62
90
  - lib/fedex/shipment.rb
63
91
  - lib/fedex/version.rb
64
92
  - spec/config/fedex_credentials.example.yml
65
- - spec/fedex_spec.rb
93
+ - spec/lib/fedex/label_spec.rb
94
+ - spec/lib/fedex/shipment_spec.rb
66
95
  - spec/spec_helper.rb
96
+ - spec/support/vcr.rb
67
97
  homepage: https://github.com/jazminschroeder/fedex
68
98
  licenses: []
69
99
  post_install_message:
@@ -90,5 +120,7 @@ specification_version: 3
90
120
  summary: Fedex Rate Webservice
91
121
  test_files:
92
122
  - spec/config/fedex_credentials.example.yml
93
- - spec/fedex_spec.rb
123
+ - spec/lib/fedex/label_spec.rb
124
+ - spec/lib/fedex/shipment_spec.rb
94
125
  - spec/spec_helper.rb
126
+ - spec/support/vcr.rb
data/spec/fedex_spec.rb DELETED
@@ -1,136 +0,0 @@
1
- require 'spec_helper'
2
- describe Fedex::Shipment do
3
- fedex_credentials ||= YAML.load(File.read("#{File.dirname(__FILE__)}/config/fedex_credentials.yml"))["development"]
4
-
5
- context "missing required parameters" do
6
- it "should raise Fedex::Rate exception" do
7
- lambda{ Fedex::Shipment.new}.should raise_error(Fedex::RateError)
8
- end
9
- end
10
-
11
- context "required parameters present" do
12
- subject { Fedex::Shipment.new(fedex_credentials) }
13
- it "should create a valid instance" do
14
- subject.should be_an_instance_of(Fedex::Shipment)
15
- end
16
- end
17
-
18
- describe "rate service" do
19
- before(:each) do
20
- @fedex = Fedex::Shipment.new(fedex_credentials)
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 => "Frankin Park", :state => "IL", :postal_code => "60131", :country_code => "US", :residential => true }
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
-
30
- end
31
-
32
- context "domestic shipment" do
33
- it "should return a rate" do
34
- rate = @fedex.rate({:shipper => @shipper, :recipient => @recipient, :packages => @packages, :service_type => "FEDEX_GROUND"})
35
- rate.should be_an_instance_of(Fedex::Rate)
36
- end
37
- end
38
-
39
- context "canadian shipment" do
40
- it "should return a rate" do
41
- canadian_recipient = {:name => "Recipient", :company => "Company", :phone_number => "555-555-5555", :address=>"Address Line 1", :city => "Richmond", :state => "BC", :postal_code => "V7C4V4", :country_code => "CA", :residential => "true" }
42
- rate = @fedex.rate({:shipper => @shipper, :recipient => canadian_recipient, :packages => @packages, :service_type => "FEDEX_GROUND"})
43
- rate.should be_an_instance_of(Fedex::Rate)
44
- end
45
- end
46
-
47
- context "canadian shipment including customs" do
48
- it "should return a rate including international fees" do
49
- canadian_recipient = {:name => "Recipient", :company => "Company", :phone_number => "555-555-5555", :address=>"Address Line 1", :city => "Richmond", :state => "BC", :postal_code => "V7C4V4", :country_code => "CA", :residential => "true" }
50
- broker = {
51
- :account_number => "510087143",
52
- :tins => { :tin_type => "BUSINESS_NATIONAL",
53
- :number => "431870271",
54
- :usage => "Usage" },
55
- :contact => { :contact_id => "1",
56
- :person_name => "Broker Name",
57
- :title => "Broker",
58
- :company_name => "Broker One",
59
- :phone_number => "555-555-5555",
60
- :phone_extension => "555-555-5555",
61
- :pager_number => "555",
62
- :fax_number=> "555-555-5555",
63
- :e_mail_address => "contact@me.com" },
64
- :address => { :street_lines => "Main Street",
65
- :city => "Franklin Park",
66
- :state_or_province_code => 'IL',
67
- :postal_code => '60131',
68
- :urbanization_code => '123',
69
- :country_code => 'US',
70
- :residential => 'false' }
71
- }
72
-
73
- clearance_brokerage = "BROKER_INCLUSIVE"
74
-
75
- importer_of_record= {
76
- :account_number => "22222",
77
- :tins => { :tin_type => "BUSINESS_NATIONAL",
78
- :number => "22222",
79
- :usage => "Usage" },
80
- :contact => { :contact_id => "1",
81
- :person_name => "Importer Name",
82
- :title => "Importer",
83
- :company_name => "Importer One",
84
- :phone_number => "555-555-5555",
85
- :phone_extension => "555-555-5555",
86
- :pager_number => "555",
87
- :fax_number=> "555-555-5555",
88
- :e_mail_address => "contact@me.com" },
89
- :address => { :street_lines => "Main Street",
90
- :city => "Chicago",
91
- :state_or_province_code => 'IL',
92
- :postal_code => '60611',
93
- :urbanization_code => '2308',
94
- :country_code => 'US',
95
- :residential => 'false' }
96
- }
97
-
98
- recipient_customs_id = { :type => 'COMPANY',
99
- :value => '1254587' }
100
-
101
-
102
- duties_payment = { :payment_type => "SENDER",
103
- :payor => { :account_number => "510087143",
104
- :country_code => "US" } }
105
-
106
- customs_value = { :currency => "USD",
107
- :amount => "200" }
108
- commodities = []
109
- commodities << { :name => "Cotton Coat",
110
- :number_of_pieces => "2",
111
- :description => "Cotton Coat",
112
- :country_of_manufacture => "US",
113
- :harmonized_code => "6103320000",
114
- :weight => {:units => "LB", :value => "2"},
115
- :quantity => "3",
116
- :unit_price => {:currency => "USD", :amount => "50" },
117
- :customs_value => {:currency => "USD", :amount => "150" } }
118
-
119
- commodities << { :name => "Poster",
120
- :number_of_pieces => "1",
121
- :description => "Paper Poster",
122
- :country_of_manufacture => "US",
123
- :harmonized_code => "4817100000",
124
- :weight => {:units => "LB", :value => "0.2"},
125
- :quantity => "3",
126
- :unit_price => {:currency => "USD", :amount => "50" },
127
- :customs_value => {:currency => "USD", :amount => "150" } }
128
-
129
- customs_clearance = { :broker => broker, :clearance_brokerage => clearance_brokerage, :importer_of_record => importer_of_record, :recipient_customs_id => recipient_customs_id, :duties_payment => duties_payment, :commodities => commodities }
130
- rate = @fedex.rate({:shipper => @shipper, :recipient => canadian_recipient, :packages => @packages, :service_type => "FEDEX_GROUND", :customs_clearance => customs_clearance})
131
- rate.should be_an_instance_of(Fedex::Rate)
132
- end
133
- end
134
- end
135
- end
136
-