expurrel 0.1.0 → 0.2.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.
@@ -1,17 +1,20 @@
1
1
  = Expurrel
2
2
 
3
- Expurrel is a mini library to does tiny url decoding. It supports most of the tiny url
4
- providers by doing a request to the tiny url provider and getting back the redirect code. In
5
- this implementation the urls are cached.
3
+ Expurrel is a library that does short url decoding for each url shortener service. It supports most of the tiny url
4
+ providers by doing a request to the tiny url provider and getting back the redirect code. Expurrel tries to be fast by also doing
5
+ some simple caching.
6
6
 
7
7
  == Install
8
8
 
9
+ To install expurrel:
10
+
11
+ gem install expurrel
9
12
 
10
13
  == Usage
11
14
 
12
15
 
13
16
  e = Expurrel.new('http://bit.ly/aanv6P')
14
- e.decode.should eql('http://www.jaapvandermeer.com/2010/02/12/introducing-myself/')
17
+ e.decode == 'http://www.jaapvandermeer.com/2010/02/12/introducing-myself/'
15
18
 
16
19
  == Notes
17
20
 
@@ -19,7 +22,25 @@ The cache size is standard 1000 urls, to make it bigger:
19
22
 
20
23
  Expurrel.cache = SimpleCache.new(:max_size => 10000)
21
24
 
22
-
25
+ == Adding new tiny URL providers
26
+
27
+ Standard there is a list of about 200 providers. If one is missing, please add it to
28
+ urlshorteners.txt or let me know by adding a issue.
29
+
30
+ e = Expurrel.PROVIDERS << 'bit.ly'
31
+
32
+
33
+ == Source
34
+
35
+ The source is maintained here:
36
+
37
+ http://github.com/japetheape/expurrel
38
+
39
+
40
+ An introductory post is here:
41
+
42
+ http://www.jaapvandermeer.com/2010/02/13/expurrel-a-library-to-decode-short-urls-in-ruby
43
+
23
44
 
24
45
 
