1. Lin Jen-Shin
  2. rest-more



rest-more Build Status

by Lin Jen-Shin (godfat)

Lin Jen-Shin (godfat) had given a talk about rest-core on RubyConf Taiwan 2011. The slide is in English, but the talk is in Mandarin.


Various REST clients such as Facebook and Twitter built with rest-core.


Out-of-box REST clients built with rest-core for:

  • Dropbox
  • Facebook
  • Github
  • Linkedin
  • Twitter

Rails utilities are also included.



  • MRI (official CRuby) 1.9.3, 2.0.0, Rubinius and JRuby
  • gem rest-core
  • gem rest-client


  • gem em-http-request (if using eventmachine)
  • gem json or yajl-ruby, or multi_json (if JsonResponse or JsonRequest middlewares are used)


gem install rest-more

Or if you want development version, put this in Gemfile:

gem 'rest-more', :git => 'git://github.com/godfat/rest-more.git',
                 :submodules => true


The simplest usage:

require 'rest-more'

RC::Twitter.new.statuses('_cardinalblue') # get user tweets
RC::Github.new.get('users/cardinalblue')  # get user info

linkedin = RC::Linkedin.new(:consumer_key    => '...',
                            :consumer_secret => '...')
linkedin.authorize_url!   # copy and paste the URL in browser to authorize
linkedin.authorize!('..') # paste your code from browser
linkedin.me               # get current user info

RC::Facebook.new.get('4') # get user info

Runnable example is at: example/simple.rb. Please see slides from rubyconf.tw/2011 for concepts.

Concurrent HTTP Requests:

Inherited from rest-core, you can do concurrent requests quite easily. Here's a very quick example of getting Facebook users' names for UID 4 and 5:

require 'rest-more'
facebook = RC::Facebook.new(:log_method => method(:puts))
puts "rest-client with threads doing concurrent requests"
a = [facebook.get('4'), facebook.get('5')]
puts "It's not blocking... but doing concurrent requests underneath"
p a.map{ |r| r['name'] } # here we want the values, so it blocks here
puts "DONE"

If you prefer callback based solution, this would also work:

require 'rest-more'
facebook = RC::Facebook.new(:log_method => method(:puts))
puts "callback also works"
facebook.get('6'){ |r|
  p r['name']
puts "It's not blocking... but doing concurrent requests underneath"
facebook.wait # we block here to wait for the request done
puts "DONE"

Runnable example is at: example/multi.rb. For a detailed demonstration, see: Advanced Concurrent HTTP Requests -- Embrace the Future

Rails Utilities

To be added. But you can take a look at Facebook tutorial first.

EventMachine inside Rainbows!

To be added. But you can take a look at Rainbows configuration first.

A simple interactive shell with rib:

You need to install rib in order to try this interactive shell:

gem install rib

Then you can try this by running rib rest-core:

rest-core>> self.site = 'https://api.github.com/users/'
rest-core>> self.json_response = true
rest-core>> get 'godfat'

Which is using RestCore::Universal for accessing arbitrary websites.

rest-more users:

Powered sites:




Apache License 2.0

Copyright (c) 2011-2013, Lin Jen-Shin (godfat)

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at


Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.