tracking_link 0.0.1

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.
@@ -0,0 +1,4 @@
1
+ *.gem
2
+ .bundle
3
+ Gemfile.lock
4
+ pkg/*
data/Gemfile ADDED
@@ -0,0 +1,6 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in tracking_link.gemspec
4
+ gemspec
5
+
6
+ gem "rake"
@@ -0,0 +1,11 @@
1
+ require "bundler/gem_tasks"
2
+
3
+ require 'rake/testtask'
4
+
5
+ Rake::TestTask.new(:test) do |t|
6
+ t.libs << 'lib'
7
+ t.libs << 'test'
8
+ t.test_files = Dir.glob("#{File.dirname(__FILE__)}/test/**/*_test.rb").sort
9
+ t.verbose = true
10
+ t.warning = true
11
+ end
@@ -0,0 +1,8 @@
1
+ module TrackingLink
2
+ autoload :Base, "tracking_link/base"
3
+ module Services
4
+ autoload :Fedex, "tracking_link/services/fedex"
5
+ autoload :UPS, "tracking_link/services/ups"
6
+ autoload :USPS, "tracking_link/services/usps"
7
+ end
8
+ end
@@ -0,0 +1,23 @@
1
+ module TrackingLink
2
+ class Base
3
+ include Services
4
+
5
+ SERVICES = [UPS, Fedex, USPS]
6
+
7
+ def self.new(tracking_number)
8
+ service = self.detect(tracking_number)
9
+ if service
10
+ service.new(tracking_number)
11
+ else
12
+ raise ArgumentError, "Invalid tracking number"
13
+ end
14
+ end
15
+
16
+ def self.detect(tracking_number)
17
+ SERVICES.each do |service|
18
+ return service if service.detect(tracking_number)
19
+ end
20
+ false
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,16 @@
1
+ module TrackingLink
2
+ module Services
3
+ class Fedex < Struct.new(:tracking_number)
4
+ def link
5
+ "http://www.fedex.com/Tracking?language=english&cntry_code=us&tracknumbers=#{tracking_number}"
6
+ end
7
+
8
+ def self.detect(tracking_number)
9
+ (tracking_number =~ /^([0-9]{11,11})([0-9])$/) ||
10
+ (tracking_number =~ /^96[0-9]{5,5}([0-9]{14,14})([0-9])$/) ||
11
+ (tracking_number =~ /^([0-9]{15,15})$/) ||
12
+ (tracking_number =~ /^[0-9]{2,2}([0-9]{15,15})([0-9])$/)
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,13 @@
1
+ module TrackingLink
2
+ module Services
3
+ class UPS < Struct.new(:tracking_number)
4
+ def link
5
+ "http://wwwapps.ups.com/WebTracking/processInputRequest?sort_by=status&tracknums_displayed=1&TypeOfInquiryNumber=T&loc=en_us&InquiryNumber1=#{tracking_number}&track.x=0&track.y=0"
6
+ end
7
+
8
+ def self.detect(tracking_number)
9
+ tracking_number =~ /^1Z(\w{15,15})(\w)$/
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,15 @@
1
+ module TrackingLink
2
+ module Services
3
+ class USPS < Struct.new(:tracking_number)
4
+ def link
5
+ "http://trkcnfrm1.smi.usps.com/PTSInternetWeb/InterLabelInquiry.do?origTrackNum=#{tracking_number}"
6
+ end
7
+
8
+ def self.detect(tracking_number)
9
+ (tracking_number =~ /^(91[0-9]{19,19})([0-9])$/) ||
10
+ (tracking_number =~ /^([0-9]{2,2})([0-9]{9,9})([0-9]{8,8})([0-9])$/) ||
11
+ (tracking_number =~ /^([A-Z]{2,2})([0-9]{9,9})([A-Z]{2,2})$/)
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,3 @@
1
+ module TrackingLink
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,20 @@
1
+ require 'test_helper'
2
+
3
+ class BaseTest < Test::Unit::TestCase
4
+ include TrackingLink
5
+ include TrackingLink::Services
6
+
7
+ def test_create_a_new_instance_detecting_service_of_tracking_number
8
+ assert_kind_of Fedex, Base.new("477179081230")
9
+ end
10
+
11
+ def test_raise_error_with_invalid_tracking_number
12
+ assert_raise(ArgumentError) { Base.new("1234567890") }
13
+ end
14
+
15
+ def test_detect_the_class_of_tracking_number
16
+ assert_equal Fedex, Base.detect("871371078356")
17
+ assert_equal UPS, Base.detect("1Z9999W99999999999")
18
+ assert_equal USPS, Base.detect("9101128882300879851252")
19
+ end
20
+ end
@@ -0,0 +1,25 @@
1
+ require 'test_helper'
2
+
3
+ class FedexTest < Test::Unit::TestCase
4
+ include TrackingLink
5
+ include TrackingLink::Services
6
+
7
+ def test_create_a_new_instance_detecting_service_of_tracking_number
8
+ assert_kind_of Fedex, Base.new("871371078356")
9
+ end
10
+
11
+ def test_new_manually
12
+ assert_kind_of Fedex, Fedex.new("871371078356")
13
+ end
14
+
15
+ def test_detect_if_is_a_tracking_number
16
+ assert Fedex.detect("871371078356")
17
+ assert !Fedex.detect("1Z9999W99999999999")
18
+ end
19
+
20
+ def test_link
21
+ @tracking_number = Fedex.new("871371078356")
22
+ assert_equal "http://www.fedex.com/Tracking?language=english&cntry_code=us&tracknumbers=871371078356",
23
+ @tracking_number.link
24
+ end
25
+ end
@@ -0,0 +1,5 @@
1
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
2
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
3
+
4
+ require 'test/unit'
5
+ require 'tracking_link'
@@ -0,0 +1,25 @@
1
+ require 'test_helper'
2
+
3
+ class UPSTest < Test::Unit::TestCase
4
+ include TrackingLink
5
+ include TrackingLink::Services
6
+
7
+ def test_create_a_new_instance_detecting_service_of_tracking_number
8
+ assert_kind_of UPS, Base.new("1Z9999W99999999999")
9
+ end
10
+
11
+ def test_new_manually
12
+ assert_kind_of UPS, UPS.new("1Z9999W99999999999")
13
+ end
14
+
15
+ def test_detect_if_is_a_tracking_number
16
+ assert UPS.detect("1Z9999W99999999999")
17
+ assert !UPS.detect("477179081230")
18
+ end
19
+
20
+ def test_link
21
+ @tracking_number = UPS.new("1Z9999W99999999999")
22
+ assert_equal "http://wwwapps.ups.com/WebTracking/processInputRequest?sort_by=status&tracknums_displayed=1&TypeOfInquiryNumber=T&loc=en_us&InquiryNumber1=1Z9999W99999999999&track.x=0&track.y=0",
23
+ @tracking_number.link
24
+ end
25
+ end
@@ -0,0 +1,25 @@
1
+ require 'test_helper'
2
+
3
+ class USPSTest < Test::Unit::TestCase
4
+ include TrackingLink
5
+ include TrackingLink::Services
6
+
7
+ def test_create_a_new_instance_detecting_service_of_tracking_number
8
+ assert_kind_of USPS, Base.new("9101128882300879851252")
9
+ end
10
+
11
+ def test_new_manually
12
+ assert_kind_of USPS, USPS.new("9101128882300879851252")
13
+ end
14
+
15
+ def test_detect_if_is_a_tracking_number
16
+ assert USPS.detect("9101128882300879851252")
17
+ assert !USPS.detect("477179081230")
18
+ end
19
+
20
+ def test_link
21
+ @tracking_number = USPS.new("9101128882300879851252")
22
+ assert_equal "http://trkcnfrm1.smi.usps.com/PTSInternetWeb/InterLabelInquiry.do?origTrackNum=9101128882300879851252",
23
+ @tracking_number.link
24
+ end
25
+ end
@@ -0,0 +1,24 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "tracking_link/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "tracking_link"
7
+ s.version = TrackingLink::VERSION
8
+ s.authors = ["Guillermo Iguaran"]
9
+ s.email = ["guilleiguaran@gmail.com"]
10
+ s.homepage = ""
11
+ s.summary = %q{Get link for shipping tracking using tracking number}
12
+ s.description = %q{Get link for shipping tracking using tracking number}
13
+
14
+ s.rubyforge_project = "tracking_link"
15
+
16
+ s.files = `git ls-files`.split("\n")
17
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
18
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
19
+ s.require_paths = ["lib"]
20
+
21
+ # specify any dependencies here; for example:
22
+ # s.add_development_dependency "rspec"
23
+ # s.add_runtime_dependency "rest-client"
24
+ end
metadata ADDED
@@ -0,0 +1,65 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: tracking_link
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Guillermo Iguaran
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2011-09-28 00:00:00.000000000 Z
13
+ dependencies: []
14
+ description: Get link for shipping tracking using tracking number
15
+ email:
16
+ - guilleiguaran@gmail.com
17
+ executables: []
18
+ extensions: []
19
+ extra_rdoc_files: []
20
+ files:
21
+ - .gitignore
22
+ - Gemfile
23
+ - Rakefile
24
+ - lib/tracking_link.rb
25
+ - lib/tracking_link/base.rb
26
+ - lib/tracking_link/services/fedex.rb
27
+ - lib/tracking_link/services/ups.rb
28
+ - lib/tracking_link/services/usps.rb
29
+ - lib/tracking_link/version.rb
30
+ - test/base_test.rb
31
+ - test/fedex_test.rb
32
+ - test/test_helper.rb
33
+ - test/ups_test.rb
34
+ - test/usps_test.rb
35
+ - tracking_link.gemspec
36
+ homepage: ''
37
+ licenses: []
38
+ post_install_message:
39
+ rdoc_options: []
40
+ require_paths:
41
+ - lib
42
+ required_ruby_version: !ruby/object:Gem::Requirement
43
+ none: false
44
+ requirements:
45
+ - - ! '>='
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ required_rubygems_version: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ requirements: []
55
+ rubyforge_project: tracking_link
56
+ rubygems_version: 1.8.10
57
+ signing_key:
58
+ specification_version: 3
59
+ summary: Get link for shipping tracking using tracking number
60
+ test_files:
61
+ - test/base_test.rb
62
+ - test/fedex_test.rb
63
+ - test/test_helper.rb
64
+ - test/ups_test.rb
65
+ - test/usps_test.rb