25
46
  == Note on Patches/Pull Requests
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.0
1
+ 0.2.0
@@ -0,0 +1,59 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = %q{expurrel}
8
+ s.version = "0.2.0"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = ["Jaap van der Meer"]
12
+ s.date = %q{2010-02-13}
13
+ s.description = %q{Expurrel decodes tiny urls in a efficient way.}
14
+ s.email = %q{jaapvandermeer@gmail.com}
15
+ s.extra_rdoc_files = [
16
+ "LICENSE",
17
+ "README.rdoc"
18
+ ]
19
+ s.files = [
20
+ ".document",
21
+ ".gitignore",
22
+ "LICENSE",
23
+ "README.rdoc",
24
+ "Rakefile",
25
+ "VERSION",
26
+ "expurrel.gemspec",
27
+ "lib/expurrel.rb",
28
+ "lib/simple_cache.rb",
29
+ "spec/expurrel_spec.rb",
30
+ "spec/simple_cache_spec.rb",
31
+ "spec/spec.opts",
32
+ "spec/spec_helper.rb",
33
+ "urlshorteners.txt"
34
+ ]
35
+ s.homepage = %q{http://github.com/japetheape/expurrel}
36
+ s.rdoc_options = ["--charset=UTF-8"]
37
+ s.require_paths = ["lib"]
38
+ s.rubygems_version = %q{1.3.5}
39
+ s.summary = %q{Library to decode tiny urls in a efficient way}
40
+ s.test_files = [
41
+ "spec/expurrel_spec.rb",
42
+ "spec/simple_cache_spec.rb",
43
+ "spec/spec_helper.rb"
44
+ ]
45
+
46
+ if s.respond_to? :specification_version then
47
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
48
+ s.specification_version = 3
49
+
50
+ if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
51
+ s.add_development_dependency(%q<rspec>, [">= 1.2.9"])
52
+ else
53
+ s.add_dependency(%q<rspec>, [">= 1.2.9"])
54
+ end
55
+ else
56
+ s.add_dependency(%q<rspec>, [">= 1.2.9"])
57
+ end
58
+ end
59
+
@@ -2,48 +2,46 @@ require 'open-uri'
2
2
  require 'net/http'
3
3
  require 'simple_cache'
4
4
 
5
- # Expurrel is a tiny url that can be decoded.
5
+ # Expurrel is a url that can be a shortened one Expurrel can decode it then.
6
6
  class Expurrel
7
7
  PROVIDERS = []
8
- PROVIDERS_LIST_FILE = File.join(File.dirname(__FILE__), '..', 'tinyurlproviders.txt')
9
-
8
+ PROVIDERS_LIST_FILE = File.join(File.dirname(__FILE__), '..', 'urlshorteners.txt')
10
9
 
11
10
  @@cache = SimpleCache.new(:max_size => 1000)
12
11
 
13
- # Give expurrel a new url
12
+ # Give expurrel a new url.
14
13
  def initialize(url)
15
14
  @url = url
16
15
  end
17
16
 
18
17
 
19
18
  # This method checks first if it's a tiny url domain from the list.
20
- # 1. Is it a tinyurl?
19
+ # 1. Is it a short url?
21
20
  # 2. It is cached? (tinyurls won't change we can cache forever)
22
21
  # 3. Decode (slow!), does http request.
23
22
  def decode
24
23
  return begin
25
- if !self.is_tiny_url?
24
+ if !self.is_short_url?
26
25
  @url
27
26
  elsif @@cache.has_key?(@url)
28
27
  @@cache.value(@url)
29
28
  else
30
29
  # TODO add it to the cache
31
- decoded_url = self.class.reverse_tinyurl(@url)
30
+ decoded_url = self.class.reverse_shorturl(@url)
32
31
  @@cache.cache!(@url, decoded_url)
33
32
  decoded_url
34
33
  end
35
34
  end
36
35
  end
37
36
 
38
-
39
- # Is this a tiny url
40
- def is_tiny_url?
41
- is_tiny_domain?(self.domain)
37
+ # Is this a short url
38
+ def is_short_url?
39
+ is_short_domain?(self.domain)
42
40
  end
43
41
 
44
42
 
45
- # Is it a tiny domain?
46
- def is_tiny_domain?(domain)
43
+ # Is it a short domain?
44
+ def is_short_domain?(domain)
47
45
  PROVIDERS.each do |l|
48
46
  # TODO regular expression matching
49
47
  if domain.include?(l)
@@ -71,18 +69,17 @@ class Expurrel
71
69
  def load_providers!
72
70
  return if !PROVIDERS.empty?
73
71
  File.open(PROVIDERS_LIST_FILE, "r") .each_line do |line|
74
- PROVIDERS << line
72
+ l = line.strip
73
+ PROVIDERS << l unless l.empty?
75
74
  end
76
75
  end
77
76
 
78
77
 
79
-
80
-
81
78
  # Uses the header file sent back to decode
82
- # the tiny url.
79
+ # the shortened url.
83
80
  # Trick provided by:
84
81
  # http://garrickvanburen.com/archive/how-to-decode-tinyurls-with-ruby
85
- def reverse_tinyurl(tinyurl)
82
+ def reverse_shorturl(tinyurl)
86
83
  Net::HTTP.get_response(URI.parse(tinyurl)).to_hash['location'].to_s
87
84
  end
88
85
 
@@ -1,10 +1,6 @@
1
1
  require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
2
 
3
3
  describe "Expurrel" do
4
- it "fails" do
5
- #fail "hey buddy, you should probably rename this file and start specing for real"
6
- 1.should eql(1)
7
- end
8
4
 
9
5
  it "should load the text file into a constant" do
10
6
  Expurrel::PROVIDERS.include?('bit.ly').should be true
@@ -21,4 +17,8 @@ describe "Expurrel" do
21
17
  end
22
18
 
23
19
 
20
+ it "should decode a url from bacn.me" do
21
+ e = Expurrel.new('http://bacn.me/xg4')
22
+ e.decode.should eql('http://www.jo.com')
23
+ end
24
24
  end
@@ -0,0 +1,210 @@
1
+ bit.ly
2
+ 0rz.tw
3
+ 2tu.us
4
+ 307.to
5
+ 6url.com
6
+ a.gg
7
+ a.nf
8
+ a2n.eu
9
+ ad.vu
10
+ adf.ly
11
+ adjix.com
12
+ alturl.com
13
+ atu.ca
14
+ azqq.com
15
+ b23.ru
16
+ b65.com
17
+ bacn.me
18
+ bit.ly
19
+ bloat.me
20
+ budurl.com
21
+ buk.me
22
+ canurl.com
23
+ chilp.it
24
+ clck.ru
25
+ cli.gs
26
+ cliccami.info
27
+ clipurl.us
28
+ clop.in
29
+ cort.as
30
+ cuturls.com
31
+ decenturl.com
32
+ digg.com
33
+ doiop.com
34
+ dwarfurl.com
35
+ easyurl.net
36
+ eepurl.com
37
+ ewerl.com
38
+ ff.im
39
+ fff.to
40
+ fhurl.com
41
+ flingk.com
42
+ flq.us
43
+ fly2.ws
44
+ fwd4.me
45
+ fwdurl.net
46
+ g8l.us
47
+ gl.am
48
+ go.9nl.com
49
+ goshrink.com
50
+ hex.io
51
+ href.in
52
+ htxt.it
53
+ hugeurl.com
54
+ hurl.ws
55
+ icanhaz.com
56
+ idek.net
57
+ is.gd
58
+ jijr.com
59
+ kissa.be
60
+ kl.am
61
+ klck.me
62
+ korta.nu
63
+ l9k.net
64
+ liip.to
65
+ liltext.com
66
+ lin.cr
67
+ linkgap.com
68
+ liurl.cn
69
+ ln-s.net
70
+ ln-s.ru
71
+ lnkurl.com
72
+ lru.jp
73
+ lu.to
74
+ lurl.no
75
+ memurl.com
76
+ merky.de
77
+ migre.me
78
+ minilien.com
79
+ moourl.com
80
+ myurl.in
81
+ nanoref.com
82
+ nanourl.se
83
+ netnet.me
84
+ ni.to
85
+ nn.nf
86
+ notlong.com
87
+ nutshellurl.com
88
+ o-x.fr
89
+ offur.com
90
+ omf.gd
91
+ onsaas.info
92
+ ow.ly
93
+ parv.us
94
+ peaurl.com
95
+ ping.fm
96
+ piurl.com
97
+ plumurl.com
98
+ plurl.me
99
+ pnt.me
100
+ poprl.com
101
+ post.ly
102
+ ptiturl.com
103
+ qlnk.net
104
+ qurlyq.com
105
+ r.im
106
+ rb6.me
107
+ rde.me
108
+ reallytinyurl.com
109
+ redir.ec
110
+ redirects.ca
111
+ redirx.com
112
+ ri.ms
113
+ rickroll.it
114
+ rubyurl.com
115
+ s3nt.com
116
+ s7y.us
117
+ shink.de
118
+ short.ie
119
+ short.to
120
+ shortenurl.com
121
+ shorterlink.com
122
+ shortlinks.co.uk
123
+ shoturl.us
124
+ shredurl.com
125
+ shrinkify.com
126
+ shrinkr.com
127
+ shrinkurl.us
128
+ shrtnd.com
129
+ shurl.net
130
+ shw.me
131
+ smallr.com
132
+ smurl.com
133
+ sn.im
134
+ sn.vc
135
+ snadr.it
136
+ snipr.com
137
+ snipurl.com
138
+ snurl.com
139
+ sp2.ro
140
+ spedr.com
141
+ srnk.net
142
+ srs.li
143
+ starturl.com
144
+ surl.co.uk
145
+ ta.gd
146
+ tcrn.ch
147
+ tgr.me
148
+ tighturl.com
149
+ tiny.cc
150
+ tiny.pl
151
+ tinylink.com
152
+ tinyurl.com
153
+ to.ly
154
+ togoto.us
155
+ tr.im
156
+ tra.kz
157
+ trunc.it
158
+ tubeurl.com
159
+ twitclicks.com
160
+ twitterurl.net
161
+ twiturl.de
162
+ twurl.cc
163
+ twurl.nl
164
+ u.mavrev.com
165
+ u.nu
166
+ u76.org
167
+ ub0.cc
168
+ ulu.lu
169
+ updating.me
170
+ ur1.ca
171
+ url.az
172
+ url.co.uk
173
+ url.ie
174
+ urlborg.com
175
+ urlbrief.com
176
+ urlcut.com
177
+ urlcutter.com
178
+ urlhawk.com
179
+ urlkiss.com
180
+ urlpire.com
181
+ urlvi.be
182
+ urlx.ie
183
+ virl.com
184
+ wapurl.co.uk
185
+ wipi.es
186
+ x.se
187
+ xil.in
188
+ xrl.in
189
+ xrl.us
190
+ xurl.jp
191
+ xzb.cc
192
+ yatuc.com
193
+ yep.it
194
+ yfrog.com
195
+ zi.ma
196
+ zurl.ws
197
+ zz.gd
198
+ zzang.kr
199
+ ›.ws
200
+ ✩.ws
201
+ ✿.ws
202
+ ❥.ws
203
+ ➔.ws
204
+ ➞.ws
205
+ ➡.ws
206
+ ➨.ws
207
+ ➯.ws
208
+ ➹.ws
209
+ ➽.ws
210
+
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: expurrel
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jaap van der Meer
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2010-02-12 00:00:00 +01:00
12
+ date: 2010-02-13 00:00:00 +01:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -38,13 +38,14 @@ files:
38
38
  - README.rdoc
39
39
  - Rakefile
40
40
  - VERSION
41
+ - expurrel.gemspec
41
42
  - lib/expurrel.rb
42
43
  - lib/simple_cache.rb
43
44
  - spec/expurrel_spec.rb
44
45
  - spec/simple_cache_spec.rb
45
46
  - spec/spec.opts
46
47
  - spec/spec_helper.rb
47
- - tinyurlproviders.txt
48
+ - urlshorteners.txt
48
49
  has_rdoc: true
49
50
  homepage: http://github.com/japetheape/expurrel
50
51
  licenses: []
@@ -1 +0,0 @@
1
- bit.ly