fedex 2.2.2 → 3.0.0

Sign up to get free protection for your applications and to get access to all the features.
data/Readme.md CHANGED
@@ -188,7 +188,12 @@ Documentation for setting up Paperclip with Amazon S3 can be found in the Paperc
188
188
  To track a shipment:
189
189
 
190
190
  ```ruby
191
- tracking_info = fedex.track(:tracking_number => "1234567890123")
191
+ results = fedex.track(:tracking_number => "1234567890123")
192
+ # => [#<Fedex::TrackingInformation>]
193
+
194
+ # Pull the first result from the returned array
195
+ #
196
+ tracking_info = results.first
192
197
 
193
198
  tracking_info.tracking_number
194
199
  # => "1234567890123"
@@ -242,6 +247,7 @@ Fedex::Shipment::DROP_OFF_TYPES
242
247
  - [geermc4](https://github.com/geermc4) (German Garcia)
243
248
  - [janders223] (https://github.com/janders223) (Jim Anders)
244
249
  - [jlambert121] (https://github.com/jlambert121) (Justin Lambert)
250
+ - [sborsje] (https://github.com/sborsje) (Stefan Borsje)
245
251
 
246
252
  # Copyright/License:
247
253
  Copyright 2011 [Jazmin Schroeder](http://jazminschroeder.com)
@@ -14,7 +14,7 @@ Gem::Specification.new do |s|
14
14
 
15
15
  s.rubyforge_project = "fedex"
16
16
 
17
- s.add_dependency 'httparty', '~> 0.9.0'
17
+ s.add_dependency 'httparty', '~> 0.10.0'
18
18
  s.add_dependency 'nokogiri', '~> 1.5.0'
19
19
 
20
20
  s.add_development_dependency "rspec", '~> 2.9.0'
@@ -261,8 +261,8 @@ module Fedex
261
261
  value.each do |v|
262
262
  xml.send element do |x|
263
263
  hash_to_xml(x, v)
264
- end
265
- end
264
+ end
265
+ end
266
266
  else
267
267
  xml.send element, value
268
268
  end
@@ -25,7 +25,6 @@ module Fedex
25
25
  end
26
26
 
27
27
  def process_request
28
- puts build_xml
29
28
  api_response = self.class.post(api_url, :body => build_xml)
30
29
  puts api_response if @debug == true
31
30
  response = parse_response(api_response)
@@ -33,7 +32,9 @@ module Fedex
33
32
  if success?(response)
34
33
  options = response[:track_reply][:track_details]
35
34
 
36
- Fedex::TrackingInformation.new(options)
35
+ [options].flatten.map do |details|
36
+ Fedex::TrackingInformation.new(details)
37
+ end
37
38
  else
38
39
  error_message = if response[:track_reply]
39
40
  response[:track_reply][:notifications][:message]
@@ -54,18 +55,16 @@ module Fedex
54
55
  add_client_detail(xml)
55
56
  add_version(xml)
56
57
  add_package_identifier(xml)
57
- xml.IncludeDetailedScans @include_detailed_scans
58
-
59
- # Optional
60
- xml.TrackingNumberUniqueIdentifier @uuid if @uuid
61
- xml.PagingToken @paging_token if @paging_token
58
+ xml.TrackingNumberUniqueIdentifier @uuid if @uuid
59
+ xml.IncludeDetailedScans @include_detailed_scans
60
+ xml.PagingToken @paging_token if @paging_token
62
61
  }
63
62
  end
64
63
  builder.doc.root.to_xml
65
64
  end
66
65
 
67
66
  def service
68
- { :id => 'trck', :version => 5 }
67
+ { :id => 'trck', :version => 6 }
69
68
  end
70
69
 
71
70
  def add_package_identifier(xml)
@@ -29,20 +29,22 @@ module Fedex
29
29
  }
30
30
 
31
31
  attr_reader :tracking_number, :signature_name, :service_type, :status,
32
- :delivery_at, :events
32
+ :delivery_at, :events, :unique_tracking_number
33
33
 
34
34
  def initialize(details = {})
35
35
  @details = details
36
36
 
37
- @tracking_number = details[:tracking_number]
38
- @signature_name = details[:delivery_signature_name]
39
- @service_type = details[:service_type]
40
- @status = details[:status_description]
37
+ @tracking_number = details[:tracking_number]
38
+ @unique_tracking_number = details[:tracking_number_unique_identifier]
39
+ @signature_name = details[:delivery_signature_name]
40
+ @service_type = details[:service_type]
41
+ @status = details[:status_description]
42
+
41
43
  if details.has_key?(:actual_delivery_timestamp)
42
- @delivery_at = Time.parse(details[:actual_delivery_timestamp])
44
+ @delivery_at = Time.parse(details[:actual_delivery_timestamp])
43
45
  end
44
46
 
45
- @events = details[:events].map do |event_details|
47
+ @events = [details[:events]].flatten.compact.map do |event_details|
46
48
  Event.new(event_details)
47
49
  end
48
50
  end
@@ -2,18 +2,20 @@ module Fedex
2
2
  class TrackingInformation
3
3
  class Event
4
4
  attr_reader :description, :type, :occured_at, :city, :state, :postal_code,
5
- :country, :residential
5
+ :country, :residential, :exception_code, :exception_description
6
6
 
7
7
  def initialize(details = {})
8
- @description = details[:event_description]
9
- @type = details[:event_type]
10
- @occured_at = Time.parse(details[:timestamp])
11
- @city = details[:address][:city]
12
- @state = details[:address][:state_or_province_code]
13
- @postal_code = details[:address][:postal_code]
14
- @country = details[:address][:country_code]
15
- @residential = details[:address][:residential] == "true"
8
+ @description = details[:event_description]
9
+ @type = details[:event_type]
10
+ @occured_at = Time.parse(details[:timestamp])
11
+ @city = details[:address][:city]
12
+ @state = details[:address][:state_or_province_code]
13
+ @postal_code = details[:address][:postal_code]
14
+ @country = details[:address][:country_code]
15
+ @residential = details[:address][:residential] == "true"
16
+ @exception_code = details[:status_exception_code]
17
+ @exception_description = details[:status_exception_description]
16
18
  end
17
19
  end
18
20
  end
19
- end
21
+ end
@@ -1,3 +1,3 @@
1
1
  module Fedex
2
- VERSION = "2.2.2"
2
+ VERSION = "3.0.0"
3
3
  end
@@ -6,16 +6,25 @@ module Fedex
6
6
 
7
7
  context "shipments with tracking number", :vcr, :focus do
8
8
  let(:options) do
9
- { :package_id => "077973360403984",
9
+ { :package_id => "123456789012",
10
10
  :package_type => "TRACKING_NUMBER_OR_DOORTAG",
11
11
  :include_detailed_scans => true
12
12
  }
13
13
  end
14
14
 
15
+ let(:uuid) { "12012~123456789012~FDEG" }
16
+
17
+ it "returns an array of tracking information results" do
18
+ results = fedex.track(options)
19
+ results.should_not be_empty
20
+ end
21
+
15
22
  it "returns events with tracking information" do
16
- tracking_info = fedex.track(options)
23
+ options[:uuid] = uuid
24
+
25
+ tracking_info = fedex.track(options).first
17
26
 
18
- tracking_info.events.count.should == 7
27
+ tracking_info.events.should_not be_empty
19
28
  end
20
29
 
21
30
  it "fails if using an invalid package type" do
@@ -27,22 +36,19 @@ module Fedex
27
36
  end
28
37
 
29
38
  it "allows short hand tracking number queries" do
30
- shorthand_options = options
39
+ shorthand_options = { :tracking_number => options[:package_id] }
31
40
 
32
- shorthand_options.delete(:package_type)
33
- tracking_number = shorthand_options.delete(:package_id)
41
+ tracking_info = fedex.track(shorthand_options).first
34
42
 
35
- shorthand_options[:tracking_number] = tracking_number
36
-
37
- tracking_info = fedex.track(shorthand_options)
38
-
39
- tracking_info.tracking_number.should == tracking_number
43
+ tracking_info.tracking_number.should == options[:package_id]
40
44
  end
41
45
 
42
46
  it "reports the status of the package" do
43
- tracking_info = fedex.track(options)
47
+ options[:uuid] = uuid
48
+
49
+ tracking_info = fedex.track(options).first
44
50
 
45
- tracking_info.status.should == "Delivered"
51
+ tracking_info.status.should == "In transit"
46
52
  end
47
53
 
48
54
  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: 2.2.2
4
+ version: 3.0.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,22 +9,22 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-12-17 00:00:00.000000000 Z
12
+ date: 2013-02-02 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: httparty
16
- requirement: &70199311767300 !ruby/object:Gem::Requirement
16
+ requirement: &70168051584480 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
20
20
  - !ruby/object:Gem::Version
21
- version: 0.9.0
21
+ version: 0.10.0
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70199311767300
24
+ version_requirements: *70168051584480
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: nokogiri
27
- requirement: &70199311766780 !ruby/object:Gem::Requirement
27
+ requirement: &70168051583980 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ~>
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: 1.5.0
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *70199311766780
35
+ version_requirements: *70168051583980
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: rspec
38
- requirement: &70199311766300 !ruby/object:Gem::Requirement
38
+ requirement: &70168051583460 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ~>
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: 2.9.0
44
44
  type: :development
45
45
  prerelease: false
46
- version_requirements: *70199311766300
46
+ version_requirements: *70168051583460
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: vcr
49
- requirement: &70199311765820 !ruby/object:Gem::Requirement
49
+ requirement: &70168051582920 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ~>
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: 2.0.0
55
55
  type: :development
56
56
  prerelease: false
57
- version_requirements: *70199311765820
57
+ version_requirements: *70168051582920
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: fakeweb
60
- requirement: &70199311765440 !ruby/object:Gem::Requirement
60
+ requirement: &70168051582460 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ! '>='
@@ -65,7 +65,7 @@ dependencies:
65
65
  version: '0'
66
66
  type: :development
67
67
  prerelease: false
68
- version_requirements: *70199311765440
68
+ version_requirements: *70168051582460
69
69
  description: Provides an interface to Fedex Web Services(version 10) - shipping rates,
70
70
  generate labels and address validation
71
71
  email: