0.05
No commit activity in last 3 years
No release in over 3 years
There's a lot of open issues
Package tracking made easy. Currently supported services include FedEx, UPS, and USPS.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Development

>= 1.3.5
~> 0.7.0
~> 1.3.0
< 11
~> 2.6.0

Runtime

>= 0.12.0
~> 2.3.0
 Project Readme

Package tracking in a gem. Currently supported carriers are:

  • FedEx

  • UPS

  • USPS

Prerequisites¶ ↑

You will need to sign up to each carrier you wish to utilize. They each have their own requirements and license agreements, so it’s up to you to make sure you follow their terms of agreement. For example, at the time this was written UPS requires that you include their logo on your website when you use their API.

You’ll also need the proper credentials from each carrier, which requires signing up through their individual websites, and is not always free, depending on which portion of their API you plan on using. Trackerific focuses primarily on the tracking APIs, so that’s all you’ll need to use this gem, unless you plan on implementing additional features.

Installation¶ ↑

To use this gem, add this line to your Gemfile

gem 'trackerific'

and then run

bundle install

Configuration¶ ↑

You will need to configure the credentials for each service you’re utilizing. Services without credentials will not be accessed by the gem.

Trackerific.configure do |config|
  config.fedex  = { key: 'key', password: 'password', account_number: 'acct',
                    meter_number: '123' }
  config.ups    = { key: 'key', user_id: 'userid', password: 'secret' }
  config.usps   = { user_id: 'userid' }
end

Tracking with Automatic Service Discovery¶ ↑

Once you configured the services, tracking a package is as easy as

details = Trackerific.track("package id")

Finding a Tracking Service Provider¶ ↑

If you do not know the tracking service provider of a package id you can use Trackerific::Services.find_by_tracking_id:

Trackerific::Services.find_by_tracking_id("123456789012")
Trackerific::Services.find_by_tracking_id("1Z12345E0291980793")
Trackerific::Services.find_by_tracking_id("EJ958083578US")

Each of the above examples will return an Array of Trackerific::Service::Base subclasses that are capable of tracking the given package ID.

Tracking a Package with a Specific Service¶ ↑

Use this method if you need to specify exactly which service to track a package.

details = Trackerific::Services::FedEx.track('123456789012')

Using #track will automatically read the credentials from Trackerific.config. If you need to assign them manually, use #new:

fedex = Trackerific::Services::FedEx.new(
  :account  => "account",
  :meter    => "123456789"
)
details = fedex.track('183689015000001')

Tracking Details¶ ↑

The tracking information is returned in a Trackerific::Details instance.

details.summary - Summary of the tracking events details.events - Array of Trackerific::Events

Tracking Events¶ ↑

Tracking::Details has an events Array with the following properties:

event.date - The date the package was shipped. event.date - The date/time of the event. event.description - Description of an event. event.location - The location of the package during that event.

Note that events are in last-in-first-out order, so the last event will always be the first event the carrier supplied.

Exception handling¶ ↑

Exception handling is esssential for tracking packages. If, for example, you enter the wrong number, or the tracking provider has yet to have added the tracking number to their system, a Trackerific::Error will be raised. Here’s an example on how to handle Trackerific::Errors:

begin
  details = Trackerific.track('EJ958083578US')
  # handle details here
rescue Trackerific::Error => e
  puts e.message
end

Testing¶ ↑

Trackerific provides a mocked service you can use in your unit tests of your application. You must require the service manually.

require 'trackerific/services/mock_service'
# Get a populated Trackerific::Details
details = Trackerific.track("XXXXXXXXXX")
# Throw a Trackerific::Error exception
details = Trackerific.track("XXXxxxxxxx")

Contributing¶ ↑

  1. Fork it

  2. Create your feature branch (git checkout -b my-new-feature)

  3. Commit your changes (git commit -am ‘Add some feature’)

  4. Push to the branch (git push origin my-new-feature)

  5. Create new Pull Request