Collection+Json Rails
Add Rails specific features to CollectionJson Serializer.
Installation
Add this line to your application's Gemfile:
gem 'collection_json_rails'
And then execute:
$ bundle
Or install it yourself as:
$ gem install collection_json_rails
That's all you need. CollectionJson::Serializer is included ;-)
Usage
You just need to create serializers for your models. Here's an example:
class PostSerializer < CollectionJson::Serializer
items do
attribute :title
attribute :body
end
template :title, :body
end
Responding with Collection+JSON
Now you can respond with Collection+JSON using the regular render:
class PostsController < ApplicationController
include CollectionJson::Rails::Render
def index
@posts = Post.all
render json: @posts, status: :ok
end
end
Accepting templates:
Collection+JSON supports write templates (YEAH!). You can accept them easily by using accept_template! in a similar fashion as you'd use strong parameters.
accept_template! takes one argument: the name of the model (that's what you'd usually pass to require when using strong parameters). Then, you can proceed as usual and whitelist attributes with permit.
Note: Noticed the exclamation mark? This means that accept_template! rewrites
params. Should params[:model] be present, it'd be rewritten with template's
attributes. All other attributes of params are untouched.
class PostsController < ApplicationController
include CollectionJson::Rails::AcceptTemplate
private
def post_params
accept_template!(:post).permit(:title, :body)
end
Generators:
$ rails g cj serializer post title body
# app/serializers/post_serializer.rb
class PostSerializer < CollectionJson::Serializer
items do
attribute :title
attribute :body
end
end
URL helpers
Getting routes in your serializers is easy as shit. Simply pass the method name as a symbol. No need to reference the object.
class PostSerializer < CollectionJson::Serializer
href :posts_url
link dashboard: { href: :dashboard_url }
items do
href :post_url
link comments: { href: :comments_url }
Contributing
Please, all Pull Requests should point to dev branch.