NAME
   Business::UPS::Tracking - Interface to the UPS tracking webservice

SYNOPSIS
     use Business::UPS::Tracking;

     my $tracking = Business::UPS::Tracking->new(
       AccessLicenseNumber => '1CFFED5A5E91B17',
       UserId              => 'myupsuser',
       Password            => 'secret',
     );

     eval {
       my $response = $tracking->request(
         TrackingNumber  => '1Z12345E1392654435',
       )->run();

       foreach my $shipment ($response->shipment) {
           say 'Service code is '.$shipment->ServiceCode;
           foreach my $package ($shipment->Package) {
               say 'Status is '.$package->CurrentStatus;
           }
       }
     };

     if (my $e = Exception::Class->caught) {
       given ($e) {
         when ($_->isa('Business::UPS::Tracking::X::HTTP')) {
           say 'HTTP ERROR:'.$e->full_message;
         }
         when ($_->isa('Business::UPS::Tracking::X::UPS')) {
           say 'UPS ERROR:'.$e->full_message.' ('.$e->code.')';
         }
         default {
           say 'SOME ERROR:'.$e;
         }
       }
     }

DESCRIPTION
 Class structure
                      .-----------------------------------.
                      |     Business::UPS::Tracking       |
                      '-----------------------------------'
                                      ^
                                   HAS ONE
                                      |
                      .-----------------------------------.
                      |         B::U::T::Request          |
                      '-----------------------------------'
                                      ^
                                   HAS ONE
                                      |
                      .-----------------------------------.
                      |         B::U::T::Response         |
                      '-----------------------------------'
                                      |
                                   HAS MANY
                                      v
                      .-----------------------------------.
                      |         B::U::T::Shipment         |
                      '-----------------------------------'
                          ^                           ^
                         ISA                         ISA
                          |                           |
    .---------------------------------. .-----------------------------------.
    |    B::U::T::Shipment::Freight   | |  B::U::T::Shipment::Smallpackage  |
    |---------------------------------| |-----------------------------------|
    | Freight shipment type           | | Small package shipment type       |
    | Not yet implemented             | '-----------------------------------'
    '---------------------------------'               |
                                                   HAS MANY
                                                      v
                                        .-----------------------------------.
                                        |     B::U::T::Element::Package     |
                                        '-----------------------------------'
                                                      |
                                                   HAS MANY
                                                      v
                                        .-----------------------------------.
                                        |    B::U::T::Element::Activity     |
                                        '-----------------------------------'

 Exception Handling
   If anythis goes wrong Business::UPS::Tracking throws an exception.
   Exceptions are always Exception::Class objects which contain structured
   information about the error. Please refer to the synopsis or to the
   Exception::Class documentation for documentation how to catch and
   rethrow exeptions.

   The following exception classes are defined:

  Business::UPS::Tracking::X
   Basic exception class. All other exception classes inherit from this
   class.

  Business::UPS::Tracking::X::HTTP
   HTTP error. The object provides additional parameters:

   *   http_response : HTTP::Response object

   *   request : Business::UPS::Tracking::Request object

  Business::UPS::Tracking::X::UPS
   UPS error message.The object provides additional parameters:

   *   code : UPS error code

   *   severity : Error severity 'hard' or 'soft'

   *   context : XML::LibXML::Node object containing the whole error
       response.

   *   request : Business::UPS::Tracking::Request object

  Business::UPS::Tracking::X::XML
   XML parser or schema error.

 Accessor / method naming
   The naming of the methods and accessors tries to stick close to the
   names used by the UPS webservice. All accessors containg uppercase
   letters access xml data. Lowercase-only accessors and methods are used
   for utility functions.

 UPS license
   In order to use this module you need to obtain a "Tracking WebService"
   license key. See <http://www.ups.com/e_comm_access/gettools_index> for
   more information.

METHODS
 new
    my $tracking = Business::UPS::Tracking->new(%params);

   Create a "Business::UPS::Tracking" object. See ACCESSORS for available
   parameters.

 access_request
   UPS access request.

 request
    my $request = $tracking->request(%request_params);

   Returns a Business::UPS::Tracking::Request object.

 request_run
    my $response = $tracking->request_run(%request_params);

   Generates a Business::UPS::Tracking::Request object and imideately
   executes it, returning a Business::UPS::Tracking::Response object.

ACCESSORS
 AccessLicenseNumber
   UPS tracking service access license number

 UserId
   UPS account username

 Password
   UPS account password

 config
   Optionally you can retrieve all or some UPS webservice credentials from
   a configuration file. This accessor holds the path to this file.
   Defaults to "~/.ups_tracking"

   Example configuration file:

    <?xml version="1.0"?>
    <UPS_tracking_webservice_config>
       <AccessLicenseNumber>1CFFED5A5E91B17</AccessLicenseNumber>
       <UserId>myupsuser</UserId>
       <Password>secret</Password>
    </UPS_tracking_webservice_config>

 retry_http
   Number of retries if http errors occur

   Defaults to 0

 url
   UPS Tracking webservice url.

   Defaults to https://wwwcie.ups.com/ups.app/xml/Track

 _ua
   LWP::UserAgent object.

   Automatically generated

SUPPORT
   Please report any bugs or feature requests to
   "[email protected]", or through the web interface at
   <http://rt.cpan.org/Public/Bug/Report.html?Queue=Business::UPS::Tracking
   >. I will be notified, and then you'll automatically be notified of
   progress on your report as I make changes.

SEE ALSO
   Download the UPS "OnLine® Tools Tracking Developer Guide" and get a
   developer key at
   <http://www.ups.com/e_comm_access/gettools_index?loc=en_US>. Please
   check the "Developer Guide" for more detailed documentation on the
   various fields.

   The WebService::UPS::TrackRequest provides an alternative simpler
   implementation.

AUTHOR
       Maroš Kollár
       CPAN ID: MAROS
       maros [at] k-1.com

       http://www.k-1.com

COPYRIGHT
   Business::UPS::Tracking is Copyright (c) 2012 Maroš Kollár -
   <http://www.k-1.com>

LICENCE
   This library is free software, you can redistribute it and/or modify it
   under the same terms as Perl itself.