shorturl 0.2.0 → 0.2.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/ChangeLog +3 -0
- data/README +2 -0
- data/doc/classes/ShortURL.html +209 -154
- data/doc/created.rid +1 -1
- data/doc/files/ChangeLog.html +8 -1
- data/doc/files/README.html +4 -1
- data/doc/files/lib/shorturl_rb.html +1 -1
- data/doc/fr_method_index.html +9 -7
- data/lib/shorturl.rb +37 -14
- data/test/tc_shorturl.rb +11 -0
- metadata +2 -2
data/ChangeLog
CHANGED
data/README
CHANGED
@@ -19,6 +19,8 @@ The second parameter represents the service you want to use. These are:
|
|
19
19
|
- <tt>:snorl</tt>
|
20
20
|
- <tt>:snipurl</tt>
|
21
21
|
- <tt>:metamark</tt>
|
22
|
+
- <tt>:makeashorterlink</tt>
|
23
|
+
- <tt>:skinnylink</tt>
|
22
24
|
|
23
25
|
== Thanks
|
24
26
|
- Marcel Molina Jr., Devin Mullins for some ideas
|
data/doc/classes/ShortURL.html
CHANGED
@@ -86,13 +86,15 @@
|
|
86
86
|
<h3 class="section-bar">Methods</h3>
|
87
87
|
|
88
88
|
<div class="name-list">
|
89
|
-
<a href="#
|
90
|
-
<a href="#
|
91
|
-
<a href="#
|
92
|
-
<a href="#
|
93
|
-
<a href="#
|
94
|
-
<a href="#
|
95
|
-
<a href="#
|
89
|
+
<a href="#M000003">get_short_url</a>
|
90
|
+
<a href="#M000009">makeashorterlink</a>
|
91
|
+
<a href="#M000008">metamark</a>
|
92
|
+
<a href="#M000004">rubyurl</a>
|
93
|
+
<a href="#M000006">shorl</a>
|
94
|
+
<a href="#M000002">shorten</a>
|
95
|
+
<a href="#M000007">snipurl</a>
|
96
|
+
<a href="#M000005">tinyurl</a>
|
97
|
+
<a href="#M000001">valid_services</a>
|
96
98
|
</div>
|
97
99
|
</div>
|
98
100
|
|
@@ -114,168 +116,208 @@
|
|
114
116
|
<div id="methods">
|
115
117
|
<h3 class="section-bar">Public Class methods</h3>
|
116
118
|
|
117
|
-
<div id="method-
|
118
|
-
<a name="
|
119
|
+
<div id="method-M000009" class="method-detail">
|
120
|
+
<a name="M000009"></a>
|
119
121
|
|
120
122
|
<div class="method-heading">
|
121
|
-
<a href="#
|
122
|
-
<span class="method-name">
|
123
|
+
<a href="#M000009" class="method-signature">
|
124
|
+
<span class="method-name">makeashorterlink</span><span class="method-args">(url)</span>
|
123
125
|
</a>
|
124
126
|
</div>
|
125
127
|
|
126
128
|
<div class="method-description">
|
127
129
|
<p>
|
128
|
-
|
129
|
-
simple, just give a url to shorten and an optional service. If no service
|
130
|
-
is selected, RubyURL.com will be used. An invalid service symbol will raise
|
131
|
-
an ArgumentError exception
|
132
|
-
</p>
|
133
|
-
<p>
|
134
|
-
Valid <tt>service</tt> values:
|
130
|
+
Shorten an URL with makeashortlink.com.
|
135
131
|
</p>
|
136
|
-
<
|
137
|
-
|
132
|
+
<p><a class="source-toggle" href="#"
|
133
|
+
onclick="toggleCode('M000009-source');return false;">[Source]</a></p>
|
134
|
+
<div class="method-source-code" id="M000009-source">
|
135
|
+
<pre>
|
136
|
+
<span class="ruby-comment cmt"># File lib/shorturl.rb, line 123</span>
|
137
|
+
123: <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">makeashorterlink</span>(<span class="ruby-identifier">url</span>)
|
138
|
+
124: <span class="ruby-identifier">get_short_url</span>(<span class="ruby-value str">"makeashorterlink.com"</span>, <span class="ruby-value">200</span>,
|
139
|
+
125: <span class="ruby-node">"post('/index.php', 'url=#{url}')"</span>) { <span class="ruby-operator">|</span><span class="ruby-identifier">body</span><span class="ruby-operator">|</span>
|
140
|
+
126: <span class="ruby-identifier">short_url</span> = <span class="ruby-constant">URI</span>.<span class="ruby-identifier">extract</span>(<span class="ruby-identifier">body</span>).<span class="ruby-identifier">grep</span>(<span class="ruby-regexp re">/makeashorter/</span>)[<span class="ruby-value">0</span>]
|
141
|
+
127: <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">short_url</span>
|
142
|
+
128: }
|
143
|
+
129: <span class="ruby-keyword kw">end</span>
|
144
|
+
</pre>
|
145
|
+
</div>
|
146
|
+
</div>
|
147
|
+
</div>
|
138
148
|
|
139
|
-
|
140
|
-
<
|
149
|
+
<div id="method-M000008" class="method-detail">
|
150
|
+
<a name="M000008"></a>
|
141
151
|
|
142
|
-
|
143
|
-
|
144
|
-
<
|
145
|
-
|
152
|
+
<div class="method-heading">
|
153
|
+
<a href="#M000008" class="method-signature">
|
154
|
+
<span class="method-name">metamark</span><span class="method-args">(url)</span>
|
155
|
+
</a>
|
156
|
+
</div>
|
157
|
+
|
158
|
+
<div class="method-description">
|
159
|
+
<p>
|
160
|
+
Shorten an URL with metamark.com. Same technique as TinyURL
|
146
161
|
</p>
|
147
|
-
<pre>
|
148
|
-
ShortURL.shorten("http://mypage.com") => Uses RubyURL
|
149
|
-
ShortURL.shorten("http://mypage.com", :tinyurl)
|
150
|
-
</pre>
|
151
162
|
<p><a class="source-toggle" href="#"
|
152
|
-
onclick="toggleCode('
|
153
|
-
<div class="method-source-code" id="
|
163
|
+
onclick="toggleCode('M000008-source');return false;">[Source]</a></p>
|
164
|
+
<div class="method-source-code" id="M000008-source">
|
154
165
|
<pre>
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
34: <span class="ruby-keyword kw">end</span>
|
165
|
-
35: <span class="ruby-keyword kw">end</span>
|
166
|
+
<span class="ruby-comment cmt"># File lib/shorturl.rb, line 113</span>
|
167
|
+
113: <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">metamark</span>(<span class="ruby-identifier">url</span>)
|
168
|
+
114: <span class="ruby-identifier">get_short_url</span>(<span class="ruby-value str">"metamark.net"</span>, <span class="ruby-value">200</span>,
|
169
|
+
115: <span class="ruby-node">"post('/add', 'long_url=#{url}')"</span>) { <span class="ruby-operator">|</span><span class="ruby-identifier">body</span><span class="ruby-operator">|</span>
|
170
|
+
116: <span class="ruby-identifier">line</span> = <span class="ruby-identifier">body</span>.<span class="ruby-identifier">split</span>(<span class="ruby-value str">"\n"</span>).<span class="ruby-identifier">find</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">l</span><span class="ruby-operator">|</span> <span class="ruby-identifier">l</span> <span class="ruby-operator">=~</span> <span class="ruby-regexp re">/xrl\.us/</span> }
|
171
|
+
117: <span class="ruby-identifier">short_url</span> = <span class="ruby-constant">URI</span>.<span class="ruby-identifier">extract</span>(<span class="ruby-identifier">line</span>)[<span class="ruby-value">0</span>]
|
172
|
+
118: <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">short_url</span>
|
173
|
+
119: }
|
174
|
+
120: <span class="ruby-keyword kw">end</span>
|
166
175
|
</pre>
|
167
176
|
</div>
|
168
177
|
</div>
|
169
178
|
</div>
|
170
179
|
|
171
|
-
<
|
172
|
-
|
173
|
-
<div id="method-M000002" class="method-detail">
|
174
|
-
<a name="M000002"></a>
|
180
|
+
<div id="method-M000004" class="method-detail">
|
181
|
+
<a name="M000004"></a>
|
175
182
|
|
176
183
|
<div class="method-heading">
|
177
|
-
<a href="#
|
178
|
-
<span class="method-name">
|
184
|
+
<a href="#M000004" class="method-signature">
|
185
|
+
<span class="method-name">rubyurl</span><span class="method-args">(url)</span>
|
179
186
|
</a>
|
180
187
|
</div>
|
181
188
|
|
182
189
|
<div class="method-description">
|
183
190
|
<p>
|
184
|
-
|
185
|
-
|
186
|
-
</
|
187
|
-
<
|
188
|
-
|
191
|
+
Shortens an URL with RubyURL.com. Since RubyURL uses a redirection (code
|
192
|
+
302), instead of using HTTP#post, we send our data directly to the
|
193
|
+
<em>create</em> action. The response is a small HTML line which contains
|
194
|
+
our shortened URL plus <em>/rubyurl/show</em>, so we manually remove that
|
195
|
+
with gsub.
|
189
196
|
</p>
|
197
|
+
<p><a class="source-toggle" href="#"
|
198
|
+
onclick="toggleCode('M000004-source');return false;">[Source]</a></p>
|
199
|
+
<div class="method-source-code" id="M000004-source">
|
190
200
|
<pre>
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
201
|
+
<span class="ruby-comment cmt"># File lib/shorturl.rb, line 71</span>
|
202
|
+
71: <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">rubyurl</span>(<span class="ruby-identifier">url</span>)
|
203
|
+
72: <span class="ruby-identifier">get_short_url</span>(<span class="ruby-value str">"rubyurl.com"</span>, <span class="ruby-value">302</span>,
|
204
|
+
73: <span class="ruby-node">"get('/rubyurl/create?rubyurl[website_url]=#{CGI.escape(url)}')"</span>) { <span class="ruby-operator">|</span><span class="ruby-identifier">body</span><span class="ruby-operator">|</span>
|
205
|
+
74: <span class="ruby-identifier">short_url</span> = <span class="ruby-constant">URI</span>.<span class="ruby-identifier">extract</span>(<span class="ruby-identifier">body</span>)[<span class="ruby-value">0</span>].<span class="ruby-identifier">gsub</span>(<span class="ruby-value str">"rubyurl/show/"</span>, <span class="ruby-value str">""</span>)
|
206
|
+
75: <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">short_url</span>
|
207
|
+
76: }
|
208
|
+
77: <span class="ruby-keyword kw">end</span>
|
195
209
|
</pre>
|
210
|
+
</div>
|
211
|
+
</div>
|
212
|
+
</div>
|
213
|
+
|
214
|
+
<div id="method-M000006" class="method-detail">
|
215
|
+
<a name="M000006"></a>
|
216
|
+
|
217
|
+
<div class="method-heading">
|
218
|
+
<a href="#M000006" class="method-signature">
|
219
|
+
<span class="method-name">shorl</span><span class="method-args">(url)</span>
|
220
|
+
</a>
|
221
|
+
</div>
|
222
|
+
|
223
|
+
<div class="method-description">
|
224
|
+
<p>
|
225
|
+
Shorten an URL through with shorl.com. Same technique as TinyURL
|
226
|
+
</p>
|
196
227
|
<p><a class="source-toggle" href="#"
|
197
|
-
onclick="toggleCode('
|
198
|
-
<div class="method-source-code" id="
|
228
|
+
onclick="toggleCode('M000006-source');return false;">[Source]</a></p>
|
229
|
+
<div class="method-source-code" id="M000006-source">
|
199
230
|
<pre>
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
52: <span class="ruby-keyword kw">end</span>
|
209
|
-
53: }
|
210
|
-
54: <span class="ruby-keyword kw">rescue</span> <span class="ruby-constant">SocketError</span>, <span class="ruby-constant">Net</span><span class="ruby-operator">::</span><span class="ruby-constant">HTTPExceptions</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">e</span>
|
211
|
-
55: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">nil</span>
|
212
|
-
56: <span class="ruby-keyword kw">end</span>
|
213
|
-
57: <span class="ruby-keyword kw">end</span>
|
231
|
+
<span class="ruby-comment cmt"># File lib/shorturl.rb, line 94</span>
|
232
|
+
94: <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">shorl</span>(<span class="ruby-identifier">url</span>)
|
233
|
+
95: <span class="ruby-identifier">get_short_url</span>(<span class="ruby-value str">"shorl.com"</span>, <span class="ruby-value">200</span>,
|
234
|
+
96: <span class="ruby-node">"post('/create.php', 'url=#{url}')"</span>) { <span class="ruby-operator">|</span><span class="ruby-identifier">body</span><span class="ruby-operator">|</span>
|
235
|
+
97: <span class="ruby-identifier">short_url</span> = <span class="ruby-constant">URI</span>.<span class="ruby-identifier">extract</span>(<span class="ruby-identifier">body</span>)[<span class="ruby-value">2</span>]
|
236
|
+
98: <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">short_url</span>
|
237
|
+
99: }
|
238
|
+
100: <span class="ruby-keyword kw">end</span>
|
214
239
|
</pre>
|
215
240
|
</div>
|
216
241
|
</div>
|
217
242
|
</div>
|
218
243
|
|
219
|
-
<div id="method-
|
220
|
-
<a name="
|
244
|
+
<div id="method-M000002" class="method-detail">
|
245
|
+
<a name="M000002"></a>
|
221
246
|
|
222
247
|
<div class="method-heading">
|
223
|
-
<a href="#
|
224
|
-
<span class="method-name">
|
248
|
+
<a href="#M000002" class="method-signature">
|
249
|
+
<span class="method-name">shorten</span><span class="method-args">(url, service = :rubyurl)</span>
|
225
250
|
</a>
|
226
251
|
</div>
|
227
252
|
|
228
253
|
<div class="method-description">
|
229
254
|
<p>
|
230
|
-
|
255
|
+
Main method of <a href="ShortURL.html">ShortURL</a>, its usage is quite
|
256
|
+
simple, just give an url to shorten and an optional service. If no service
|
257
|
+
is selected, RubyURL.com will be used. An invalid service symbol will raise
|
258
|
+
an ArgumentError exception
|
259
|
+
</p>
|
260
|
+
<p>
|
261
|
+
Valid <tt>service</tt> values:
|
231
262
|
</p>
|
263
|
+
<table>
|
264
|
+
<tr><td valign="top"><tt>:rubyurl</tt>:</td><td>uses RubyURL.com
|
265
|
+
|
266
|
+
</td></tr>
|
267
|
+
<tr><td valign="top"><tt>:tinyurl</tt>:</td><td>uses TinyURL.com
|
268
|
+
|
269
|
+
</td></tr>
|
270
|
+
</table>
|
271
|
+
<p>
|
272
|
+
call-seq:
|
273
|
+
</p>
|
274
|
+
<pre>
|
275
|
+
ShortURL.shorten("http://mypage.com") => Uses RubyURL
|
276
|
+
ShortURL.shorten("http://mypage.com", :tinyurl)
|
277
|
+
</pre>
|
232
278
|
<p><a class="source-toggle" href="#"
|
233
|
-
onclick="toggleCode('
|
234
|
-
<div class="method-source-code" id="
|
279
|
+
onclick="toggleCode('M000002-source');return false;">[Source]</a></p>
|
280
|
+
<div class="method-source-code" id="M000002-source">
|
235
281
|
<pre>
|
236
|
-
|
237
|
-
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
114: <span class="ruby-keyword kw">end</span>
|
282
|
+
<span class="ruby-comment cmt"># File lib/shorturl.rb, line 35</span>
|
283
|
+
35: <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">shorten</span>(<span class="ruby-identifier">url</span>, <span class="ruby-identifier">service</span> = <span class="ruby-identifier">:rubyurl</span>)
|
284
|
+
36: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@@valid_services</span>.<span class="ruby-identifier">include?</span> <span class="ruby-identifier">service</span>
|
285
|
+
37: <span class="ruby-identifier">send</span>(<span class="ruby-identifier">service</span>, <span class="ruby-identifier">url</span>)
|
286
|
+
38: <span class="ruby-keyword kw">else</span>
|
287
|
+
39: <span class="ruby-identifier">raise</span> <span class="ruby-constant">ArgumentError</span>, <span class="ruby-value str">"Invalid service"</span>
|
288
|
+
40: <span class="ruby-keyword kw">end</span>
|
289
|
+
41: <span class="ruby-keyword kw">end</span>
|
245
290
|
</pre>
|
246
291
|
</div>
|
247
292
|
</div>
|
248
293
|
</div>
|
249
294
|
|
250
|
-
<div id="method-
|
251
|
-
<a name="
|
295
|
+
<div id="method-M000007" class="method-detail">
|
296
|
+
<a name="M000007"></a>
|
252
297
|
|
253
298
|
<div class="method-heading">
|
254
|
-
<a href="#
|
255
|
-
<span class="method-name">
|
299
|
+
<a href="#M000007" class="method-signature">
|
300
|
+
<span class="method-name">snipurl</span><span class="method-args">(url)</span>
|
256
301
|
</a>
|
257
302
|
</div>
|
258
303
|
|
259
304
|
<div class="method-description">
|
260
305
|
<p>
|
261
|
-
|
262
|
-
302), instead of using HTTP#post, we send our data directly to the
|
263
|
-
<em>create</em> action. The response is a small HTML line which contains
|
264
|
-
our shortened URL plus <em>/rubyurl/show</em>, so we manually remove that
|
265
|
-
with gsub.
|
306
|
+
Shorten an URL with snipurl.com. Same technique as TinyURL
|
266
307
|
</p>
|
267
308
|
<p><a class="source-toggle" href="#"
|
268
|
-
onclick="toggleCode('
|
269
|
-
<div class="method-source-code" id="
|
309
|
+
onclick="toggleCode('M000007-source');return false;">[Source]</a></p>
|
310
|
+
<div class="method-source-code" id="M000007-source">
|
270
311
|
<pre>
|
271
|
-
|
272
|
-
|
273
|
-
|
274
|
-
|
275
|
-
|
276
|
-
|
277
|
-
|
278
|
-
|
312
|
+
<span class="ruby-comment cmt"># File lib/shorturl.rb, line 103</span>
|
313
|
+
103: <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">snipurl</span>(<span class="ruby-identifier">url</span>)
|
314
|
+
104: <span class="ruby-identifier">get_short_url</span>(<span class="ruby-value str">"snipurl.com"</span>, <span class="ruby-value">200</span>,
|
315
|
+
105: <span class="ruby-node">"post('/index.php', 'link=#{url}')"</span>) { <span class="ruby-operator">|</span><span class="ruby-identifier">body</span><span class="ruby-operator">|</span>
|
316
|
+
106: <span class="ruby-identifier">line</span> = <span class="ruby-identifier">body</span>.<span class="ruby-identifier">split</span>(<span class="ruby-value str">"\n"</span>).<span class="ruby-identifier">grep</span>(<span class="ruby-regexp re">/txt/</span>)[<span class="ruby-value">0</span>]
|
317
|
+
107: <span class="ruby-identifier">short_url</span> = <span class="ruby-constant">URI</span>.<span class="ruby-identifier">extract</span>(<span class="ruby-identifier">line</span>)[<span class="ruby-value">1</span>][<span class="ruby-value">0</span><span class="ruby-operator">..</span><span class="ruby-value">-2</span>] <span class="ruby-comment cmt"># Remove trailing '</span>
|
318
|
+
108: <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">short_url</span>
|
319
|
+
109: }
|
320
|
+
110: <span class="ruby-keyword kw">end</span>
|
279
321
|
</pre>
|
280
322
|
</div>
|
281
323
|
</div>
|
@@ -286,91 +328,104 @@ with gsub.
|
|
286
328
|
|
287
329
|
<div class="method-heading">
|
288
330
|
<a href="#M000005" class="method-signature">
|
289
|
-
<span class="method-name">
|
331
|
+
<span class="method-name">tinyurl</span><span class="method-args">(url)</span>
|
290
332
|
</a>
|
291
333
|
</div>
|
292
334
|
|
293
335
|
<div class="method-description">
|
294
336
|
<p>
|
295
|
-
|
337
|
+
Shortens an URL with TinyURL.com. We post a request to the
|
338
|
+
<em>create.php</em> action with our URL as a parameter. We then read the
|
339
|
+
HTML code, split it into an array, find an element that contains our
|
340
|
+
shortened URL and extract it.
|
296
341
|
</p>
|
297
342
|
<p><a class="source-toggle" href="#"
|
298
343
|
onclick="toggleCode('M000005-source');return false;">[Source]</a></p>
|
299
344
|
<div class="method-source-code" id="M000005-source">
|
300
345
|
<pre>
|
301
|
-
<span class="ruby-comment cmt"># File lib/shorturl.rb, line
|
302
|
-
|
303
|
-
|
304
|
-
|
305
|
-
|
306
|
-
|
307
|
-
|
308
|
-
|
346
|
+
<span class="ruby-comment cmt"># File lib/shorturl.rb, line 84</span>
|
347
|
+
84: <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">tinyurl</span>(<span class="ruby-identifier">url</span>)
|
348
|
+
85: <span class="ruby-identifier">get_short_url</span>(<span class="ruby-value str">"tinyurl.com"</span>, <span class="ruby-value">200</span>,
|
349
|
+
86: <span class="ruby-node">"post('/create.php', 'url=#{url}')"</span>) { <span class="ruby-operator">|</span><span class="ruby-identifier">body</span><span class="ruby-operator">|</span>
|
350
|
+
87: <span class="ruby-identifier">line</span> = <span class="ruby-identifier">body</span>.<span class="ruby-identifier">split</span>(<span class="ruby-value str">"\n"</span>).<span class="ruby-identifier">find</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">l</span><span class="ruby-operator">|</span> <span class="ruby-identifier">l</span> <span class="ruby-operator">=~</span> <span class="ruby-regexp re">/hidden name=tinyurl/</span> }
|
351
|
+
88: <span class="ruby-identifier">short_url</span> = <span class="ruby-constant">URI</span>.<span class="ruby-identifier">extract</span>(<span class="ruby-identifier">line</span>)[<span class="ruby-value">0</span>]
|
352
|
+
89: <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">short_url</span>
|
353
|
+
90: }
|
354
|
+
91: <span class="ruby-keyword kw">end</span>
|
309
355
|
</pre>
|
310
356
|
</div>
|
311
357
|
</div>
|
312
358
|
</div>
|
313
359
|
|
314
|
-
<div id="method-
|
315
|
-
<a name="
|
360
|
+
<div id="method-M000001" class="method-detail">
|
361
|
+
<a name="M000001"></a>
|
316
362
|
|
317
363
|
<div class="method-heading">
|
318
|
-
<a href="#
|
319
|
-
<span class="method-name">
|
364
|
+
<a href="#M000001" class="method-signature">
|
365
|
+
<span class="method-name">valid_services</span><span class="method-args">()</span>
|
320
366
|
</a>
|
321
367
|
</div>
|
322
368
|
|
323
369
|
<div class="method-description">
|
324
370
|
<p>
|
325
|
-
|
371
|
+
Returns @@<a href="ShortURL.html#M000001">valid_services</a>
|
326
372
|
</p>
|
327
373
|
<p><a class="source-toggle" href="#"
|
328
|
-
onclick="toggleCode('
|
329
|
-
<div class="method-source-code" id="
|
374
|
+
onclick="toggleCode('M000001-source');return false;">[Source]</a></p>
|
375
|
+
<div class="method-source-code" id="M000001-source">
|
330
376
|
<pre>
|
331
|
-
|
332
|
-
|
333
|
-
|
334
|
-
|
335
|
-
100: <span class="ruby-identifier">line</span> = <span class="ruby-identifier">body</span>.<span class="ruby-identifier">split</span>(<span class="ruby-value str">"\n"</span>).<span class="ruby-identifier">grep</span>(<span class="ruby-regexp re">/txt/</span>)[<span class="ruby-value">0</span>]
|
336
|
-
101: <span class="ruby-identifier">short_url</span> = <span class="ruby-constant">URI</span>.<span class="ruby-identifier">extract</span>(<span class="ruby-identifier">line</span>)[<span class="ruby-value">1</span>][<span class="ruby-value">0</span><span class="ruby-operator">..</span><span class="ruby-value">-2</span>] <span class="ruby-comment cmt"># Remove trailing '</span>
|
337
|
-
102: <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">short_url</span>
|
338
|
-
103: }
|
339
|
-
104: <span class="ruby-keyword kw">end</span>
|
377
|
+
<span class="ruby-comment cmt"># File lib/shorturl.rb, line 18</span>
|
378
|
+
18: <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">valid_services</span>
|
379
|
+
19: <span class="ruby-ivar">@@valid_services</span>
|
380
|
+
20: <span class="ruby-keyword kw">end</span>
|
340
381
|
</pre>
|
341
382
|
</div>
|
342
383
|
</div>
|
343
384
|
</div>
|
344
385
|
|
345
|
-
<
|
346
|
-
|
386
|
+
<h3 class="section-bar">Private Class methods</h3>
|
387
|
+
|
388
|
+
<div id="method-M000003" class="method-detail">
|
389
|
+
<a name="M000003"></a>
|
347
390
|
|
348
391
|
<div class="method-heading">
|
349
|
-
<a href="#
|
350
|
-
<span class="method-name">
|
392
|
+
<a href="#M000003" class="method-signature">
|
393
|
+
<span class="method-name">get_short_url</span><span class="method-args">(hostname, code, action) {|html_body| ...}</span>
|
351
394
|
</a>
|
352
395
|
</div>
|
353
396
|
|
354
397
|
<div class="method-description">
|
355
398
|
<p>
|
356
|
-
|
357
|
-
<
|
358
|
-
|
359
|
-
|
399
|
+
Abstract method to shorten an URL. Respects the DRY principle. In case of a
|
400
|
+
network-related exception, return <tt>nil</tt>.
|
401
|
+
</p>
|
402
|
+
<p>
|
403
|
+
Parameters:
|
360
404
|
</p>
|
405
|
+
<pre>
|
406
|
+
hostname: hostname of the service
|
407
|
+
code: expected return code (200, 302, etc.) Converted to a string
|
408
|
+
action: string representing the action to be executed on the HTTP object with +instance_eval+
|
409
|
+
block: block of code which scrapes the HTML and returns the shortened URL. Takes one parameter.
|
410
|
+
</pre>
|
361
411
|
<p><a class="source-toggle" href="#"
|
362
|
-
onclick="toggleCode('
|
363
|
-
<div class="method-source-code" id="
|
412
|
+
onclick="toggleCode('M000003-source');return false;">[Source]</a></p>
|
413
|
+
<div class="method-source-code" id="M000003-source">
|
364
414
|
<pre>
|
365
|
-
<span class="ruby-comment cmt"># File lib/shorturl.rb, line
|
366
|
-
|
367
|
-
|
368
|
-
|
369
|
-
|
370
|
-
|
371
|
-
|
372
|
-
|
373
|
-
|
415
|
+
<span class="ruby-comment cmt"># File lib/shorturl.rb, line 51</span>
|
416
|
+
51: <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">get_short_url</span>(<span class="ruby-identifier">hostname</span>, <span class="ruby-identifier">code</span>, <span class="ruby-identifier">action</span>, <span class="ruby-operator">&</span><span class="ruby-identifier">block</span>) <span class="ruby-comment cmt"># :yields: html_body</span>
|
417
|
+
52: <span class="ruby-keyword kw">begin</span>
|
418
|
+
53: <span class="ruby-constant">Net</span><span class="ruby-operator">::</span><span class="ruby-constant">HTTP</span>.<span class="ruby-identifier">start</span>(<span class="ruby-identifier">hostname</span>, <span class="ruby-value">80</span>) { <span class="ruby-operator">|</span><span class="ruby-identifier">http</span><span class="ruby-operator">|</span>
|
419
|
+
54: <span class="ruby-identifier">response</span> = <span class="ruby-identifier">http</span>.<span class="ruby-identifier">instance_eval</span>(<span class="ruby-identifier">action</span>)
|
420
|
+
55:
|
421
|
+
56: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">response</span>.<span class="ruby-identifier">code</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">code</span>.<span class="ruby-identifier">to_s</span>
|
422
|
+
57: <span class="ruby-identifier">block</span>.<span class="ruby-identifier">call</span>(<span class="ruby-identifier">response</span>.<span class="ruby-identifier">read_body</span>)
|
423
|
+
58: <span class="ruby-keyword kw">end</span>
|
424
|
+
59: }
|
425
|
+
60: <span class="ruby-keyword kw">rescue</span> <span class="ruby-constant">SocketError</span>, <span class="ruby-constant">Net</span><span class="ruby-operator">::</span><span class="ruby-constant">HTTPExceptions</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">e</span>
|
426
|
+
61: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">nil</span>
|
427
|
+
62: <span class="ruby-keyword kw">end</span>
|
428
|
+
63: <span class="ruby-keyword kw">end</span>
|
374
429
|
</pre>
|
375
430
|
</div>
|
376
431
|
</div>
|
data/doc/created.rid
CHANGED
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
Sat Jun 04 15:14:15 EDT 2005
|
data/doc/files/ChangeLog.html
CHANGED
@@ -56,7 +56,7 @@
|
|
56
56
|
</tr>
|
57
57
|
<tr class="top-aligned-row">
|
58
58
|
<td><strong>Last Update:</strong></td>
|
59
|
-
<td>
|
59
|
+
<td>Sat Jun 04 15:06:47 EDT 2005</td>
|
60
60
|
</tr>
|
61
61
|
</table>
|
62
62
|
</div>
|
@@ -70,6 +70,13 @@
|
|
70
70
|
|
71
71
|
<div id="description">
|
72
72
|
<p>
|
73
|
+
0.2.1:
|
74
|
+
</p>
|
75
|
+
<pre>
|
76
|
+
- Added makeashorterlink.com
|
77
|
+
- Refactored get_short_url
|
78
|
+
</pre>
|
79
|
+
<p>
|
73
80
|
0.2.0:
|
74
81
|
</p>
|
75
82
|
<pre>
|
data/doc/files/README.html
CHANGED
@@ -56,7 +56,7 @@
|
|
56
56
|
</tr>
|
57
57
|
<tr class="top-aligned-row">
|
58
58
|
<td><strong>Last Update:</strong></td>
|
59
|
-
<td>
|
59
|
+
<td>Sat Jun 04 15:07:27 EDT 2005</td>
|
60
60
|
</tr>
|
61
61
|
</table>
|
62
62
|
</div>
|
@@ -106,6 +106,9 @@ The second parameter represents the service you want to use. These are:
|
|
106
106
|
</li>
|
107
107
|
<li><tt>:metamark</tt>
|
108
108
|
|
109
|
+
</li>
|
110
|
+
<li><tt>:makeashorterlink</tt>
|
111
|
+
|
109
112
|
</li>
|
110
113
|
</ul>
|
111
114
|
<h2>Thanks</h2>
|
data/doc/fr_method_index.html
CHANGED
@@ -20,13 +20,15 @@
|
|
20
20
|
<div id="index">
|
21
21
|
<h1 class="section-bar">Methods</h1>
|
22
22
|
<div id="index-entries">
|
23
|
-
<a href="classes/ShortURL.html#
|
24
|
-
<a href="classes/ShortURL.html#
|
25
|
-
<a href="classes/ShortURL.html#
|
26
|
-
<a href="classes/ShortURL.html#
|
27
|
-
<a href="classes/ShortURL.html#
|
28
|
-
<a href="classes/ShortURL.html#
|
29
|
-
<a href="classes/ShortURL.html#
|
23
|
+
<a href="classes/ShortURL.html#M000003">get_short_url (ShortURL)</a><br />
|
24
|
+
<a href="classes/ShortURL.html#M000009">makeashorterlink (ShortURL)</a><br />
|
25
|
+
<a href="classes/ShortURL.html#M000008">metamark (ShortURL)</a><br />
|
26
|
+
<a href="classes/ShortURL.html#M000004">rubyurl (ShortURL)</a><br />
|
27
|
+
<a href="classes/ShortURL.html#M000006">shorl (ShortURL)</a><br />
|
28
|
+
<a href="classes/ShortURL.html#M000002">shorten (ShortURL)</a><br />
|
29
|
+
<a href="classes/ShortURL.html#M000007">snipurl (ShortURL)</a><br />
|
30
|
+
<a href="classes/ShortURL.html#M000005">tinyurl (ShortURL)</a><br />
|
31
|
+
<a href="classes/ShortURL.html#M000001">valid_services (ShortURL)</a><br />
|
30
32
|
</div>
|
31
33
|
</div>
|
32
34
|
</body>
|
data/lib/shorturl.rb
CHANGED
@@ -10,7 +10,16 @@ require "uri"
|
|
10
10
|
|
11
11
|
class ShortURL
|
12
12
|
|
13
|
-
#
|
13
|
+
# Array containing symbols representing all the implemented URL
|
14
|
+
# shortening services
|
15
|
+
@@valid_services = [:rubyurl, :tinyurl, :shorl, :snipurl, :metamark, :makeashorterlink, :skinnylink]
|
16
|
+
|
17
|
+
# Returns @@valid_services
|
18
|
+
def self.valid_services
|
19
|
+
@@valid_services
|
20
|
+
end
|
21
|
+
|
22
|
+
# Main method of ShortURL, its usage is quite simple, just give an
|
14
23
|
# url to shorten and an optional service. If no service is
|
15
24
|
# selected, RubyURL.com will be used. An invalid service symbol
|
16
25
|
# will raise an ArgumentError exception
|
@@ -24,17 +33,14 @@ class ShortURL
|
|
24
33
|
# ShortURL.shorten("http://mypage.com") => Uses RubyURL
|
25
34
|
# ShortURL.shorten("http://mypage.com", :tinyurl)
|
26
35
|
def self.shorten(url, service = :rubyurl)
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
when :snipurl then snipurl(url)
|
32
|
-
when :metamark then metamark(url)
|
33
|
-
else raise ArgumentError, "Invalid service"
|
36
|
+
if @@valid_services.include? service
|
37
|
+
send(service, url)
|
38
|
+
else
|
39
|
+
raise ArgumentError, "Invalid service"
|
34
40
|
end
|
35
41
|
end
|
36
42
|
|
37
|
-
# Abstract method to shorten
|
43
|
+
# Abstract method to shorten an URL. Respects the DRY principle. In
|
38
44
|
# case of a network-related exception, return +nil+.
|
39
45
|
#
|
40
46
|
# Parameters:
|
@@ -84,7 +90,7 @@ class ShortURL
|
|
84
90
|
}
|
85
91
|
end
|
86
92
|
|
87
|
-
# Shorten
|
93
|
+
# Shorten an URL through with shorl.com. Same technique as TinyURL
|
88
94
|
def self.shorl(url)
|
89
95
|
get_short_url("shorl.com", 200,
|
90
96
|
"post('/create.php', 'url=#{url}')") { |body|
|
@@ -93,7 +99,7 @@ class ShortURL
|
|
93
99
|
}
|
94
100
|
end
|
95
101
|
|
96
|
-
# Shorten
|
102
|
+
# Shorten an URL with snipurl.com. Same technique as TinyURL
|
97
103
|
def self.snipurl(url)
|
98
104
|
get_short_url("snipurl.com", 200,
|
99
105
|
"post('/index.php', 'link=#{url}')") { |body|
|
@@ -103,7 +109,7 @@ class ShortURL
|
|
103
109
|
}
|
104
110
|
end
|
105
111
|
|
106
|
-
# Shorten
|
112
|
+
# Shorten an URL with metamark.com. Same technique as TinyURL
|
107
113
|
def self.metamark(url)
|
108
114
|
get_short_url("metamark.net", 200,
|
109
115
|
"post('/add', 'long_url=#{url}')") { |body|
|
@@ -112,7 +118,24 @@ class ShortURL
|
|
112
118
|
return short_url
|
113
119
|
}
|
114
120
|
end
|
121
|
+
|
122
|
+
# Shorten an URL with makeashortlink.com.
|
123
|
+
def self.makeashorterlink(url)
|
124
|
+
get_short_url("makeashorterlink.com", 200,
|
125
|
+
"post('/index.php', 'url=#{url}')") { |body|
|
126
|
+
short_url = URI.extract(body).grep(/makeashorter/)[0]
|
127
|
+
return short_url
|
128
|
+
}
|
129
|
+
end
|
130
|
+
|
131
|
+
# Shorten an URL with skinnylink.com.
|
132
|
+
def self.skinnylink(url)
|
133
|
+
get_short_url("skinnylink.com", 200,
|
134
|
+
"post('/', 'url=#{url}')") { |body|
|
135
|
+
short_url = URI.extract(body).grep(/skinnylink/)[0]
|
136
|
+
return short_url
|
137
|
+
}
|
138
|
+
end
|
115
139
|
|
116
|
-
private_class_method(:get_short_url,
|
117
|
-
:snipurl, :metamark)
|
140
|
+
private_class_method(:get_short_url, *@@valid_services)
|
118
141
|
end
|
data/test/tc_shorturl.rb
CHANGED
@@ -30,6 +30,8 @@ class TestShortURL < Test::Unit::TestCase
|
|
30
30
|
assert ShortURL.shorten(@url, :shorl) =~ /^http:\/\/shorl.com\//
|
31
31
|
assert ShortURL.shorten(@url, :snipurl) == "http://snipurl.com/fbkl"
|
32
32
|
assert ShortURL.shorten(@url, :metamark) == "http://xrl.us/ga8c"
|
33
|
+
assert ShortURL.shorten(@url, :makeashorterlink) == "http://makeashorterlink.com/?O1752235A"
|
34
|
+
assert ShortURL.shorten(@url, :skinnylink) == "http://skinnylink.com?nqvcce"
|
33
35
|
|
34
36
|
assert_raise(ArgumentError) { ShortURL.shorten(@url, :foobar) }
|
35
37
|
end
|
@@ -76,4 +78,13 @@ class TestShortURL < Test::Unit::TestCase
|
|
76
78
|
def test_metamark
|
77
79
|
assert_raise(NoMethodError) { ShortURL.metamark(@url) }
|
78
80
|
end
|
81
|
+
|
82
|
+
def test_makeashorterlink
|
83
|
+
assert_raise(NoMethodError) { ShortURL.makeashorterlink(@url) }
|
84
|
+
end
|
85
|
+
|
86
|
+
def test_skinnylink
|
87
|
+
assert_raise(NoMethodError) { ShortURL.skinnylink(@url) }
|
88
|
+
end
|
89
|
+
|
79
90
|
end
|
metadata
CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.8.10
|
|
3
3
|
specification_version: 1
|
4
4
|
name: shorturl
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 0.2.
|
7
|
-
date: 2005-06-
|
6
|
+
version: 0.2.1
|
7
|
+
date: 2005-06-04
|
8
8
|
summary: Shortens URLs using services such as TinyURL and RubyURL
|
9
9
|
require_paths:
|
10
10
|
- lib
|