Micky
Micky makes simple HTTP requests (GET/HEAD), follows redirects, handles
exceptions (invalid hosts/URIs, server errors, timeouts, redirect loops),
automatically parses responses (JSON, etc.), is very lightweight, and has no
dependency.
Micky is for those times you would have used
Net::HTTP
or OpenURI,
but don’t want to bother handling all the sneaky things mentionned above, and
don’t want to add heavy dependencies to your app.
Installation
Add this line to your application’s Gemfile:
gem 'micky'And then execute:
$ bundleOr install it yourself as:
$ gem install mickyUsage
Micky provides two methods: get and head.
On successful requests, it will return a subclass of
Net::HTTPReponse.
For any error it might encounter during the request (invalid hosts/URIs,
server errors, timeouts, redirect loops), it will return nil.
response = Micky.get('http://google.com')
response.content_type # "text/html"
response.body         # "<!doctype html><html ..."
response = Micky.get('http://invalidhost.foo')
response # nilClassic example
if Micky.head(params[:website_url])
  # User provided a valid URL
  url = URI(params[:website_url])
  url.path = '/favicon.ico'
  if favicon = Micky.get(url)
    # Do whatever with the raw `favicon.body`, for whatever reason
  else
    # This site has no favicon, or a broken one, too bad
  end
else
  # Some error happened, display error message to user
endHeaders and query strings
Request headers and query string params can be passed as :headers and :query.
Micky.get('http://drpm.me/unwz.jpg', headers: { 'Accept' => 'text/html' })
Micky.get('http://urls.api.twitter.com/1/urls/count.json', query: { url: 'dropmeme.com' })OAuth Authorization header
Micky supports creating a OAuth Authorization header with the help of the
SimpleOAuth gem.
Micky.get(
  'https://api.twitter.com/1.1/statuses/user_timeline.json',
  oauth: {
    consumer_key: 'l0tSAl3tT3RsAnD1G1tS',
    consumer_secret: 'l0tSAl3tT3RsAnD1G1tS',
    token: 'l0tSAl3tT3RsAnD1G1tS',
    token_secret: 'l0tSAl3tT3RsAnD1G1tS',
  },
)To use the :oauth argument, just ensure simple_oauth is available:
gem 'simple_oauth'Automatically parse responses into Ruby objects
Micky::Response#body always returns the response as a string. To parse this
string into a Ruby object, use Micky::Response#data.
Responses with Content-Type: application/json are automatically parsed by
Ruby’s JSON library.
response = Micky.get('http://urls.api.twitter.com/1/urls/count.json?url=dropmeme.com')
response.content_type # 'application/json'
# plain string
response.body # '{"count":33,"url":"http://dropmeme.com/"}'
# proper hash
response.data # {"count"=>33, "url"=>"http://dropmeme.com/"}Add custom parsers
To add custom response parsers for specific content-types, insert lambdas in
the Micky.parsers hash.
For instance, to parse HTML documents with Nokogiri:
Micky.parsers['text/html'] = -> (body) {
  Nokogiri::HTML(body)
}Overwrite the default application/json parser to use
Oj:
Micky.parsers['application/json'] = -> (body) {
  begin
    Oj.load(body)
  rescue Oj::ParseError
  end
}Parse images into MiniMagick instances:
image_parser = -> (body) {
  begin
    MiniMagick::Image.read(body)
  rescue MiniMagick::Invalid
  end
}
%w[image/png image/jpeg image/jpg image/gif].each do |type|
  Micky.parsers[type] = image_parser
endTODO
- Support :basic_auth and :digest_auth through HTTPauth
 - Add tests
 - Better document configuration options in README
 
Contributing
- Fork it
 - Create your feature branch (
git checkout -b my-new-feature) - Commit your changes (
git commit -am 'Add some feature') - Push to the branch (
git push origin my-new-feature) - Create new Pull Request
 
© 2014 Rafaël Blais Masson. Micky is released under the MIT license.