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.
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
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
: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.
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.
- support for other ORM - at present only works with ActiveRecord
- support for other shortening url services.
Copyright (c) 2010 Louis Gillies. See LICENSE for details.