Here is a list of notable changes by release. Her follows the Semantic Versioning system.
- Initial support for JSONAPI link
- Fix for has_one association parsing link
- Fix for escaping path variables HT @marshall-lee link
- Fix syntax highlighting in README HT @tippenein link
- Fix associations with Active Model Serializers HT @minktom link
- Loosen restrictions on ActiveSupport and ActiveModel to accommodate security fixes link
- Performance fix for responses with large number of objects link
- Bugfix for dirty attributes link
- Add ruby 2.1 and 2.2 to travis test run. We will likely be removing official 1.9.x support in the near future, and will begin to align our support with the official ruby maintenance schedule.
- README updates
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
end
# 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
end
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 => "https://api.example.com" do |connection|
connection.insert(0, FaradayMiddle::OAuth)
end
Now:
Her::API.setup :url => "https://api.example.com" do |connection|
connection.use FaradayMiddle::OAuth
connection.use Her::Middleware::FirstLevelParseJSON
connection.use Faraday::Request::UrlEncoded
connection.use Faraday::Adapter::NetHttp
end
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.