trackerific 0.7.2 → 0.7.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (35) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +1 -1
  3. data/README.rdoc +2 -1
  4. data/lib/dependencies.rb +9 -0
  5. data/lib/trackerific.rb +5 -19
  6. data/lib/trackerific/builders.rb +12 -0
  7. data/lib/trackerific/builders/base/soap.rb +14 -16
  8. data/lib/trackerific/builders/base/xml.rb +22 -28
  9. data/lib/trackerific/builders/fedex.rb +66 -44
  10. data/lib/trackerific/builders/ups.rb +28 -24
  11. data/lib/trackerific/builders/usps.rb +15 -13
  12. data/lib/trackerific/parsers.rb +8 -0
  13. data/lib/trackerific/parsers/base.rb +24 -28
  14. data/lib/trackerific/parsers/fedex.rb +43 -47
  15. data/lib/trackerific/parsers/ups.rb +49 -53
  16. data/lib/trackerific/parsers/usps.rb +44 -48
  17. data/lib/trackerific/services.rb +10 -0
  18. data/lib/trackerific/services/base.rb +82 -55
  19. data/lib/trackerific/services/concerns/soap.rb +10 -40
  20. data/lib/trackerific/services/concerns/xml.rb +15 -37
  21. data/lib/trackerific/services/fedex.rb +9 -19
  22. data/lib/trackerific/services/mock_service.rb +26 -37
  23. data/lib/trackerific/services/ups.rb +11 -24
  24. data/lib/trackerific/services/usps.rb +23 -35
  25. data/lib/trackerific/soap.rb +5 -0
  26. data/lib/trackerific/soap/wsdl.rb +8 -12
  27. data/lib/trackerific/version.rb +1 -1
  28. data/spec/lib/trackerific/services/base_spec.rb +21 -4
  29. data/spec/lib/trackerific/services/concerns/soap_spec.rb +6 -21
  30. data/spec/lib/trackerific/services/concerns/xml_spec.rb +5 -18
  31. data/spec/lib/trackerific/services/mock_service_spec.rb +12 -0
  32. data/spec/lib/trackerific/services/usps_spec.rb +4 -4
  33. data/spec/lib/trackerific/version_spec.rb +1 -1
  34. data/spec/support/test_concerns.rb +15 -0
  35. metadata +8 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 1310f1dbf143518a58178390a664b23b697cadba
4
- data.tar.gz: 709ab9cdaa8df43975eff61b797b98586fab4e34
3
+ metadata.gz: fb9a2f038fb1728c6dd60128d782e5fae4d89d85
4
+ data.tar.gz: 43fd9368b5d08f8f7f75307ba579ac2734b615b1
5
5
  SHA512:
6
- metadata.gz: b398a2bfaab2602d8cb0624d48f7936750abb13bdfb36828a27cd4ec1f4b0a5a0763996de30edf2aa38a4270fecb31e5158a77a2d242542a3c3be6d1094b0158
7
- data.tar.gz: dfe45ddfe2c76098a2e9b6c917f6b825fb91d993f92236f9b5b28595f539b48b13d758bae1dbe1fd6ede6928ea202b95638d010ac0cf6e5b06ef81e930781ded
6
+ metadata.gz: 001ff6e68f9078c5241368d5910f1225fba1c51cfea39d19a150eb0a715cce9e709a2474f954b66e9d21dc5d29568ccd7236a5932ba25e686e1b66ea60caee8b
7
+ data.tar.gz: 0ea9be6f1b79664e963534e3e542b87a9f5c50407df442867ebf251dbb19c7e21cd965b75a7bf11c679733a1641bde1b8087e7f3db286caa810d2deb1c26f251
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- trackerific (0.7.2)
4
+ trackerific (0.7.3)
5
5
  activesupport
6
6
  builder (>= 3.1.4)
7
7
  httparty (>= 0.12.0)
data/README.rdoc CHANGED
@@ -33,7 +33,8 @@ You will need to configure the credentials for each service you're utilizing.
33
33
  Services without credentials will not be accessed by the gem.
34
34
 
35
35
  Trackerific.configure do |config|
36
- config.fedex = { account: 'account', meter: '123456789' }
36
+ config.fedex = { key: 'key', password: 'password', account_number: 'acct',
37
+ meter_number: '123' }
37
38
  config.ups = { key: 'key', user_id: 'userid', password: 'secret' }
