Skip to content


Subversion checkout URL

You can clone with
Download ZIP
Fetching contributors…

Cannot retrieve contributors at this time

82 lines (56 sloc) 2.71 KB

Upgrade Her

Here is a list of backward-incompatible changes that were introduced while Her is pre-1.0. After reaching 1.0, it will follow the Semantic Versioning system.


Associations have been refactored so that calling the association name method doesn’t immediately load or fetch the data.

class User
  include Her::Model
  has_many :comments

# This doesn’t fetch the data yet and it’s still chainable
comments = User.find(1).comments

# This actually fetches the data
puts comments.inspect

# This is no longer possible in her-0.6
comments = User.find(1).comments(:approved => 1)

# To pass additional parameters to the HTTP request, we now have to do this
comments = User.find(1).comments.where(:approved => 1)


Her is now compatible with ActiveModel and includes ActiveModel::Validations.

Before 0.5, the errors method on an object would return an error list received from the server (the :errors key defined by the parsing middleware). But now, errors returns the error list generated after calling the valid? method (or any other similar validation method from ActiveModel::Validations). The error list returned from the server is now accessible from the response_errors method.

Since 0.5.5, Her provides a store_response_errors method, which allows you to choose the method which will return the response errors. You can use it to revert Her back to its original behavior (ie. errors returning the response errors):

class User
  include Her::Model
  store_response_errors :errors

user = User.create(:email => "foo") # POST /users returns { :errors => ["Email is invalid"] }
user.errors # => ["Email is invalid"]


Her no longer includes default middleware when making HTTP requests. The user has now to define all the needed middleware. Before:

Her::API.setup :url => "" do |connection|
  connection.insert(0, FaradayMiddle::OAuth)


Her::API.setup :url => "" do |connection|
  connection.use FaradayMiddle::OAuth
  connection.use Her::Middleware::FirstLevelParseJSON
  connection.use Faraday::Request::UrlEncoded
  connection.use Faraday::Adapter::NetHttp


The default parser middleware has been replaced to treat first-level JSON data as the resource or collection data. Before it expected this:

{ "data": { "id": 1, "name": "Foo" }, "errors": [] }

Now it expects this (the errors key is not treated as resource data):

{ "id": 1, "name": "Foo", "errors": [] }

If you still want to get the old behavior, you can use Her::Middleware::SecondLevelParseJSON instead of Her::Middleware::FirstLevelParseJSON in your middleware stack.

Jump to Line
Something went wrong with that request. Please try again.