Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Shorten url for active model instance
Ruby
branch: master

Fetching latest commit…

Cannot retrieve the latest commit at this time

Failed to load latest commit information.
lib
pkg
spec
.gitignore
LICENSE
README.md
Rakefile
VERSION
get_shorty.gemspec
get_shorty.rb
init.rb

README.md

get_shorty

A plugin for rails that shortens a url using the bitly shortening service and persists to the model.

  • Default shortening provider is bitly
  • Easily extendible by adding client / provider for other shortening service eg t.co from twitter when a public api is available.

Installation

As a rails plugin

script/plugin install git://github.com/playgood/get_shorty.git

Then in the model that you want to add a short url to - this model must have a short_url column (this is the default but can be customised see options below)

Class ModelName
  include GetShorty
  has_short_url  
end

has_short_url by default relies on the Bitly API to shorten urls
You need to register with Bitly to get a login and api_key. This needs to be set in a rails initializer to allow the Bitly provider to connect to your api account.

In your initializer

Bitly::Config.set do |config|
  config.login = "my_bitly_login"
  config.api_key = "BLAH_BLAH_BLAH"
end

or with a yaml file with the api_key and login keys.

api_key: "BLAH_BLAH_BLAH"

login: "my_bitly_login"


Bitly::Config.set do |config|
  config.config_file = File.join(Rails.root, "path/to/config/file")
end

Or

You can roll out your own shortening provider - all it has to do is respond to the shorten method. This can then be set using has_short_url option :shortening_service

For example: Class ModelName include GetShorty

  has_short_url :shortening_service => MyShortener
end

This assumes you have defined a Class MyShortener which respond to the method shorten with the parameter url

Parameters & Options

has_short_url has the following options:

  • long_url_host - this is required so the rails url_helper method work. Takes a string or a hash with a value for each environment.
  • :shortening_service - default is Bitly::Client.connection - you can create your own (it just needs to be an object that responds to .shorten(url))
  • :short_url_method - default is :short_url (most commonly a db column - but not necessarily)
  • :long_url_method - default is :generate_long_url - In a rails app this would probably be a resourceful route helper method for example page_url.

Integration

To try to keep the design of this plugin / gem clean and allow for future integration into more ruby frameworks there are no automatic hooks or callbacks to trigger the shortening service.

You will have to add these yourself.

For example in rails

Class ModelName
  include GetShorty
  has_short_url

  after_create :set_short_url
end

This allows you more flexibility than adding callbacks into the plugin. For example you may want to process the api calls to bitly out of process using delayed_job or something similar.

Note on Patches/Pull Requests

  • Fork the project.
  • Make your feature addition or bug fix.
  • Add tests for it. This is important so I don't break it in a future version unintentionally.
  • Commit, do not mess with rakefile, version, or history. (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)
  • Send me a pull request. Bonus points for topic branches.

TODO

  • support for other ORM - at present only works with ActiveRecord
  • support for other shortening url services.

Copyright

Copyright (c) 2010 Louis Gillies. See LICENSE for details.

Something went wrong with that request. Please try again.