fedex 2.2.2 → 3.0.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 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: