shorturl 0.8.6 → 0.8.7
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/ChangeLog +14 -6
- data/lib/shorturl.rb +79 -62
- metadata +2 -2
data/ChangeLog
CHANGED
@@ -1,20 +1,28 @@
|
|
1
|
+
0.8.7:
|
2
|
+
- Added support for ur1.ca (thanks to raneksi)
|
3
|
+
- Added support for bit.ly (thanks to raneksi)
|
4
|
+
- Fixed support for snipurl.com (thanks to raneksi)
|
5
|
+
- Fixed support for shortify (thanks to raneksi)
|
6
|
+
- Fixed support for moourl.com (thanks to raneksi)
|
7
|
+
- Removed support for makeashorterlink.com (thanks to raneksi)
|
8
|
+
|
1
9
|
0.8.4:
|
2
10
|
- Fixed support for RubyURL.com
|
3
11
|
- Added support for urlTea.com
|
4
12
|
- Added support for moourl.com
|
5
|
-
|
13
|
+
|
6
14
|
0.7.0:
|
7
15
|
- Added shortify.com, 0rz.net
|
8
16
|
- Modified unit tests
|
9
17
|
- Started using CVS on RubyForge
|
10
|
-
|
18
|
+
|
11
19
|
0.6.0:
|
12
20
|
- Changed the method for getting the URL for ln-s.net to use their
|
13
21
|
API. So basically, this means the new additional argument attribute
|
14
22
|
in the Service class is now useless, because no service uses it. I've
|
15
23
|
removed it along with the Hash#to_html_args method.
|
16
24
|
- Added d62.net, shiturl.com, littlink.com and clipurl.com
|
17
|
-
|
25
|
+
|
18
26
|
0.5.0:
|
19
27
|
- Added two services: fyad.org and ln-s.net (thanks to Daniel
|
20
28
|
Dipaolo)
|
@@ -39,10 +47,10 @@
|
|
39
47
|
0.2.1:
|
40
48
|
- Added makeashorterlink.com and skinnylink.com
|
41
49
|
- Refactored get_short_url
|
42
|
-
|
50
|
+
|
43
51
|
0.2.0:
|
44
52
|
- Added shorl.com, snipurl.com and metamark.net
|
45
|
-
|
53
|
+
|
46
54
|
0.1.0:
|
47
55
|
- Refactored the tinyurl and rubyurl methods
|
48
56
|
- URI.extract to get URLs instead of regular expressions
|
@@ -50,6 +58,6 @@
|
|
50
58
|
of a network error
|
51
59
|
- More thorough unit tests
|
52
60
|
- Made tinyurl, rubyurl and get_short_url private class methods
|
53
|
-
|
61
|
+
|
54
62
|
0.0.1:
|
55
63
|
- Initial release
|
data/lib/shorturl.rb
CHANGED
@@ -7,11 +7,14 @@ require "net/http"
|
|
7
7
|
require "cgi"
|
8
8
|
require "uri"
|
9
9
|
|
10
|
+
class ServiceNotAvailable < Exception
|
11
|
+
end
|
12
|
+
|
10
13
|
class InvalidService < Exception
|
11
14
|
end
|
12
15
|
|
13
16
|
class Service
|
14
|
-
attr_accessor :port, :code, :method, :action, :field, :block
|
17
|
+
attr_accessor :port, :code, :method, :action, :field, :block, :response_block
|
15
18
|
|
16
19
|
# Intialize the service with a hostname (required parameter) and you
|
17
20
|
# can override the default values for the HTTP port, expected HTTP
|
@@ -25,7 +28,6 @@ class Service
|
|
25
28
|
@method = :post
|
26
29
|
@action = "/"
|
27
30
|
@field = "url"
|
28
|
-
@block = lambda { |body| }
|
29
31
|
|
30
32
|
if block_given?
|
31
33
|
yield self
|
@@ -37,13 +39,15 @@ class Service
|
|
37
39
|
def call(url)
|
38
40
|
Net::HTTP.start(@hostname, @port) { |http|
|
39
41
|
response = case @method
|
40
|
-
when :post: http.post(@action, "#{@field}=#{url}")
|
42
|
+
when :post: http.post(@action, "#{@field}=#{CGI.escape(url)}")
|
41
43
|
when :get: http.get("#{@action}?#{@field}=#{CGI.escape(url)}")
|
42
44
|
end
|
43
45
|
if response.code == @code.to_s
|
44
|
-
@block.call(response.read_body)
|
46
|
+
@response_block ? @response_block.call(response) : @block.call(response.read_body)
|
45
47
|
end
|
46
48
|
}
|
49
|
+
rescue Errno::ECONNRESET => e
|
50
|
+
raise ServiceNotAvailable, e.to_s, e.backtrace
|
47
51
|
end
|
48
52
|
end
|
49
53
|
|
@@ -71,13 +75,15 @@ class ShortURL
|
|
71
75
|
s.block = lambda { |body| URI.extract(body)[2] }
|
72
76
|
},
|
73
77
|
|
78
|
+
# SnipURL offers a restful HTTP API but it cannot be used without
|
79
|
+
# registration.
|
74
80
|
:snipurl => Service.new("snipurl.com") { |s|
|
75
|
-
s.action = "/index
|
76
|
-
s.field = "
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
}
|
81
|
+
s.action = "/site/index"
|
82
|
+
s.field = "url"
|
83
|
+
|
84
|
+
# As with other services, this is far from elegant and might break
|
85
|
+
# any time. Might just be better to do some HTML parsing instead.
|
86
|
+
s.block = lambda { |body| URI.extract(body).grep(/http:\/\/snipurl.com/)[0] }
|
81
87
|
},
|
82
88
|
|
83
89
|
:metamark => Service.new("metamark.net") { |s|
|
@@ -86,27 +92,6 @@ class ShortURL
|
|
86
92
|
s.block = lambda { |body| URI.extract(body).grep(/xrl.us/)[0] }
|
87
93
|
},
|
88
94
|
|
89
|
-
:makeashorterlink => Service.new("makeashorterlink.com") { |s|
|
90
|
-
s.action = "/index.php"
|
91
|
-
s.block = lambda { |body| URI.extract(body).grep(/makeashorterlink/)[0] }
|
92
|
-
},
|
93
|
-
|
94
|
-
:skinnylink => Service.new("skinnylink.com") { |s|
|
95
|
-
s.block = lambda { |body| URI.extract(body).grep(/skinnylink/)[0] }
|
96
|
-
},
|
97
|
-
|
98
|
-
:linktrim => Service.new("linktrim.com") { |s|
|
99
|
-
s.method = :get
|
100
|
-
s.action = "/lt/generate"
|
101
|
-
s.block = lambda { |body| URI.extract(body).grep(/\/linktrim/)[1] }
|
102
|
-
},
|
103
|
-
|
104
|
-
:shorterlink => Service.new("shorterlink.com") { |s|
|
105
|
-
s.method = :get
|
106
|
-
s.action = "/add_url.html"
|
107
|
-
s.block = lambda { |body| URI.extract(body).grep(/shorterlink/)[0] }
|
108
|
-
},
|
109
|
-
|
110
95
|
:minilink => Service.new("minilink.org") { |s|
|
111
96
|
s.method = :get
|
112
97
|
s.block = lambda { |body| URI.extract(body)[-1] }
|
@@ -118,40 +103,16 @@ class ShortURL
|
|
118
103
|
s.block = lambda { |body| URI.extract(body)[0] }
|
119
104
|
},
|
120
105
|
|
121
|
-
:fyad => Service.new("fyad.org") { |s|
|
122
|
-
s.method = :get
|
123
|
-
s.block = lambda { |body| URI.extract(body).grep(/fyad.org/)[2] }
|
124
|
-
},
|
125
|
-
|
126
|
-
:d62 => Service.new("d62.net") { |s|
|
127
|
-
s.method = :get
|
128
|
-
s.block = lambda { |body| URI.extract(body)[0] }
|
129
|
-
},
|
130
|
-
|
131
106
|
:shiturl => Service.new("shiturl.com") { |s|
|
132
107
|
s.method = :get
|
133
108
|
s.action = "/make.php"
|
134
109
|
s.block = lambda { |body| URI.extract(body).grep(/shiturl/)[0] }
|
135
110
|
},
|
136
111
|
|
137
|
-
:
|
138
|
-
s.block = lambda { |body| URI.extract(body).grep(/littlink/)[0] }
|
139
|
-
},
|
140
|
-
|
141
|
-
:clipurl => Service.new("clipurl.com") { |s|
|
142
|
-
s.action = "/create.asp"
|
143
|
-
s.block = lambda { |body| URI.extract(body).grep(/clipurl/)[0] }
|
144
|
-
},
|
145
|
-
|
146
|
-
:shortify => Service.new("shortify.com") { |s|
|
112
|
+
:shortify => Service.new("shortify.wikinote.com") { |s|
|
147
113
|
s.method = :get
|
148
114
|
s.action = "/shorten.php"
|
149
|
-
s.block = lambda { |body| URI.extract(body).grep(/shortify/)[
|
150
|
-
},
|
151
|
-
|
152
|
-
:orz => Service.new("0rz.net") { |s|
|
153
|
-
s.action = "/create.php"
|
154
|
-
s.block = lambda { |body| URI.extract(body).grep(/0rz/)[0] }
|
115
|
+
s.block = lambda { |body| URI.extract(body).grep(/shortify/)[-1] }
|
155
116
|
},
|
156
117
|
|
157
118
|
:moourl => Service.new("moourl.com") { |s|
|
@@ -159,14 +120,70 @@ class ShortURL
|
|
159
120
|
s.action = "/create/"
|
160
121
|
s.method = :get
|
161
122
|
s.field = "source"
|
162
|
-
s.
|
123
|
+
s.response_block = lambda { |res| "http://moourl.com/" + res["location"].match(/\?moo=/).post_match }
|
163
124
|
},
|
164
|
-
|
165
|
-
:
|
125
|
+
|
126
|
+
:bitly => Service.new("bit.ly") { |s|
|
166
127
|
s.method = :get
|
167
|
-
s.action = "/
|
168
|
-
s.
|
128
|
+
s.action = "/index.php"
|
129
|
+
s.field = "url"
|
130
|
+
s.block = lambda { |body|
|
131
|
+
body.match(%r{<input id="shortened-url" value="(.*)" />}).captures[0]
|
132
|
+
}
|
133
|
+
},
|
134
|
+
|
135
|
+
:ur1 => Service.new("ur1.ca") { |s|
|
136
|
+
s.method = :post
|
137
|
+
s.action = "/"
|
138
|
+
s.field = "longurl"
|
139
|
+
s.block = lambda { |body| URI.extract(body).grep(/ur1/)[0] }
|
169
140
|
}
|
141
|
+
|
142
|
+
# :skinnylink => Service.new("skinnylink.com") { |s|
|
143
|
+
# s.block = lambda { |body| URI.extract(body).grep(/skinnylink/)[0] }
|
144
|
+
# },
|
145
|
+
|
146
|
+
# :linktrim => Service.new("linktrim.com") { |s|
|
147
|
+
# s.method = :get
|
148
|
+
# s.action = "/lt/generate"
|
149
|
+
# s.block = lambda { |body| URI.extract(body).grep(/\/linktrim/)[1] }
|
150
|
+
# },
|
151
|
+
|
152
|
+
# :shorterlink => Service.new("shorterlink.com") { |s|
|
153
|
+
# s.method = :get
|
154
|
+
# s.action = "/add_url.html"
|
155
|
+
# s.block = lambda { |body| URI.extract(body).grep(/shorterlink/)[0] }
|
156
|
+
# },
|
157
|
+
|
158
|
+
# :fyad => Service.new("fyad.org") { |s|
|
159
|
+
# s.method = :get
|
160
|
+
# s.block = lambda { |body| URI.extract(body).grep(/fyad.org/)[2] }
|
161
|
+
# },
|
162
|
+
|
163
|
+
# :d62 => Service.new("d62.net") { |s|
|
164
|
+
# s.method = :get
|
165
|
+
# s.block = lambda { |body| URI.extract(body)[0] }
|
166
|
+
# },
|
167
|
+
|
168
|
+
# :littlink => Service.new("littlink.com") { |s|
|
169
|
+
# s.block = lambda { |body| URI.extract(body).grep(/littlink/)[0] }
|
170
|
+
# },
|
171
|
+
|
172
|
+
# :clipurl => Service.new("clipurl.com") { |s|
|
173
|
+
# s.action = "/create.asp"
|
174
|
+
# s.block = lambda { |body| URI.extract(body).grep(/clipurl/)[0] }
|
175
|
+
# },
|
176
|
+
|
177
|
+
# :orz => Service.new("0rz.net") { |s|
|
178
|
+
# s.action = "/create.php"
|
179
|
+
# s.block = lambda { |body| URI.extract(body).grep(/0rz/)[0] }
|
180
|
+
# },
|
181
|
+
|
182
|
+
# :urltea => Service.new("urltea.com") { |s|
|
183
|
+
# s.method = :get
|
184
|
+
# s.action = "/create/"
|
185
|
+
# s.block = lambda { |body| URI.extract(body).grep(/urltea/)[6] }
|
186
|
+
# }
|
170
187
|
}
|
171
188
|
|
172
189
|
# Array containing symbols representing all the implemented URL
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: shorturl
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.8.
|
4
|
+
version: 0.8.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Robby Russell
|
@@ -86,6 +86,6 @@ rubyforge_project:
|
|
86
86
|
rubygems_version: 1.3.5
|
87
87
|
signing_key:
|
88
88
|
specification_version: 3
|
89
|
-
summary: Shortens URLs using services such as RubyURL, urlTea, and TinyURL
|
89
|
+
summary: Shortens URLs using services such as RubyURL, urlTea, bit.ly, moourl.com, and TinyURL
|
90
90
|
test_files:
|
91
91
|
- test/ts_all.rb
|