38
39
  config.usps = { user_id: 'userid' }
39
40
  end
@@ -0,0 +1,9 @@
1
+ # 3rd party gems and dependencies
2
+
3
+ require 'active_support/all'
4
+ require 'securerandom'
5
+ require 'date'
6
+ require 'savon'
7
+ require 'httparty'
8
+ require 'builder'
9
+ require 'ostruct'
data/lib/trackerific.rb CHANGED
@@ -1,28 +1,14 @@
1
- require 'active_support'
2
- require 'active_support/core_ext/object/to_query'
3
- require 'securerandom'
4
- require 'date'
5
- require 'savon'
6
- require 'httparty'
7
- require 'builder'
1
+ require 'dependencies'
2
+
8
3
  require 'trackerific/version'
9
4
  require 'trackerific/environment'
10
5
  require 'trackerific/error'
11
6
  require 'trackerific/details'
12
7
  require 'trackerific/event'
13
- require 'trackerific/soap/wsdl'
14
- require 'trackerific/builders/base/soap'
15
- require 'trackerific/builders/base/xml'
16
- require 'trackerific/parsers/base'
17
- require 'trackerific/services/concerns/soap'
18
- require 'trackerific/services/concerns/xml'
8
+ require 'trackerific/soap'
9
+ require 'trackerific/builders'
10
+ require 'trackerific/parsers'
19
11
  require 'trackerific/services'
20
- require 'trackerific/services/base'
21
-
22
- # add tracking services here
23
- require 'trackerific/services/fedex'
24
- require 'trackerific/services/ups'
25
- require 'trackerific/services/usps'
26
12
 
27
13
  module Trackerific
28
14
  include ActiveSupport::Configurable
@@ -0,0 +1,12 @@
1
+ module Trackerific
2
+ module Builders
3
+ module Base
4
+ require 'trackerific/builders/base/soap'
5
+ require 'trackerific/builders/base/xml'
6
+ end
7
+
8
+ require 'trackerific/builders/fedex'
9
+ require 'trackerific/builders/ups'
10
+ require 'trackerific/builders/usps'
11
+ end
12
+ end
@@ -1,21 +1,19 @@
1
- module Trackerific
2
- module Builders
3
- module Base
4
- class SOAP < Struct
5
- attr_reader :hash
1
+ # Base class for SOAP request builders
2
+ # @api public
3
+ class Trackerific::Builders::Base::SOAP < Struct
4
+ attr_reader :hash
6
5
 
7
- def initialize(*args)
8
- super(*args)
9
- @hash = build
10
- end
6
+ def initialize(*args)
7
+ super(*args)
8
+ @hash = build
9
+ end
11
10
 
12
- protected
11
+ protected
13
12
 
14
- def build
15
- raise NotImplementedError,
16
- "Implement this method in your builder subclass", caller
17
- end
18
- end
19
- end
13
+ # Implement this method in your builder
14
+ # @api public
15
+ def build
16
+ raise NotImplementedError,
17
+ "Implement this method in your builder subclass", caller
20
18
  end
21
19
  end
@@ -1,38 +1,32 @@
1
- module Trackerific
2
- module Builders
3
- module Base
4
- class XML < Struct
5
- @xml_version = "1.0"
1
+ class Trackerific::Builders::Base::XML < Struct
2
+ @xml_version = "1.0"
6
3
 
7
- class << self
8
- attr_accessor :xml_version
9
- end
4
+ class << self
5
+ attr_accessor :xml_version
6
+ end
10
7
 
11
- attr_reader :xml
8
+ attr_reader :xml
12
9
 
13
- def initialize(*args)
14
- super(*args)
15
- @xml = ""
16
- build
17
- end
10
+ def initialize(*args)
11
+ super(*args)
12
+ @xml = ""
13
+ build
14
+ end
18
15
 
19
- protected
16
+ protected
20
17
 
21
- def build
22
- raise NotImplementedError,
23
- "Implement this method in your builder subclass", caller
24
- end
18
+ def build
19
+ raise NotImplementedError,
20
+ "Implement this method in your builder subclass", caller
21
+ end
25
22
 
26
- private
23
+ private
27
24
 
