url_hunter 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.
data/.gitignore ADDED
@@ -0,0 +1,4 @@
1
+ *.gem
2
+ .bundle
3
+ Gemfile.lock
4
+ pkg/*
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in url_hunter.gemspec
4
+ gemspec
data/Rakefile ADDED
@@ -0,0 +1,6 @@
1
+ require "bundler/gem_tasks"
2
+
3
+ desc "Open a shell with local libraries loaded"
4
+ task :shell do
5
+ exec "irb -I #{File.expand_path('../lib', __FILE__)} -r url_hunter"
6
+ end
data/Readme.md ADDED
@@ -0,0 +1,21 @@
1
+ ## Url Hunter ##
2
+
3
+ Before I go anywhere with you, I want to know where you're taking me
4
+
5
+ ### Quick Reoslve ###
6
+ require 'url_hunter'
7
+ UrlHunter.resolve 'http://bit.ly/2SnEZb'
8
+ => "http://www.microsoft.com/en-us/default.aspx"
9
+
10
+ ### Accessing information ###
11
+ # Try 10 redirects
12
+ hunt = UrlHunter.new('http://bit.ly/2SnEZb', 10)
13
+
14
+ hunt.resolve
15
+ => "http://www.microsoft.com/en-us/default.aspx"
16
+
17
+ hunt.original_url
18
+ => "http://bit.ly/2SnEZb"
19
+
20
+ hunt.tries
21
+ => 4
data/lib/url_hunter.rb ADDED
@@ -0,0 +1,54 @@
1
+ require 'uri'
2
+ require 'net/http'
3
+
4
+ class UrlHunter
5
+ VERSION = "0.0.1"
6
+ class Error < StandardError; end
7
+
8
+ attr_reader :url, :original_url, :limit, :tries
9
+
10
+ # Class level wrapper
11
+ def self.resolve(url, limit = 5)
12
+ self.new(url, limit = 5).resolve
13
+ end
14
+
15
+ # Init
16
+ def initialize(url, limit = 5)
17
+ if not url =~ /^(http|https):\/\//i
18
+ raise UrlHunter::Error, 'URL must begin with http:// or https://'
19
+ end
20
+
21
+ @limit = limit > 0 ? limit : 5
22
+ @original_url = url
23
+ @url = url
24
+ @tries = 0
25
+ end
26
+
27
+ # Instance resolve function
28
+ def resolve
29
+ # Return what we have so far if we're above the limit
30
+ return @url if @tries >= @limit
31
+ u = URI.parse(@url)
32
+
33
+ # Try to get a NET response
34
+ # Or just return URL
35
+ begin
36
+ res = Net::HTTP.get_response(u)
37
+ rescue Exception
38
+ return @url
39
+ end
40
+
41
+ if res.kind_of?(Net::HTTPRedirection)
42
+ redirect = res['Location']
43
+ # Append Location re-direct to previous URL if it's relative
44
+ if not redirect =~ /^(http|https):\/\//i
45
+ redirect = @url + redirect
46
+ end
47
+ @url = redirect
48
+ @tries += 1
49
+ resolve
50
+ else
51
+ @url
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,20 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "url_hunter"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "url_hunter"
7
+ s.version = UrlHunter::VERSION
8
+ s.authors = ["Bryan Shelton"]
9
+ s.email = ["bryan@sheltonopensolutions.com"]
10
+ s.homepage = "https://github.com/bshelton229/url_hunter"
11
+ s.summary = %q{Resolves URL re-directs given a limit}
12
+ s.description = %q{Wait a minute, before I go anywhere with you, I want to know where you're taking me.}
13
+
14
+ s.rubyforge_project = "url_hunter"
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
+ end
metadata ADDED
@@ -0,0 +1,52 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: url_hunter
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Bryan Shelton
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-01-03 00:00:00.000000000 Z
13
+ dependencies: []
14
+ description: Wait a minute, before I go anywhere with you, I want to know where you're
15
+ taking me.
16
+ email:
17
+ - bryan@sheltonopensolutions.com
18
+ executables: []
19
+ extensions: []
20
+ extra_rdoc_files: []
21
+ files:
22
+ - .gitignore
23
+ - Gemfile
24
+ - Rakefile
25
+ - Readme.md
26
+ - lib/url_hunter.rb
27
+ - url_hunter.gemspec
28
+ homepage: https://github.com/bshelton229/url_hunter
29
+ licenses: []
30
+ post_install_message:
31
+ rdoc_options: []
32
+ require_paths:
33
+ - lib
34
+ required_ruby_version: !ruby/object:Gem::Requirement
35
+ none: false
36
+ requirements:
37
+ - - ! '>='
38
+ - !ruby/object:Gem::Version
39
+ version: '0'
40
+ required_rubygems_version: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
46
+ requirements: []
47
+ rubyforge_project: url_hunter
48
+ rubygems_version: 1.8.11
49
+ signing_key:
50
+ specification_version: 3
51
+ summary: Resolves URL re-directs given a limit
52
+ test_files: []