# rest-core <https://github.com/cardinalblue/rest-core>

by Cardinal Blue <http://cardinalblue.com>

I was talking about rest-core at <http://rubyconf.tw/2011>

* Video: <http://vimeo.com/groups/rubytw/videos/29590001>
  (sorry that I was speaking Mandarin, not English! Slides are in
English though)
* Slide: <http://www.godfat.org/slide/2011-08-27-rest-core.html>

## DESCRIPTION:

Modular Ruby clients for REST APIs

There has been an explosion in the number of REST APIs available
today.
To address the need for a way to access these APIs easily and
elegantly,
we have developed [rest-core][], which consists of composable
middleware
that allows you to build a REST client for any REST API. Or in the
case of
common APIs such as Facebook, Github, and Twitter, you can simply use
the
built-in dedicated clients provided by rest-core.

[rest-core]: http://github.com/cardinalblue/rest-core

## INSTALLATION:

    gem install rest-core

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

    gem 'rest-core', :git => 'git://github.com/cardinalblue/rest-
core.git',
                     :submodules => true

## CHANGES:

### rest-core 0.4.0 -- 2011-09-26

### Incompatible changes:

* [dry] Now `RestCore::Ask` is renamed to `RestCore::Dry` for better
  understanding. Thanks miaout17

* [client] Now `request` method takes an env and an app to make
requests,
  instead of a weird requests array.

* [client] Now if you really want to disable something, for example,
  disabling cache when the default cache is `Rails.cache`, you'll need
to
  pass `false` instead of `nil`. This is because `nil` stands for
using
  defaults in rest-core.

* [client] Defaults priorities are changed to:
  per-request > instance variable > class defaults > middleware
defaults
  See *test_client.rb* for more detailed definition. If you don't
understand
  this, don't worry, since then this won't affect you.

### Compatible changes:

* [client] Introduced a new method `request_full` which is exactly the
same
  as `request` but also returns various information from the app,
including
  `RESPONSE_STATUS` and `RESPONSE_HEADERS`

* [client] Removed various unused, untested, undocumented legacy from
  rest-graph.

* [error] Introduced `RestCore::Error` which is the base class for all
  exceptions raised by rest-core

* [builder] Now `RestCore::Builder.default_app` is the default app
which
  would be used for building clients without setting an app. By
default,
  it's `RestClient`, but you can change it if you like.

* [builder] It no longer builds a @wrapped app. If you don't
understand this,
  then this does nothing for you. It's an internal change. (or bug
fix)

* [wrapper] Now `RestCore::Wrapper.default_app` is the default app
which
  would be used for wrapping middlewares without setting an app. By
default,
  it's `Dry`, but you can change it if you like.

* [wrapped] Fixed a bug that force middlewares to implement `members`
method,
  which should be optional. Thanks miaout17

* [facebook][rails_util] Now default cache is `Rails.cache` instead of
nil
* [simple]   Added a Simple client, which only wraps RestClient
* [univeral] Added an Universal client, which could be used for
anything
* [flurry]   Added a Flurry client, along with its `Flurry::RailsUtil`
* [mixi]     Added a Mixi client

* [bypass] Added a Bypass middleware which does nothing but passing
env
* [oauth2_header] OAuth2Header is a middleware which would pass
access_token
  in header instead of in query string.
* [common_logger] nil object would no longer be logged
* [json_decode] Do nothing if we are being asked for env (dry mode)
* [cache] Now default `:expires_in` is 600 down from 3600
* [middleware] Now not only query values would be escaped, but also
keys.

* [rib-rest-core] Introduced an interactive shell. You'll need [rib][]
to
  run this: `rib rest-core`. It is using an universal client to access
  arbitrary websites.

[rib]: https://github.com/godfat/rib