28
- def builder
29
- @builder ||= begin
30
- builder = Builder::XmlMarkup.new(target: @xml)
31
- builder.instruct! :xml, version: self.class.xml_version
32
- builder
33
- end
34
- end
35
- end
25
+ def builder
26
+ @builder ||= begin
27
+ builder = Builder::XmlMarkup.new(target: @xml)
28
+ builder.instruct! :xml, version: self.class.xml_version
29
+ builder
36
30
  end
37
31
  end
38
32
  end
@@ -1,46 +1,68 @@
1
- module Trackerific
2
- module Builders
3
- class FedEx < Base::SOAP.new(:key, :password, :account_number, :meter_number, :package_id)
4
- protected
5
-
6
- def build
7
- root_elements.inject({}) {|r, k| r[k] = send(k); r }
8
- end
9
-
10
- private
11
-
12
- def root_elements
13
- [ :web_authentication_detail, :client_detail, :transaction_detail,
14
- :version, :selection_details, :processing_options ]
15
- end
16
-
17
- def web_authentication_detail
18
- { user_credential: { key: key, password: password } }
19
- end
20
-
21
- def client_detail
22
- { account_number: account_number, meter_number: meter_number }
23
- end
24
-
25
- def transaction_detail
26
- { customer_transaction_id: "Trackerific" }
27
- end
28
-
29
- def version
30
- { service_id: 'trck', major: '8', intermediate: '0', minor: '0' }
31
- end
32
-
33
- def selection_details
34
- { carrier_code: 'FDXE', package_identifier: package_identifier }
35
- end
36
-
37
- def package_identifier
38
- { type: 'TRACKING_NUMBER_OR_DOORTAG', value: package_id }
39
- end
40
-
41
- def processing_options
42
- 'INCLUDE_DETAILED_SCANS'
43
- end
44
- end
1
+ class Trackerific::Builders::FedEx < Trackerific::Builders::Base::SOAP.new(
2
+ :key, :password, :account_number, :meter_number, :package_id)
3
+
4
+ protected
5
+
6
+ # Builds the FedEx track request XML
7
+ # @api private
8
+ def build
9
+ root_nodes.inject({}) {|r, k| r[k] = send(k); r }
10
+ end
11
+
12
+ private
13
+
14
+ # Array of XML root nodes
15
+ # @api private
16
+ def root_nodes
17
+ [ :web_authentication_detail, :client_detail, :transaction_detail,
18
+ :version, :selection_details, :processing_options ]
19
+ end
20
+
21
+ # Descriptive data to be used in authentication of the sender's identity
22
+ # (and right to use FedEx web services)
23
+ # @api private
24
+ def web_authentication_detail
25
+ { user_credential: { key: key, password: password } }
26
+ end
27
+
28
+ # Descriptive data identifying the client submitting the transaction
29
+ # @api private
30
+ def client_detail
31
+ { account_number: account_number, meter_number: meter_number }
32
+ end
33
+
34
+ # Contains a free form field that is echoed back in the reply to match
35
+ # requests with replies and data that governs the data payload
36
+ # language/translations
37
+ # @api private
38
+ def transaction_detail
39
+ { customer_transaction_id: "Trackerific" }
40
+ end
41
+
42
+
43
+ # The version of the FedEx API being used
44
+ # @api private
45
+ def version
46
+ { service_id: 'trck', major: '8', intermediate: '0', minor: '0' }
47
+ end
48
+
49
+ # Specifies the details needed to select the shipment being requested to
50
+ # be tracked
51
+ # @api private
52
+ def selection_details
53
+ { carrier_code: 'FDXE', package_identifier: package_identifier }
54
+ end
55
+
56
+ # The type and value of the package identifier that is to be used to
57
+ # retrieve the tracking information for a package or group of packages
58
+ # @api private
59
+ def package_identifier
60
+ { type: 'TRACKING_NUMBER_OR_DOORTAG', value: package_id }
61
+ end
62
+
63
+ # Include detailed scan results
64
+ # @api private
65
+ def processing_options
66
+ 'INCLUDE_DETAILED_SCANS'
45
67
  end
46
68
  end
@@ -1,32 +1,36 @@
1
- module Trackerific
2
- module Builders
3
- class UPS < Base::XML.new(:key, :user_id, :password, :package_id)
4
- protected
1
+ class Trackerific::Builders::UPS < Trackerific::Builders::Base::XML.new(
2
+ :key, :user_id, :password, :package_id)
5
3
 
