mush 0.1.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.
@@ -0,0 +1,5 @@
1
+ README.rdoc
2
+ lib/**/*.rb
3
+ bin/*
4
+ features/**/*.feature
5
+ LICENSE
@@ -0,0 +1,21 @@
1
+ ## MAC OS
2
+ .DS_Store
3
+
4
+ ## TEXTMATE
5
+ *.tmproj
6
+ tmtags
7
+
8
+ ## EMACS
9
+ *~
10
+ \#*
11
+ .\#*
12
+
13
+ ## VIM
14
+ *.swp
15
+
16
+ ## PROJECT::GENERAL
17
+ coverage
18
+ rdoc
19
+ pkg
20
+
21
+ ## PROJECT::SPECIFIC
data/LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2010 Rafael Magana
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,67 @@
1
+ = MUSh
2
+
3
+ A multiple service URL shortener gem with command-line utilities
4
+
5
+ NOTE: This gem only supports url shortening, nothing else, no stats, no info, no expand and it won't support any of them.
6
+
7
+ == Supported services
8
+
9
+ * bit.ly
10
+ * is.gd
11
+ * u.nu
12
+
13
+ == Usage as a command line utility
14
+
15
+ $ bitly -l login -l apikey -u http://foo.raflabs.com
16
+
17
+ $ isgd http://foo.raflabs.com
18
+
19
+ $ unu foo.raflabs.com
20
+
21
+ Sorry, but at this moment, if you want to use the bitly command line without -l and -k do this:
22
+
23
+ Add the following alias to your ~/.bash_profile or ~/.bashrc
24
+
25
+ alias bitly='bitly -l your_login -k your_apikey'
26
+
27
+ then use it this way (you won't need the -u)
28
+
29
+ $ bitly http://google.com
30
+
31
+ == Usage as a Gem
32
+
33
+ require 'mush'
34
+
35
+ bitly = Mush::Services::Bitly.new
36
+
37
+ bitly.login = "login"
38
+ bitly.apikey = "apikey"
39
+
40
+ bitly.shorten "http://foo.raflabs.com"
41
+
42
+ isgd = Mush::Services::IsGd.new
43
+ isgd.shorten "http://foo.raflabs.com"
44
+
45
+ unu = Mush::Services:Unu.new
46
+ unu.shorten "http://foo.raflabs.com"
47
+
48
+ == ToDo
49
+
50
+ * Use bitly commmand without -l and -k, save config in home folder (.mush file)
51
+ * Make shorten method to accept multiple URLs
52
+ * add j.mp and maybe other services
53
+ * Cache
54
+
55
+ == Note on Patches/Pull Requests
56
+
57
+ * Fork the project.
58
+ * Make your feature/service addition or bug fix.
59
+ * Add tests for it. This is important so I don't break it in a
60
+ future version unintentionally.
61
+ * Commit, do not mess with rakefile, version, or history.
62
+ (if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)
63
+ * Send me a pull request. Bonus points for topic branches.
64
+
65
+ == Copyright
66
+
67
+ Copyright (c) 2010 Rafael Magana. See LICENSE for details.
@@ -0,0 +1,54 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require 'rubygems'
3
+ require 'rake'
4
+
5
+ begin
6
+ require 'jeweler'
7
+ Jeweler::Tasks.new do |gem|
8
+ gem.name = "mush"
9
+ gem.summary = %Q{A multiple service URL shortener gem with command-line utility}
10
+ gem.description = %Q{A gem to shorten URLs using different services, it has one command-line utility for each supported service.}
11
+ gem.email = "raf.magana@gmail.com"
12
+ gem.homepage = "http://github.com/rafmagana/mush"
13
+ gem.authors = ["Rafael Magaña"]
14
+ gem.add_development_dependency "shoulda", ">= 0"
15
+ # gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
16
+ end
17
+ Jeweler::GemcutterTasks.new
18
+ rescue LoadError
19
+ puts "Jeweler (or a dependency) not available. Install it with: gem install jeweler"
20
+ end
21
+
22
+ require 'rake/testtask'
23
+ Rake::TestTask.new(:test) do |test|
24
+ test.libs << 'lib' << 'test'
25
+ test.pattern = 'test/**/test_*.rb'
26
+ test.verbose = true
27
+ end
28
+
29
+ begin
30
+ require 'rcov/rcovtask'
31
+ Rcov::RcovTask.new do |test|
32
+ test.libs << 'test'
33
+ test.pattern = 'test/**/test_*.rb'
34
+ test.verbose = true
35
+ end
36
+ rescue LoadError
37
+ task :rcov do
38
+ abort "RCov is not available. In order to run rcov, you must: sudo gem install spicycode-rcov"
39
+ end
40
+ end
41
+
42
+ task :test => :check_dependencies
43
+
44
+ task :default => :test
45
+
46
+ require 'rake/rdoctask'
47
+ Rake::RDocTask.new do |rdoc|
48
+ version = File.exist?('VERSION') ? File.read('VERSION') : ""
49
+
50
+ rdoc.rdoc_dir = 'rdoc'
51
+ rdoc.title = "mush #{version}"
52
+ rdoc.rdoc_files.include('README*')
53
+ rdoc.rdoc_files.include('lib/**/*.rb')
54
+ end
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.1.0
@@ -0,0 +1,67 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ STDOUT.sync = true
4
+
5
+ $LOAD_PATH.unshift File.join(File.dirname(__FILE__), *%w[.. lib])
6
+
7
+ require 'rubygems'
8
+ require 'optparse'
9
+ require 'mush'
10
+
11
+ ORIGINAL_ARGV = ARGV.dup
12
+
13
+ #the defaults
14
+ options = {}
15
+
16
+ opts = OptionParser.new do |opts|
17
+ opts.banner = <<-EOF
18
+ Usage:
19
+ bitly -l login -k apikey -u url
20
+
21
+ Options:
22
+ EOF
23
+
24
+ opts.on("-lLOGIN", "--login LOGIN", "The login to access the bit.ly API") do |login|
25
+ options[:login] = login
26
+ end
27
+
28
+ opts.on("-kAPIKEY", "--apikey APIKEY", "API Key") do |apikey|
29
+ options[:apikey] = apikey
30
+ end
31
+
32
+ opts.on("-uURL", "--url URL", "The long URL to be shortened") do |url|
33
+ options[:url] = url
34
+ end
35
+
36
+ opts.on("-v", "--version", "Print the version number and exit") do
37
+ options[:version] = true
38
+ end
39
+ end
40
+
41
+ opts.parse!
42
+
43
+ if options[:version]
44
+ abort("Version " + Mush.version)
45
+ end
46
+
47
+ options[:url] = ARGV.first if ARGV.length == 1
48
+
49
+ #validate
50
+ unless options[:login]
51
+ abort("You must specify a login to access the Bit.ly API")
52
+ end
53
+
54
+ unless options[:apikey]
55
+ abort("You must specify an API Key to access the Bit.ly API")
56
+ end
57
+
58
+ unless options[:url]
59
+ abort("Please provide a valid URL, including http://")
60
+ end
61
+
62
+ bitly = Mush::Services::Bitly.new
63
+
64
+ bitly.login = options[:login]
65
+ bitly.apikey = options[:apikey]
66
+
67
+ puts bitly.shorten options[:url]
@@ -0,0 +1,40 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ STDOUT.sync = true
4
+
5
+ $LOAD_PATH.unshift File.join(File.dirname(__FILE__), *%w[.. lib])
6
+
7
+ require 'rubygems'
8
+ require 'optparse'
9
+ require 'mush'
10
+
11
+ ORIGINAL_ARGV = ARGV.dup
12
+
13
+ #the defaults
14
+ options = {}
15
+
16
+ opts = OptionParser.new do |opts|
17
+ opts.banner = <<-EOF
18
+ Usage:
19
+ isgd url
20
+ EOF
21
+
22
+ opts.on("-v", "--version", "Print the version number and exit") do
23
+ options[:version] = true
24
+ end
25
+ end
26
+
27
+ opts.parse!
28
+
29
+ if options[:version]
30
+ abort("Version " + Mush.version)
31
+ end
32
+
33
+ options[:url] = ARGV.first if ARGV.length == 1
34
+
35
+ # validate
36
+ unless options[:url]
37
+ abort("You must specify a URL to use the is.gd service")
38
+ end
39
+
40
+ puts Mush::Services::IsGd.new.shorten options[:url]
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env ruby
2
+ puts "the actual commands are:"
3
+ puts "bitly, isgd and unu"
data/bin/unu ADDED
@@ -0,0 +1,40 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ STDOUT.sync = true
4
+
5
+ $LOAD_PATH.unshift File.join(File.dirname(__FILE__), *%w[.. lib])
6
+
7
+ require 'rubygems'
8
+ require 'optparse'
9
+ require 'mush'
10
+
11
+ ORIGINAL_ARGV = ARGV.dup
12
+
13
+ #the defaults
14
+ options = {}
15
+
16
+ opts = OptionParser.new do |opts|
17
+ opts.banner = <<-EOF
18
+ Usage:
19
+ unu url
20
+ EOF
21
+
22
+ opts.on("-v", "--version", "Print the version number and exit") do
23
+ options[:version] = true
24
+ end
25
+ end
26
+
27
+ opts.parse!
28
+
29
+ if options[:version]
30
+ abort("Version " + Mush.version)
31
+ end
32
+
33
+ options[:url] = ARGV.first if ARGV.length == 1
34
+
35
+ # validate
36
+ unless options[:url]
37
+ abort("You must specify a URL to use the u.nu service")
38
+ end
39
+
40
+ puts Mush::Services::Unu.new.shorten options[:url]
@@ -0,0 +1,12 @@
1
+ require 'httparty'
2
+ require 'mush/errors'
3
+ require 'mush/service'
4
+ require 'mush/authenticated_service'
5
+
6
+ Dir[File.dirname(__FILE__)+"/mush/services/*"].each { |service| require service }
7
+
8
+ module Mush
9
+ def self.version
10
+ File.read(File.join(File.dirname(__FILE__), *%w[.. VERSION]))
11
+ end
12
+ end
@@ -0,0 +1,33 @@
1
+ module Mush
2
+
3
+ class AuthenticatedService < Service
4
+
5
+ attr_accessor :login, :apikey
6
+
7
+ def initialize
8
+ @login = ''
9
+ @apikey = ''
10
+ end
11
+
12
+ def authorize(args = {})
13
+ raise InvalidAuthorizationData.new("Invalid Authorization Data, please provide both login and apikey") unless valid_authorization_data? args
14
+ @login = options[:login]
15
+ @apikey = options[:apikey]
16
+ end
17
+
18
+ protected
19
+ def valid_authorization_data?(data)
20
+ [:login, :apikey].all? { |key| data.key? key }
21
+ end
22
+
23
+ def self.authorizable_with(*options)
24
+ raise InvalidAuthorizationFields.new("Should provide fields to authorize with") if options.empty?
25
+ @params_to_authorize = options
26
+ class_eval do
27
+ options.each { |o| attr_accessor o.to_sym }
28
+ end
29
+ end
30
+
31
+ end
32
+
33
+ end
@@ -0,0 +1,6 @@
1
+ module Mush
2
+ class InterfaceMethodNotImplementedError < StandardError; end
3
+ class InvalidURI < ArgumentError; end
4
+ class InvalidAuthorizationData < ArgumentError; end
5
+ class InvalidAuthorizationFields < ArgumentError; end
6
+ end
@@ -0,0 +1,37 @@
1
+ module Mush
2
+
3
+ # This is the class all the services must inherit from.
4
+ class Service
5
+ include HTTParty
6
+
7
+ #wrapper for HTTParty.get
8
+ def get(path, options = {})
9
+ self.class.get(path, options)
10
+ end
11
+
12
+ def shorten(*)
13
+ raise InterfaceMethodNotImplementedError.new("Service#shorten must be overridden in subclasses")
14
+ end
15
+
16
+ def authorize(args = {})
17
+ raise InvalidAuthorizationData.new("Invalid Authorization Data, please provide both login and apikey") unless valid_authorization_data? args
18
+ @login = options[:login]
19
+ @apikey = options[:apikey]
20
+ end
21
+
22
+ protected
23
+ def valid_authorization_data?(data)
24
+ [:login, :apikey].all? { |key| data.key? key }
25
+ end
26
+
27
+ def self.authorizable_with(*options)
28
+ raise InvalidAuthorizationFields.new("Should provide fields to authorize with") if options.empty?
29
+ @params_to_authorize = options
30
+ class_eval do
31
+ options.each { |o| attr_accessor o.to_sym }
32
+ end
33
+ end
34
+
35
+ end
36
+
37
+ end
@@ -0,0 +1,34 @@
1
+ module Mush
2
+
3
+ module Services
4
+
5
+ ## bit.ly and j.mp
6
+ # login=bitlyapidemo
7
+ # apiKey=R_0da49e0a9118ff35f52f629d2d71bf07
8
+ # longUrl=http%3A%2F%2Fbetaworks.com%2F
9
+ # format=json
10
+ # domain=j.mp
11
+ class Bitly < AuthenticatedService
12
+
13
+ base_uri 'http://api.bit.ly/v3'
14
+
15
+ def shorten(url)
16
+ invalid_uri_msg = "Please provide a valid URI, including http://"
17
+ invalid_auth_msg = "Invalid Authorization Data, please provide both login and apikey"
18
+
19
+ raise InvalidURI.new invalid_uri_msg if url.empty?
20
+ raise InvalidAuthorizationData.new(invalid_auth_msg) if login.empty? or apikey.empty?
21
+
22
+ options = {}
23
+ options[:query] = {:login => self.login, :apiKey => self.apikey, :longUrl => url}
24
+
25
+ response = get('/shorten', options)
26
+
27
+ response["status_code"] == 200 ? response["data"]["url"].chomp : response["status_txt"]
28
+ end
29
+
30
+ end
31
+
32
+ end
33
+
34
+ end
@@ -0,0 +1,21 @@
1
+ module Mush
2
+
3
+ module Services
4
+
5
+ class IsGd < Service
6
+ base_uri 'http://is.gd'
7
+
8
+ def shorten(url)
9
+ raise InvalidURI.new("Please provide a valid URI") if url.empty?
10
+
11
+ options = {}
12
+ options[:query] = {:longurl => url}
13
+ get('/api.php', options).body.chomp
14
+ end
15
+
16
+ end
17
+
18
+ end
19
+
20
+ end
21
+
@@ -0,0 +1,20 @@
1
+ module Mush
2
+
3
+ module Services
4
+
5
+ class Unu < Service
6
+ base_uri 'http://u.nu/'
7
+
8
+ def shorten(url)
9
+ raise InvalidURI.new("Please provide a valid URI") if url.empty?
10
+
11
+ options = {}
12
+ options[:query] = {:url => url}
13
+ get('/unu-api-simple', options).body.chomp
14
+ end
15
+
16
+ end
17
+
18
+ end
19
+
20
+ end
@@ -0,0 +1,65 @@
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{mush}
8
+ s.version = "0.1.0"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = ["Rafael Maga\303\261a"]
12
+ s.date = %q{2010-08-26}
13
+ s.description = %q{A gem to shorten URLs using different services, it has one command-line utility for each supported service.}
14
+ s.email = %q{raf.magana@gmail.com}
15
+ s.executables = ["bitly", "isgd", "mush", "unu"]
16
+ s.extra_rdoc_files = [
17
+ "LICENSE",
18
+ "README.rdoc"
19
+ ]
20
+ s.files = [
21
+ ".document",
22
+ ".gitignore",
23
+ "LICENSE",
24
+ "README.rdoc",
25
+ "Rakefile",
26
+ "VERSION",
27
+ "bin/bitly",
28
+ "bin/isgd",
29
+ "bin/mush",
30
+ "bin/unu",
31
+ "lib/mush.rb",
32
+ "lib/mush/authenticated_service.rb",
33
+ "lib/mush/errors.rb",
34
+ "lib/mush/service.rb",
35
+ "lib/mush/services/bitly.rb",
36
+ "lib/mush/services/isgd.rb",
37
+ "lib/mush/services/unu.rb",
38
+ "mush.gemspec",
39
+ "test/helper.rb",
40
+ "test/test_mush.rb"
41
+ ]
42
+ s.homepage = %q{http://github.com/rafmagana/mush}
43
+ s.rdoc_options = ["--charset=UTF-8"]
44
+ s.require_paths = ["lib"]
45
+ s.rubygems_version = %q{1.3.7}
46
+ s.summary = %q{A multiple service URL shortener gem with command-line utility}
47
+ s.test_files = [
48
+ "test/helper.rb",
49
+ "test/test_mush.rb"
50
+ ]
51
+
52
+ if s.respond_to? :specification_version then
53
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
54
+ s.specification_version = 3
55
+
56
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
57
+ s.add_development_dependency(%q<shoulda>, [">= 0"])
58
+ else
59
+ s.add_dependency(%q<shoulda>, [">= 0"])
60
+ end
61
+ else
62
+ s.add_dependency(%q<shoulda>, [">= 0"])
63
+ end
64
+ end
65
+
@@ -0,0 +1,11 @@
1
+ require 'rubygems'
2
+ require 'test/unit'
3
+ require 'mocha'
4
+ require 'shoulda'
5
+
6
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
7
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
8
+ require 'mush'
9
+
10
+ class Test::Unit::TestCase
11
+ end
@@ -0,0 +1,113 @@
1
+ require 'helper'
2
+
3
+ class TestMush < Test::Unit::TestCase
4
+
5
+ context "Mush::Service class" do
6
+ should "include HTTParty module" do
7
+ assert Mush::Service.include? HTTParty
8
+ end
9
+
10
+ should "define a #shorten method" do
11
+ assert Mush::Service.new.respond_to? :shorten
12
+ end
13
+
14
+ should "raise and exception if use tries to use #shorten method" do
15
+ assert_raise Mush::InterfaceMethodNotImplementedError do
16
+ Mush::Service.new.shorten
17
+ end
18
+ end
19
+
20
+ should "add an instance method called 'get' that wrappes the HTTParty#get method" do
21
+ assert Mush::Service.new.respond_to? :get
22
+ end
23
+ end
24
+
25
+ context "All Services" do
26
+ setup do
27
+ s = Mush::Services
28
+ @services = [s::IsGd, s::Bitly, s::Unu]
29
+ end
30
+
31
+ should "be subclasses of Mush::Service" do
32
+ @services.each do |service|
33
+ assert Mush::Service, service.superclass
34
+ end
35
+ end
36
+
37
+ should "raise an exception if shorten is called with an empty url" do
38
+ @services.each do |service|
39
+ assert_raise Mush::InvalidURI do
40
+ service.new.shorten('')
41
+ end
42
+ end
43
+ end
44
+
45
+ end
46
+
47
+ context "Service" do
48
+ setup do
49
+ @long_url = "http://www.a_very_long_url.com"
50
+ @shortened_url = "http://is.gd/test"
51
+ @httparty_response = stub('HTTParty::Reponse', :body => @shortened_url)
52
+ end
53
+
54
+ context "not authorizable" do
55
+
56
+ setup do
57
+ @httparty_response = stub('HTTParty::Reponse', :body => @shortened_url)
58
+ end
59
+
60
+ context "IsGd" do
61
+
62
+ should "return a shortened url" do
63
+ Mush::Services::IsGd.any_instance.stubs(:get).with(instance_of(String), instance_of(Hash)).returns(@httparty_response)
64
+
65
+ isgd = Mush::Services::IsGd.new
66
+ isgd_result = isgd.shorten(@long_url)
67
+
68
+ assert_equal @shortened_url, isgd_result
69
+ end
70
+
71
+ end
72
+
73
+ context "Unu" do
74
+ should "return a shortened url" do
75
+ Mush::Services::Unu.any_instance.stubs(:get).with(instance_of(String), instance_of(Hash)).returns(@httparty_response)
76
+
77
+ unu = Mush::Services::Unu.new
78
+ unu_result = unu.shorten(@long_url)
79
+
80
+ assert_equal @shortened_url, unu_result
81
+ end
82
+ end
83
+ end
84
+
85
+ context "authorizable" do
86
+ setup do
87
+ @response = @shortened_url
88
+ end
89
+
90
+ context "Bitly" do
91
+ should "has authentication credentials to return a shortened url" do
92
+
93
+ httparty_response = stub('HTTParty::Response', :[] => @shortened_url)
94
+ bitly = Mush::Services::Bitly.new
95
+
96
+ assert_raise Mush::InvalidAuthorizationData do
97
+ bitly.shorten(@long_url)
98
+ end
99
+
100
+ bitly.login = "login"
101
+ bitly.apikey = "apikey"
102
+
103
+ assert_nothing_raised do
104
+ bitly.shorten(@long_url)
105
+ end
106
+
107
+ Mush::Services::Bitly.any_instance.stubs(:get).with(instance_of(String), instance_of(Hash)).returns(httparty_response)
108
+ assert_equal @shortened_url, bitly.shorten(@long_url)
109
+ end
110
+ end
111
+ end
112
+ end
113
+ end
metadata ADDED
@@ -0,0 +1,104 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: mush
3
+ version: !ruby/object:Gem::Version
4
+ hash: 27
5
+ prerelease: false
6
+ segments:
7
+ - 0
8
+ - 1
9
+ - 0
10
+ version: 0.1.0
11
+ platform: ruby
12
+ authors:
13
+ - "Rafael Maga\xC3\xB1a"
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2010-08-26 00:00:00 -05:00
19
+ default_executable:
20
+ dependencies:
21
+ - !ruby/object:Gem::Dependency
22
+ name: shoulda
23
+ prerelease: false
24
+ requirement: &id001 !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ hash: 3
30
+ segments:
31
+ - 0
32
+ version: "0"
33
+ type: :development
34
+ version_requirements: *id001
35
+ description: A gem to shorten URLs using different services, it has one command-line utility for each supported service.
36
+ email: raf.magana@gmail.com
37
+ executables:
38
+ - bitly
39
+ - isgd
40
+ - mush
41
+ - unu
42
+ extensions: []
43
+
44
+ extra_rdoc_files:
45
+ - LICENSE
46
+ - README.rdoc
47
+ files:
48
+ - .document
49
+ - .gitignore
50
+ - LICENSE
51
+ - README.rdoc
52
+ - Rakefile
53
+ - VERSION
54
+ - bin/bitly
55
+ - bin/isgd
56
+ - bin/mush
57
+ - bin/unu
58
+ - lib/mush.rb
59
+ - lib/mush/authenticated_service.rb
60
+ - lib/mush/errors.rb
61
+ - lib/mush/service.rb
62
+ - lib/mush/services/bitly.rb
63
+ - lib/mush/services/isgd.rb
64
+ - lib/mush/services/unu.rb
65
+ - mush.gemspec
66
+ - test/helper.rb
67
+ - test/test_mush.rb
68
+ has_rdoc: true
69
+ homepage: http://github.com/rafmagana/mush
70
+ licenses: []
71
+
72
+ post_install_message:
73
+ rdoc_options:
74
+ - --charset=UTF-8
75
+ require_paths:
76
+ - lib
77
+ required_ruby_version: !ruby/object:Gem::Requirement
78
+ none: false
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ hash: 3
83
+ segments:
84
+ - 0
85
+ version: "0"
86
+ required_rubygems_version: !ruby/object:Gem::Requirement
87
+ none: false
88
+ requirements:
89
+ - - ">="
90
+ - !ruby/object:Gem::Version
91
+ hash: 3
92
+ segments:
93
+ - 0
94
+ version: "0"
95
+ requirements: []
96
+
97
+ rubyforge_project:
98
+ rubygems_version: 1.3.7
99
+ signing_key:
100
+ specification_version: 3
101
+ summary: A multiple service URL shortener gem with command-line utility
102
+ test_files:
103
+ - test/helper.rb
104
+ - test/test_mush.rb