Answer

A json-renderable result object working well with AR, AM Serializers, and Rails.

Installation

Add this line to your application's Gemfile:

gem 'answer'

And then execute:

$ bundle

Or install it yourself as:

$ gem install answer

Usage

Answer.new(object, success, status, serializer)

Best way to use it? Return it from your service object, call #render on it right inside your controller action, and never care about another thing.

class Controller < ApplicationController
  def create
    Answer.new(Model.create).render(self)
  end
end

You can supply your success or success and status, etc., but the best thing is that those can be inferred for you because of what your object really is. If saving failed, Answer knows it. You don't have to care about that. You can ask if the object represents a #success? and what http #status it has, but if you call #render on it, you'll get your json with errors rendered automatically. It works best with ActiveRecord models, but you can use it with any objects you want.

And, btw, you can also supply ActiveModel serializers of your choice if they don't match the naming convention.

More

Check the spec here: https://github.com/fenoloftaleina/answer/blob/master/spec/answer_spec.rb.

And the example app here: https://github.com/fenoloftaleina/example-answer-app.

Contributing

Pull requests are very much welcome.

License

The gem is available as open source under the terms of the MIT License.