fedex 1.0.0 → 2.0.1

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