unshorten 0.2.1 → 0.3.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 +6 -14
- data/lib/unshorten.rb +13 -5
- data/test/test_unshorten.rb +39 -28
- metadata +36 -9
checksums.yaml
CHANGED
@@ -1,15 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
metadata.gz: !binary |-
|
9
|
-
ZjFkZDBiYmNjOGY0MDI3MDFlM2VlYmU1MDE5OTNjODk2YzUxNDBmMzJjMmZj
|
10
|
-
MWEzMDBhZmRjNzExM2ZkOGE2MTU2MTU0ZDUzYjJjNjgwYTkyM2Q0MjI3ZDVh
|
11
|
-
NGFiYzgzNGE3ZDAwNWYzZTQ5NDU1MzQyODk0YzAxNjYyM2EyNjU=
|
12
|
-
data.tar.gz: !binary |-
|
13
|
-
Y2FkZGY5NDU2NGI2ZDI4ZGMyOTVhYTJhNzIwNjU2MGM3MzFiODY3M2E3OWQ4
|
14
|
-
ODQ5YmVjZjNkMjM3MjMxNGFlZGQwZDk5Y2I3ZDdkNWU0MWZmM2QyZWVkODRk
|
15
|
-
MDNkYTIwNGE2OTdiNjY5Y2Q4OTNkYzQxNDkyMGI3NjJhY2Y4ODY=
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: e9b5c2d553a05779d8a45cec5d288152a2ee9840
|
4
|
+
data.tar.gz: 4a0c1dfe4bbfe38e0c276023d1f1d1a64a0e9465
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 40481e8187e84d1d7921ae79b52836e9033813d0cebf6b27c6b1b7e331c28eb8ad3677e8b1ae03cee2402e180c28cc2c6d58cd16a315afbba08933280d908c04
|
7
|
+
data.tar.gz: e4f1bd8db26b1801c8ffc57f503a0882197633faf9b95733fd2ecd32b1bfaf6c38b05f338b0622fd6669b360b3cedc50728be96ebda1473e4c41da5539f8bb3f
|
data/lib/unshorten.rb
CHANGED
@@ -12,7 +12,8 @@ class Unshorten
|
|
12
12
|
DEFAULT_OPTIONS = {
|
13
13
|
:max_level => 10,
|
14
14
|
:timeout => 2,
|
15
|
-
:short_hosts =>
|
15
|
+
:short_hosts => false,
|
16
|
+
:short_urls => /^(?:https?:)?\/*[^\/]*\/*[^\/]*$/,
|
16
17
|
:use_cache => true,
|
17
18
|
:add_missing_http => true
|
18
19
|
}
|
@@ -29,8 +30,12 @@ class Unshorten
|
|
29
30
|
# @option options [Integer] :timeout Timeout in seconds, for every request
|
30
31
|
# @option options [Regexp] :short_hosts Hosts that provides short url
|
31
32
|
# services, only send requests if
|
32
|
-
# host matches this regexp. Set to
|
33
|
-
# to follow all redirects.
|
33
|
+
# host matches this regexp. Set to
|
34
|
+
# nil to follow all redirects.
|
35
|
+
# @option options [Regexp] :short_urls URLs that looks like a short one.
|
36
|
+
# Only send requests when the URL
|
37
|
+
# match this regexp. Set to nil to
|
38
|
+
# follow all redirects.
|
34
39
|
# @option options [Boolean] :use_cache Use cached result if available
|
35
40
|
# @option options [Boolean] :add_missing_http add 'http://' if missing
|
36
41
|
# @see DEFAULT_OPTIONS
|
@@ -69,11 +74,12 @@ class Unshorten
|
|
69
74
|
|
70
75
|
return @@cache[url] if options[:use_cache] and @@cache[url]
|
71
76
|
return url if level >= options[:max_level]
|
77
|
+
return url if options[:short_urls] && ! (url =~ options[:short_urls])
|
72
78
|
|
73
79
|
uri = URI.parse(url) rescue nil
|
74
80
|
|
75
81
|
return url if uri.nil?
|
76
|
-
return url if options[:short_hosts]
|
82
|
+
return url if options[:short_hosts] && ! (uri.host =~ options[:short_hosts])
|
77
83
|
|
78
84
|
http = Net::HTTP.new(uri.host, uri.port)
|
79
85
|
http.open_timeout = options[:timeout]
|
@@ -84,7 +90,9 @@ class Unshorten
|
|
84
90
|
|
85
91
|
if response.is_a? Net::HTTPRedirection and response['location'] then
|
86
92
|
expire_cache if @@cache.size > CACHE_SIZE_LIMIT
|
87
|
-
|
93
|
+
location = response['location']
|
94
|
+
location = (uri + location).to_s if location
|
95
|
+
@@cache[url] = follow(location, options, level + 1)
|
88
96
|
else
|
89
97
|
url
|
90
98
|
end
|
data/test/test_unshorten.rb
CHANGED
@@ -1,42 +1,53 @@
|
|
1
1
|
# coding: utf-8
|
2
2
|
|
3
|
-
require '
|
3
|
+
require 'minitest/autorun'
|
4
4
|
require 'unshorten'
|
5
5
|
|
6
|
-
class UnshortenTest < Test
|
7
|
-
|
8
|
-
|
6
|
+
class UnshortenTest < MiniTest::Test
|
7
|
+
ORIGINAL_URL = 'http://dir.yahoo.com/Reference/Libraries/Library_and_Information_Science/Metadata/URIs___Universal_Resource_Identifiers/URLs___Uniform_Resource_Locators/URL_Shortening/'
|
8
|
+
SHORTENED_URL = 'http://tinyurl.com/j'
|
9
9
|
|
10
|
-
|
11
|
-
|
12
|
-
|
10
|
+
def test_unshorten_alias
|
11
|
+
assert_equal ORIGINAL_URL, Unshorten[SHORTENED_URL, :use_cache => false]
|
12
|
+
end
|
13
13
|
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
14
|
+
def test_illegal_urls
|
15
|
+
illegal_url = 'http://a汉字bc.那么/是非法的?url'
|
16
|
+
assert_equal illegal_url, Unshorten.unshorten(illegal_url, :use_cache => false)
|
17
|
+
end
|
18
18
|
|
19
|
-
|
20
|
-
|
21
|
-
|
19
|
+
def test_option_max_level
|
20
|
+
assert_equal SHORTENED_URL, Unshorten.unshorten(SHORTENED_URL, :max_level => 0, :use_cache => false)
|
21
|
+
end
|
22
22
|
|
23
|
-
|
24
|
-
|
25
|
-
|
23
|
+
def test_option_short_hosts
|
24
|
+
assert_equal SHORTENED_URL, Unshorten.unshorten(SHORTENED_URL, :short_hosts => /jmp/, :use_cache => false)
|
25
|
+
end
|
26
26
|
|
27
|
-
|
28
|
-
|
27
|
+
def test_option_short_urls
|
28
|
+
assert_equal SHORTENED_URL, Unshorten.unshorten(SHORTENED_URL, :short_urls => /DONT_MATCH/, :use_cache => false)
|
29
|
+
dummy_url = 'http://a.com/b/c'
|
30
|
+
assert_equal dummy_url, Unshorten.unshorten(dummy_url, :use_cache => false)
|
31
|
+
end
|
29
32
|
|
30
|
-
|
31
|
-
|
32
|
-
end
|
33
|
+
HTTPS_LINK_1_FULL = 'https://github.com/aaronpk/unshorten'
|
34
|
+
HTTPS_LINK_1_SHORT = 'https://t.co/5204FqAr'
|
33
35
|
|
34
|
-
|
35
|
-
|
36
|
-
|
36
|
+
def test_https_link
|
37
|
+
assert_equal HTTPS_LINK_1_FULL, Unshorten.unshorten(HTTPS_LINK_1_SHORT, :short_hosts => /./, :use_cache => false)
|
38
|
+
end
|
39
|
+
|
40
|
+
def test_follow_all_redirects
|
41
|
+
assert_equal HTTPS_LINK_1_FULL, Unshorten.unshorten(HTTPS_LINK_1_SHORT, :short_hosts => false, :use_cache => false)
|
42
|
+
end
|
43
|
+
|
44
|
+
def test_only_tco_links
|
45
|
+
assert_equal "http://aaron.pk/649", Unshorten.unshorten(HTTPS_LINK_1_SHORT, :short_hosts => /t\.co/, :use_cache => false)
|
46
|
+
end
|
47
|
+
|
48
|
+
def test_relative_url
|
49
|
+
assert_equal 'http://waterpigs.co.uk/articles/getting-started-with-microformats2/', Unshorten.unshorten('http://bit.ly/1l1Dz6K', :short_urls => nil, :use_cache => false)
|
50
|
+
end
|
37
51
|
|
38
|
-
def test_only_tco_links
|
39
|
-
assert_equal "http://aaron.pk/649", Unshorten.unshorten(HTTPS_LINK_1_SHORT, :short_hosts => /t\.co/, :use_cache => false)
|
40
|
-
end
|
41
52
|
|
42
53
|
end
|
metadata
CHANGED
@@ -1,15 +1,43 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: unshorten
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
|
-
- Wu
|
7
|
+
- Jun Wu
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
12
|
-
dependencies:
|
11
|
+
date: 2014-03-09 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: minitest
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rake
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
13
41
|
description: Get original URLs from shortened ones
|
14
42
|
email: quark@lihdd.net
|
15
43
|
executables:
|
@@ -17,9 +45,9 @@ executables:
|
|
17
45
|
extensions: []
|
18
46
|
extra_rdoc_files: []
|
19
47
|
files:
|
48
|
+
- bin/unshorten
|
20
49
|
- lib/unshorten.rb
|
21
50
|
- test/test_unshorten.rb
|
22
|
-
- bin/unshorten
|
23
51
|
homepage: https://github.com/quark-zju/unshorten
|
24
52
|
licenses: []
|
25
53
|
metadata: {}
|
@@ -29,20 +57,19 @@ require_paths:
|
|
29
57
|
- lib
|
30
58
|
required_ruby_version: !ruby/object:Gem::Requirement
|
31
59
|
requirements:
|
32
|
-
- -
|
60
|
+
- - ">="
|
33
61
|
- !ruby/object:Gem::Version
|
34
62
|
version: '0'
|
35
63
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
36
64
|
requirements:
|
37
|
-
- -
|
65
|
+
- - ">="
|
38
66
|
- !ruby/object:Gem::Version
|
39
67
|
version: '0'
|
40
68
|
requirements: []
|
41
69
|
rubyforge_project:
|
42
|
-
rubygems_version: 2.0
|
70
|
+
rubygems_version: 2.2.0
|
43
71
|
signing_key:
|
44
72
|
specification_version: 4
|
45
73
|
summary: Unshorten URLs
|
46
74
|
test_files:
|
47
75
|
- test/test_unshorten.rb
|
48
|
-
has_rdoc:
|