== LongURL

LongURL expands short urls (tinyurl, is.gd, ...) to original ones, using on LongURL.org, internal resolution or direct resolution
First, expand will try to expand url using longurl.org service.
Then, it will try to direct follow redirections on the given url and returns final one.

=== Options
* <tt>:cache</tt> : cache object to use, must implement [] and []= functions.

=== Types
<tt>url</tt> is expected to be a String and returns a String with the url.

=== Examples
  # simple expands
  LongURL.expand("http://tinyurl.com/1c2")                              # => "http://www.google.com"
  LongURL.expand("http://tinyurl.com/blnhsg")                           # => "http://www.google.com/search?q=number+of+horns+on+a+unicorn&ie=UTF-8"
  LongURL.expand("http://is.gd/iUKg")                                   # => "http://fabien.jakimowicz.com"

  # not expandable urls, without any http call
  LongURL.expand("http://www.linuxfr.org")                              # => "http://www.linuxfr.org"

	# Use MemCache
	LongURL.expand("http://is.gd/iUKg", :cache => MemCache.new("localhost:11211", :namespace => "LongURL"))
																																				# => "http://fabien.jakimowicz.com"
																																				
	# Expander class
	expander = LongURL::Expander.new
	expander.expand("http://tinyurl.com/1c2")                             # => "http://www.google.com"
  # not expandable urls, direct resolution only
  expander.direct_resolution("http://www.linuxfr.org")                  # => "http://www.linuxfr.org/pub"
  # not expandable urls, calling longurl.org only
  expander.expand_with_service_only("http://www.linuxfr.org")           # => "http://www.linuxfr.org/pub"
	# ... with MemCache
	expander = LongURL::Expander.new(:cache => MemCache.new("localhost:11211", :namespace => "LongURL"))
	expander.expand("http://tinyurl.com/1c2")                             # => "http://www.google.com"

=== Exceptions
* LongURL::InvalidURL : will occurs if given url is nil, empty or invalid
* LongURL::NetworkError : a network (timeout, host could be reached, ...) error occurs
* LongURL::UnknownError : an unknown error occurs