6
- def build
7
- add_access_request
8
- add_track_request
9
- end
4
+ protected
10
5
 
11
- private
6
+ # Builds the UPS track request XML
7
+ # @api private
8
+ def build
9
+ add_access_request
10
+ add_track_request
11
+ end
12
12
 
13
- def add_access_request
14
- builder.AccessRequest do |ar|
15
- ar.AccessLicenseNumber key
16
- ar.UserId user_id
17
- ar.Password password
18
- end
19
- end
13
+ private
14
+
15
+ # Adds the user credentials to the XML
16
+ # @api private
17
+ def add_access_request
18
+ builder.AccessRequest do |ar|
19
+ ar.AccessLicenseNumber key
20
+ ar.UserId user_id
21
+ ar.Password password
22
+ end
23
+ end
20
24
 
21
- def add_track_request
22
- builder.TrackRequest do |tr|
23
- tr.Request do |r|
24
- r.RequestAction 'Track'
25
- r.RequestOption 'activity'
26
- end
27
- tr.TrackingNumber package_id
28
- end
25
+ # Adds the track request and package id to the XML
26
+ # @api private
27
+ def add_track_request
28
+ builder.TrackRequest do |tr|
29
+ tr.Request do |r|
30
+ r.RequestAction 'Track'
31
+ r.RequestOption 'activity'
29
32
  end
33
+ tr.TrackingNumber package_id
30
34
  end
31
35
  end
32
36
  end
@@ -1,19 +1,21 @@
1
- module Trackerific
2
- module Builders
3
- class USPS < Base::XML.new(:user_id, :package_id)
4
- protected
1
+ class Trackerific::Builders::USPS < Trackerific::Builders::Base::XML.new(
2
+ :user_id, :package_id)
5
3
 
6
- def build
7
- add_track_request
8
- end
4
+ protected
9
5
 
10
- private
6
+ # Builds the USPS track request XML
7
+ # @api private
8
+ def build
9
+ add_track_request
10
+ end
11
+
12
+ private
11
13
 
12
- def add_track_request
13
- builder.TrackRequest(:USERID => user_id) do |t|
14
- t.TrackID(:ID => package_id)
15
- end
16
- end
14
+ # Adds the track request and package id to the XML
15
+ # @api private
16
+ def add_track_request
17
+ builder.TrackRequest(:USERID => user_id) do |t|
18
+ t.TrackID(:ID => package_id)
17
19
  end
18
20
  end
19
21
  end
@@ -0,0 +1,8 @@
1
+ module Trackerific
2
+ module Parsers
3
+ require 'trackerific/parsers/base'
4
+ require 'trackerific/parsers/fedex'
5
+ require 'trackerific/parsers/ups'
6
+ require 'trackerific/parsers/usps'
7
+ end
8
+ end
@@ -1,35 +1,31 @@
1
- module Trackerific
2
- module Parsers
3
- class Base
4
- def initialize(package_id, response)
5
- @package_id = package_id
6
- @response = response
7
- end
1
+ class Trackerific::Parsers::Base
2
+ def initialize(package_id, response)
3
+ @package_id = package_id
4
+ @response = response
5
+ end
8
6
 
9
- def parse
10
- @result ||= if response_error
11
- response_error
12
- else
13
- Trackerific::Details.new(@package_id, summary, events)
14
- end
15
- end
7
+ def parse
8
+ @result ||= if response_error
9
+ response_error
10
+ else
11
+ Trackerific::Details.new(@package_id, summary, events)
12
+ end
13
+ end
16
14
 
17
- protected
15
+ protected
18
16
 
19
- def response_error
20
- raise NotImplementedError,
21
- "Override this method in your parser", caller
22
- end
17
+ def response_error
18
+ raise NotImplementedError,
19
+ "Override this method in your parser", caller
20
+ end
23
21
 
24
- def summary
25
- raise NotImplementedError,
26
- "Override this method in your parser", caller
27
- end
22
+ def summary
23
+ raise NotImplementedError,
24
+ "Override this method in your parser", caller
25
+ end
28
26
 
29
- def events
30
- raise NotImplementedError,
31
- "Override this method in your parser", caller
32
- end
33
- end
27
+ def events
28
+ raise NotImplementedError,
29
+ "Override this method in your parser", caller
34
30
  end
35
31
  end