No description
Find a file
jrhe cb7fd7a811 Merge pull request #2 from tevanoff/remove-pry-requirement
Removed the pry requirement since it created an unnecessary dependency.
2013-05-18 23:25:47 -07:00
lib Ensures there is a root available for arrays 2013-05-16 18:58:35 -04:00
spec Spec setup updates, almost passing 2013-05-16 09:56:13 -04:00
.DS_Store Initial commit 2013-04-04 20:10:51 +01:00
.gitignore Initial commit 2013-04-02 09:41:53 -07:00
Gemfile Removes unnecessary dependencies 2013-05-16 09:06:37 -04:00
Gemfile.lock Removes unnecessary dependencies 2013-05-16 09:06:37 -04:00
grape-active_model_serializers.gemspec Removes unnecessary dependencies 2013-05-16 09:06:37 -04:00
LICENSE Initial commit 2013-04-04 20:10:51 +01:00
Rakefile Initial commit 2013-04-04 20:10:51 +01:00
README.md Adds support for namespace options 2013-05-15 20:47:32 -04:00

Grape::ActiveModelSerializers

Use active_model_serializers with Grape!

Build Status Dependency Status

Installation

Add the grape and grape-active_model_serializers gems to Gemfile.

gem 'grape'
gem 'grape-active_model_serializers'

And then execute:

bundle

Usage

Require grape-active_model_serializers

# config.ru
require 'grape/active_model_serializers'

Tell your API to use Grape::Formatter::ActiveModelSerializers

class API < Grape::API
  format :json
  formatter :json, Grape::Formatter::ActiveModelSerializers
end

Writing serializers

See active_model_serializers

Serializers are inferred by active_record model names

grape-active_model_serializers will search for serializers for the objects returned by your grape API.

namespace :users do
  get ":id" do
    @user = User.find(params[:id])
  end
end

In this case, as User objects are being returned, grape-active_model_serializers will look for a serializer named UserSerializer.

Disabling serializer inferrence

You can turn off serializer inferrence.

Grape::Formatter::ActiveModelSerializers.infer_serializers = false

Manually specifying serializer options

Serializers can be specified at a route level by with the serializer option. A serializer can be specified by passing the the serializer class or the serializer name. The following are equivalent:

get "/home", :serializer => HomeSerializer
...
get "/home", :serializer => "home"
...
get "/home", :serializer => :home
...

You can also set a serializer at the namespace level. This serializer can/will be overriden if a serilizer is also specified on the route.

namespace 'foo', :serializer => :bar do
  get "/" do
    # will use "bar" serializer
  end

  get "/home", :serializer => :home do
    # will use "home" serializer
  end
end

Other standard options for ActiveModel::Serializers can be provided at either the namespace or route level with the same overriding behavior.

get "/home", :root => 'world', :each_serializer => :fancy_home
...

Example

class User < ActiveRecord::Base
  attr_accessor :first_name, :last_name, :password, :email
end

class UserSerializer < ActiveModel::Serializer
  attributes :first_name, :last_name
end

class API < Grape::API
  get("/home") do
    User.new({first_name: 'JR', last_name: 'HE', email: 'contact@jrhe.co.uk'})
  end
end

API.new.get "/home" # => '{:user=>{:first_name=>"JR", :last_name=>"HE"}}'

Rspec

See "Writing Tests" in https://github.com/intridea/grape.

Enjoy :)

Contributing

  1. Fork it
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Added some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create new Pull Request

Thanks to

The developers and maintainers of: active_model_serializers Grape!

Structured and based upon Grape.