url_resolver 0.1.0
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 +7 -0
- data/lib/url_resolver/cache.rb +15 -0
- data/lib/url_resolver/cache_implementations/nil_class.rb +13 -0
- data/lib/url_resolver/cache_implementations/redis.rb +17 -0
- data/lib/url_resolver/cache_implementations.rb +2 -0
- data/lib/url_resolver/configuration.rb +25 -0
- data/lib/url_resolver/errors.rb +3 -0
- data/lib/url_resolver/resolver.rb +35 -0
- data/lib/url_resolver.rb +12 -0
- metadata +81 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 496aee1fd8a5be5325a8b5187ab7e0b2f05e1af2
|
4
|
+
data.tar.gz: b486d650731d7e02c03795c93e50b66a5c7ffb49
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 7b69fc06bb00ea31e93a010378d703717d58df98a98a587de3f2bcfaf59e85ec2dc6339bc17070a3b26f831255999dc43842c832c772684d9d6340afa98bcd6c
|
7
|
+
data.tar.gz: 685481e4f9a5917e5e8dc1841d04daca67f67c2e6bf4c1e4813e4732b46c1e70f2e912407ce82de2179b610cb00b3766da59b4cfee8c3a2abebe2aa24f3f4635
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module UrlResolver
|
2
|
+
class Cache
|
3
|
+
def initialize(cache = nil)
|
4
|
+
@cache = cache
|
5
|
+
|
6
|
+
if cache.class.name == 'Redis'
|
7
|
+
extend CacheImplementations::RedisCache
|
8
|
+
elsif cache.class.name == 'NilClass'
|
9
|
+
extend CacheImplementations::NilClassCache
|
10
|
+
else
|
11
|
+
raise ArgumentError.new("Invalid cache class: #{cache.class}")
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module UrlResolver
|
2
|
+
module CacheImplementations
|
3
|
+
module RedisCache
|
4
|
+
def set_url(url, destination, ttl = 86400)
|
5
|
+
@cache.setex(url, ttl, destination)
|
6
|
+
end
|
7
|
+
|
8
|
+
def get_url(url)
|
9
|
+
@cache.get(url)
|
10
|
+
end
|
11
|
+
|
12
|
+
def cache_key(url)
|
13
|
+
"url_resolver.urls.#{url}"
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module UrlResolver
|
2
|
+
class Configuration
|
3
|
+
attr_accessor :cache_failures
|
4
|
+
attr_reader :cache, :url_cache
|
5
|
+
|
6
|
+
def initialize
|
7
|
+
@cache_failures = true
|
8
|
+
@cache = nil
|
9
|
+
@url_cache = Cache.new(@cache)
|
10
|
+
end
|
11
|
+
|
12
|
+
def cache=(cache)
|
13
|
+
@cache = cache
|
14
|
+
@url_cache = Cache.new(@cache)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def self.configuration
|
19
|
+
@configuration ||= Configuration.new
|
20
|
+
end
|
21
|
+
|
22
|
+
def self.configure
|
23
|
+
yield(configuration)
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
require 'rest-client'
|
2
|
+
|
3
|
+
module UrlResolver
|
4
|
+
class Resolver
|
5
|
+
def cache
|
6
|
+
UrlResolver.configuration.url_cache
|
7
|
+
end
|
8
|
+
|
9
|
+
def resolve(url)
|
10
|
+
url_to_check = URI.escape(url)
|
11
|
+
cached_url = cache.get_url(url_to_check)
|
12
|
+
return cached_url if cached_url
|
13
|
+
|
14
|
+
response = RestClient.head(url_to_check)
|
15
|
+
response.args[:url].tap do |final_url|
|
16
|
+
cache.set_url(url_to_check, final_url)
|
17
|
+
end
|
18
|
+
rescue SocketError,
|
19
|
+
Errno::ETIMEDOUT,
|
20
|
+
RestClient::InternalServerError,
|
21
|
+
RestClient::ServiceUnavailable,
|
22
|
+
RestClient::BadRequest,
|
23
|
+
RestClient::GatewayTimeout,
|
24
|
+
RestClient::RequestTimeout,
|
25
|
+
RestClient::ResourceNotFound,
|
26
|
+
RestClient::BadGateway,
|
27
|
+
RestClient::Forbidden
|
28
|
+
|
29
|
+
cache.set_url(url_to_check, url) if UrlResolver.configuration.cache_failures
|
30
|
+
url
|
31
|
+
rescue Exception => e
|
32
|
+
raise UrlResolverError.new("#{e.class.to_s}: #{url}")
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
data/lib/url_resolver.rb
ADDED
@@ -0,0 +1,12 @@
|
|
1
|
+
require_relative 'url_resolver/cache.rb'
|
2
|
+
require_relative 'url_resolver/cache_implementations.rb'
|
3
|
+
require_relative 'url_resolver/configuration.rb'
|
4
|
+
require_relative 'url_resolver/errors.rb'
|
5
|
+
require_relative 'url_resolver/resolver.rb'
|
6
|
+
|
7
|
+
module UrlResolver
|
8
|
+
def self.resolve(url)
|
9
|
+
@@resolver ||= UrlResolver::Resolver.new
|
10
|
+
@@resolver.resolve(url)
|
11
|
+
end
|
12
|
+
end
|
metadata
ADDED
@@ -0,0 +1,81 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: url_resolver
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Amir Manji
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2014-03-08 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: rest-client
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - '>='
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 1.6.7
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - '>='
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 1.6.7
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rspec
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - '>='
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 2.14.7
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - '>='
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 2.14.7
|
41
|
+
description: Simple gem to follow redirects to resolve the destination of a URL. Caches
|
42
|
+
results sometimes.
|
43
|
+
email: amanji75@gmail.com
|
44
|
+
executables: []
|
45
|
+
extensions: []
|
46
|
+
extra_rdoc_files: []
|
47
|
+
files:
|
48
|
+
- lib/url_resolver/cache.rb
|
49
|
+
- lib/url_resolver/cache_implementations/nil_class.rb
|
50
|
+
- lib/url_resolver/cache_implementations/redis.rb
|
51
|
+
- lib/url_resolver/cache_implementations.rb
|
52
|
+
- lib/url_resolver/configuration.rb
|
53
|
+
- lib/url_resolver/errors.rb
|
54
|
+
- lib/url_resolver/resolver.rb
|
55
|
+
- lib/url_resolver.rb
|
56
|
+
homepage: http://www.github.com/amirmanji/url_resolver
|
57
|
+
licenses:
|
58
|
+
- MIT
|
59
|
+
metadata: {}
|
60
|
+
post_install_message:
|
61
|
+
rdoc_options: []
|
62
|
+
require_paths:
|
63
|
+
- lib
|
64
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - '>='
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
70
|
+
requirements:
|
71
|
+
- - '>='
|
72
|
+
- !ruby/object:Gem::Version
|
73
|
+
version: '0'
|
74
|
+
requirements: []
|
75
|
+
rubyforge_project:
|
76
|
+
rubygems_version: 2.0.3
|
77
|
+
signing_key:
|
78
|
+
specification_version: 4
|
79
|
+
summary: Url Resolver!
|
80
|
+
test_files: []
|
81
|
+
has_rdoc:
|