shortie 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,23 @@
1
+ module Shortie
2
+ class BaseShortener
3
+ attr_accessor :url
4
+
5
+ def self.shorten(url)
6
+ self.new(url).shorten
7
+ end
8
+
9
+ def initialize(url)
10
+ self.url = url
11
+ end
12
+
13
+ def shorten
14
+ raise "Invalid shortener. It must implement the shorten method."
15
+ end
16
+
17
+ private
18
+
19
+ def escaped_url
20
+ CGI::escape(url)
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,21 @@
1
+ module Shortie
2
+ class Service
3
+ def self.all
4
+ SERVICES
5
+ end
6
+
7
+ def self.find_by_key(key)
8
+ SERVICES.find { |s| s.key == key }
9
+ end
10
+
11
+ attr_accessor :key, :name, :class_name
12
+
13
+ def initialize(key, name, class_name)
14
+ self.key, self.name, self.class_name = key, name, class_name
15
+ end
16
+
17
+ def shorten(url)
18
+ eval("Shortie::Shorteners::#{class_name}").shorten(url)
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,18 @@
1
+ module Shortie
2
+ SERVICES = [
3
+ Service.new("bitly", "bit.ly", "Bitly"),
4
+ Service.new("tinyurl", "TinyURL", "Tinyurl"),
5
+ Service.new("isgd", "is.gd", "Isgd"),
6
+ Service.new("cligs", "cli.gs", "Cligs"),
7
+ Service.new("twurl", "Twurl", "Twurl"),
8
+ Service.new("snipurl", "Snipurl", "Snipurl"),
9
+ Service.new("snurl", "Snurl", "Snurl"),
10
+ Service.new("snipr", "Snipr", "Snipr"),
11
+ Service.new("snim", "sn.im", "Snim"),
12
+ Service.new("cllk", "cl.lk", "Cllk"),
13
+ Service.new("shortie", "short.ie", "Shortie"),
14
+ Service.new("idek", "idek.net", "Idek"),
15
+ Service.new("tinycc", "tiny.cc", "Tinycc"),
16
+ Service.new("rubyurl", "RubyURL", "Rubyurl")
17
+ ]
18
+ end
@@ -0,0 +1,21 @@
1
+ module Shortie
2
+ module Shorteners
3
+ class Bitly < BaseShortener
4
+ def shorten
5
+ xml = SimpleHttp.get("http://api.bit.ly/v3/shorten?login=lassebunk&apiKey=R_f7df445f30899b8aec8ad5af7c732f0b&longUrl=#{escaped_url}&format=xml")
6
+ doc = REXML::Document.new(xml)
7
+
8
+ status_element = doc.elements["response/status_txt"]
9
+ raise "No status text (status_txt) returned from bit.ly." if status_element.nil?
10
+
11
+ status = status_element.text
12
+ raise status unless status == "OK"
13
+
14
+ url_element = doc.elements["response/data/url"]
15
+ raise "No URL returned from bit.ly." if url_element.nil?
16
+
17
+ url_element.text
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,9 @@
1
+ module Shortie
2
+ module Shorteners
3
+ class Cligs < BaseShortener
4
+ def shorten
5
+ SimpleHttp.get("http://cli.gs/api/v1/cligs/create?url=#{escaped_url}")
6
+ end
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,9 @@
1
+ module Shortie
2
+ module Shorteners
3
+ class Cllk < Snipurl
4
+ def shorten
5
+ super("http://cl.lk")
6
+ end
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,9 @@
1
+ module Shortie
2
+ module Shorteners
3
+ class Idek < BaseShortener
4
+ def shorten
5
+ SimpleHttp.get("http://idek.net/shorten/?idek-api=true&idek-url=#{escaped_url}")
6
+ end
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,9 @@
1
+ module Shortie
2
+ module Shorteners
3
+ class Isgd < BaseShortener
4
+ def shorten
5
+ SimpleHttp.get("http://is.gd/api.php?longurl=#{escaped_url}")
6
+ end
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,12 @@
1
+ module Shortie
2
+ module Shorteners
3
+ class Rubyurl < BaseShortener
4
+ def shorten
5
+ xml = SimpleHttp.post("http://rubyurl.com/api/links", "website_url" => url)
6
+ doc = REXML::Document.new(xml)
7
+
8
+ doc.elements["link/permalink"].text
9
+ end
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,15 @@
1
+ module Shortie
2
+ module Shorteners
3
+ class Shortie < BaseShortener
4
+ def shorten
5
+ xml = SimpleHttp.get("http://short.ie/api?url=#{escaped_url}&format=xml")
6
+ doc = REXML::Document.new(xml)
7
+
8
+ error_msg = doc.elements["short/error/msg"]
9
+ raise error_msg.text if error_msg
10
+
11
+ doc.elements["short/shortened"].text
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,9 @@
1
+ module Shortie
2
+ module Shorteners
3
+ class Snim < Snipurl
4
+ def shorten
5
+ super("http://sn.im")
6
+ end
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,9 @@
1
+ module Shortie
2
+ module Shorteners
3
+ class Snipr < Snipurl
4
+ def shorten
5
+ super("http://snipr.com")
6
+ end
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,14 @@
1
+ module Shortie
2
+ module Shorteners
3
+ class Snipurl < BaseShortener
4
+ def shorten(base_path = "http://snipurl.com")
5
+ SimpleHttp.post("#{base_path}/site/getsnip", {
6
+ "sniplink" => url,
7
+ "snipuser" => "lassebunk",
8
+ "snipapi" => "55656c5bbaf92f859aa657be1482fc3a",
9
+ "snipformat" => "simple"
10
+ })
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,9 @@
1
+ module Shortie
2
+ module Shorteners
3
+ class Snurl < Snipurl
4
+ def shorten
5
+ super("http://snurl.com")
6
+ end
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,15 @@
1
+ module Shortie
2
+ module Shorteners
3
+ class Tinycc < BaseShortener
4
+ def shorten
5
+ xml = SimpleHttp.get("http://tiny.cc/?c=rest_api&m=shorten&version=2.0.1&format=xml&longUrl=#{escaped_url}&login=lassebunk&apiKey=7ec76292-2999-48ab-ad8a-91798282ad59")
6
+ doc = REXML::Document.new(xml)
7
+
8
+ error_msg = doc.elements["restapi/errorMessage"]
9
+ raise error_msg.text unless error_msg.text.nil?
10
+
11
+ doc.elements["restapi/results/*/shorturl"].text
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,9 @@
1
+ module Shortie
2
+ module Shorteners
3
+ class Tinyurl < BaseShortener
4
+ def shorten
5
+ SimpleHttp.get("http://tinyurl.com/api-create.php?url=#{escaped_url}")
6
+ end
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,9 @@
1
+ module Shortie
2
+ module Shorteners
3
+ class Twurl < BaseShortener
4
+ def shorten
5
+ SimpleHttp.post("http://tweetburner.com/links", "link[url]" => url)
6
+ end
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,14 @@
1
+ require 'shortie/shorteners/snipurl'
2
+ require 'shortie/shorteners/bitly'
3
+ require 'shortie/shorteners/cligs'
4
+ require 'shortie/shorteners/cllk'
5
+ require 'shortie/shorteners/idek'
6
+ require 'shortie/shorteners/isgd'
7
+ require 'shortie/shorteners/rubyurl'
8
+ require 'shortie/shorteners/shortie'
9
+ require 'shortie/shorteners/snim'
10
+ require 'shortie/shorteners/snipr'
11
+ require 'shortie/shorteners/snurl'
12
+ require 'shortie/shorteners/tinycc'
13
+ require 'shortie/shorteners/tinyurl'
14
+ require 'shortie/shorteners/twurl'
data/lib/shortie.rb ADDED
@@ -0,0 +1,10 @@
1
+ require 'shortie/base_shortener'
2
+ require 'shortie/service'
3
+ require 'shortie/services'
4
+ require 'shortie/shorteners'
5
+
6
+ require 'rubygems'
7
+ require 'simplehttp'
8
+ require 'rexml/document'
9
+
10
+ puts Shortie::Service.all.first.shorten("http://www.saxo.com")
metadata ADDED
@@ -0,0 +1,93 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: shortie
3
+ version: !ruby/object:Gem::Version
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 0
8
+ - 1
9
+ version: 0.0.1
10
+ platform: ruby
11
+ authors:
12
+ - Lasse Bunk
13
+ autorequire:
14
+ bindir: bin
15
+ cert_chain: []
16
+
17
+ date: 2010-06-30 00:00:00 +02:00
18
+ default_executable:
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
21
+ name: simplehttp
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - ">="
26
+ - !ruby/object:Gem::Version
27
+ segments:
28
+ - 0
29
+ - 1
30
+ - 3
31
+ version: 0.1.3
32
+ type: :runtime
33
+ version_requirements: *id001
34
+ description: Shortie makes it easy to shorten URLs with any service.
35
+ email: lassebunk@gmail.com
36
+ executables: []
37
+
38
+ extensions: []
39
+
40
+ extra_rdoc_files: []
41
+
42
+ files:
43
+ - lib/shortie/base_shortener.rb
44
+ - lib/shortie/service.rb
45
+ - lib/shortie/services.rb
46
+ - lib/shortie/shorteners/bitly.rb
47
+ - lib/shortie/shorteners/cligs.rb
48
+ - lib/shortie/shorteners/cllk.rb
49
+ - lib/shortie/shorteners/idek.rb
50
+ - lib/shortie/shorteners/isgd.rb
51
+ - lib/shortie/shorteners/rubyurl.rb
52
+ - lib/shortie/shorteners/shortie.rb
53
+ - lib/shortie/shorteners/snim.rb
54
+ - lib/shortie/shorteners/snipr.rb
55
+ - lib/shortie/shorteners/snipurl.rb
56
+ - lib/shortie/shorteners/snurl.rb
57
+ - lib/shortie/shorteners/tinycc.rb
58
+ - lib/shortie/shorteners/tinyurl.rb
59
+ - lib/shortie/shorteners/twurl.rb
60
+ - lib/shortie/shorteners.rb
61
+ - lib/shortie.rb
62
+ has_rdoc: true
63
+ homepage: http://github.com/lassebunk/shortie
64
+ licenses: []
65
+
66
+ post_install_message:
67
+ rdoc_options: []
68
+
69
+ require_paths:
70
+ - lib
71
+ required_ruby_version: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ segments:
76
+ - 0
77
+ version: "0"
78
+ required_rubygems_version: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ segments:
83
+ - 0
84
+ version: "0"
85
+ requirements: []
86
+
87
+ rubyforge_project:
88
+ rubygems_version: 1.3.6
89
+ signing_key:
90
+ specification_version: 3
91
+ summary: Shorten URLs with any service.
92
+ test_files: []
93
+