trackerific 0.7.2 → 0.7.3
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.
- checksums.yaml +4 -4
- data/Gemfile.lock +1 -1
- data/README.rdoc +2 -1
- data/lib/dependencies.rb +9 -0
- data/lib/trackerific.rb +5 -19
- data/lib/trackerific/builders.rb +12 -0
- data/lib/trackerific/builders/base/soap.rb +14 -16
- data/lib/trackerific/builders/base/xml.rb +22 -28
- data/lib/trackerific/builders/fedex.rb +66 -44
- data/lib/trackerific/builders/ups.rb +28 -24
- data/lib/trackerific/builders/usps.rb +15 -13
- data/lib/trackerific/parsers.rb +8 -0
- data/lib/trackerific/parsers/base.rb +24 -28
- data/lib/trackerific/parsers/fedex.rb +43 -47
- data/lib/trackerific/parsers/ups.rb +49 -53
- data/lib/trackerific/parsers/usps.rb +44 -48
- data/lib/trackerific/services.rb +10 -0
- data/lib/trackerific/services/base.rb +82 -55
- data/lib/trackerific/services/concerns/soap.rb +10 -40
- data/lib/trackerific/services/concerns/xml.rb +15 -37
- data/lib/trackerific/services/fedex.rb +9 -19
- data/lib/trackerific/services/mock_service.rb +26 -37
- data/lib/trackerific/services/ups.rb +11 -24
- data/lib/trackerific/services/usps.rb +23 -35
- data/lib/trackerific/soap.rb +5 -0
- data/lib/trackerific/soap/wsdl.rb +8 -12
- data/lib/trackerific/version.rb +1 -1
- data/spec/lib/trackerific/services/base_spec.rb +21 -4
- data/spec/lib/trackerific/services/concerns/soap_spec.rb +6 -21
- data/spec/lib/trackerific/services/concerns/xml_spec.rb +5 -18
- data/spec/lib/trackerific/services/mock_service_spec.rb +12 -0
- data/spec/lib/trackerific/services/usps_spec.rb +4 -4
- data/spec/lib/trackerific/version_spec.rb +1 -1
- data/spec/support/test_concerns.rb +15 -0
- metadata +8 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fb9a2f038fb1728c6dd60128d782e5fae4d89d85
|
4
|
+
data.tar.gz: 43fd9368b5d08f8f7f75307ba579ac2734b615b1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 001ff6e68f9078c5241368d5910f1225fba1c51cfea39d19a150eb0a715cce9e709a2474f954b66e9d21dc5d29568ccd7236a5932ba25e686e1b66ea60caee8b
|
7
|
+
data.tar.gz: 0ea9be6f1b79664e963534e3e542b87a9f5c50407df442867ebf251dbb19c7e21cd965b75a7bf11c679733a1641bde1b8087e7f3db286caa810d2deb1c26f251
|
data/Gemfile.lock
CHANGED
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 = {
|
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
|
data/lib/dependencies.rb
ADDED
data/lib/trackerific.rb
CHANGED
@@ -1,28 +1,14 @@
|
|
1
|
-
require '
|
2
|
-
|
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
|
14
|
-
require 'trackerific/builders
|
15
|
-
require 'trackerific/
|
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
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
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
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
6
|
+
def initialize(*args)
|
7
|
+
super(*args)
|
8
|
+
@hash = build
|
9
|
+
end
|
11
10
|
|
12
|
-
|
11
|
+
protected
|
13
12
|
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
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
|
-
|
2
|
-
|
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
|
-
|
8
|
-
|
9
|
-
|
4
|
+
class << self
|
5
|
+
attr_accessor :xml_version
|
6
|
+
end
|
10
7
|
|
11
|
-
|
8
|
+
attr_reader :xml
|
12
9
|
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
10
|
+
def initialize(*args)
|
11
|
+
super(*args)
|
12
|
+
@xml = ""
|
13
|
+
build
|
14
|
+
end
|
18
15
|
|
19
|
-
|
16
|
+
protected
|
20
17
|
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
18
|
+
def build
|
19
|
+
raise NotImplementedError,
|
20
|
+
"Implement this method in your builder subclass", caller
|
21
|
+
end
|
25
22
|
|
26
|
-
|
23
|
+
private
|
27
24
|
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
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
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
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
|
-
|
2
|
-
|
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
|
-
|
7
|
-
add_access_request
|
8
|
-
add_track_request
|
9
|
-
end
|
4
|
+
protected
|
10
5
|
|
11
|
-
|
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
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
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
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
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
|
-
|
2
|
-
|
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
|
-
|
7
|
-
add_track_request
|
8
|
-
end
|
4
|
+
protected
|
9
5
|
|
10
|
-
|
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
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
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
|
@@ -1,35 +1,31 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
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
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
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
|
-
|
15
|
+
protected
|
18
16
|
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
17
|
+
def response_error
|
18
|
+
raise NotImplementedError,
|
19
|
+
"Override this method in your parser", caller
|
20
|
+
end
|
23
21
|
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
22
|
+
def summary
|
23
|
+
raise NotImplementedError,
|
24
|
+
"Override this method in your parser", caller
|
25
|
+
end
|
28
26
|
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
end
|
33
|
-
end
|
27
|
+
def events
|
28
|
+
raise NotImplementedError,
|
29
|
+
"Override this method in your parser", caller
|
34
30
|
end
|
35
31
|
end
|