README.md in conglomerate-0.1.0 vs README.md in conglomerate-0.1.1
- old
+ new
@@ -1,17 +1,24 @@
# Conglomerate
[![Gem Version](https://badge.fury.io/rb/conglomerate.png)](http://badge.fury.io/rb/conglomerate)
+[![Semaphore](https://semaphoreapp.com/api/v1/projects/7b914dac-6aa6-43dd-94a9-53698ef1922a/120842/shields_badge.png
+)](https://semaphoreapp.com/minter/conglomerate)
[![Code Climate](https://codeclimate.com/github/teamsnap/conglomerate.png)](https://codeclimate.com/github/teamsnap/conglomerate)
[![Coverage Status](https://coveralls.io/repos/teamsnap/conglomerate/badge.png?branch=master)](https://coveralls.io/r/teamsnap/conglomerate?branch=master)
[![Dependency Status](https://gemnasium.com/teamsnap/conglomerate.png)](https://gemnasium.com/teamsnap/conglomerate)
[![License](http://img.shields.io/license/MIT.png?color=green)](http://opensource.org/licenses/MIT)
A library to serialize Ruby objects into collection+json.
![conglomerate](http://i.imgur.com/QkKZ0ru.jpg)
+This library focuses just on converting Ruby objects into Collection+JSON. It
+aims to have the simplest format possible when constructing serializers
+specific to Collection+JSON. It also tries to provide all common
+Collection+JSON extensions to make it easy to create your API.
+
## Installation
Add this line to your application's Gemfile:
gem 'conglomerate'
@@ -25,11 +32,92 @@
$ gem install conglomerate
## Usage
```ruby
-# TODO
+# Step 1: Create a serializer
+class TeamSerializer
+ include Conglomerate.serializer
+
+ href { teams_url }
+ item_href { |item| team_url(item.id) }
+
+ attribute :id
+ attribute :name, :template => true
+ attribute :event_ids, :rel => :events { |item| event_url(item.event_ids.join(",")) }
+
+ link :root { root_url }
+
+ query :search, :data => :id { search_teams_url }
+end
+
+# Step 2: Serialize any object
+
+class TeamsController < ApplicationController
+ def index
+ teams = [
+ OpenStruct.new(:id => 1, :name => "Team 01", :event_ids => [1,2,3]),
+ OpenStruct.new(:id => 2, :name => "Team 02", :event_ids => [4,5,6]),
+ ]
+ render :json => TeamSerializer.new(teams, :context => self).serialize
+ end
+end
+
+# Note, context is optional. It allows you to call helper methods such as url helpers easily inside the serializer.
```
+
+```json
+{
+ "collection": {
+ "href": "http://example.com/teams",
+ "items": [
+ {
+ "href": "http://example.com/teams/1",
+ "data": [
+ {"name": "id", "value": 1},
+ {"name": "name", "value": "Team 01"},
+ {"name": "event_ids", "value": [1,2,3]}
+ ],
+ "links": [
+ {"rel": "events", "href": "http://example.com/events/1,2,3"}
+ ]
+ },
+ {
+ "href": "http://example.com/teams/2",
+ "data": [
+ {"name": "id", "value": 2},
+ {"name": "name", "value": "Team 2"},
+ {"name": "event_ids", "value": [4,5,6]}
+ ],
+ "links": [
+ {"rel": "events", "href": "http://example.com/events/4,5,6"}
+ ]
+ }
+ ],
+ "links": [
+ {"rel": "root", "href": "http://example.com"}
+ ],
+ "queries": [
+ {
+ "rel": "search",
+ "href": "http://example.com/teams/search",
+ "data": [
+ {"name": "id", "value": ""}
+ ]
+ }
+ ],
+ "template": {
+ "data": [
+ {"name": "name", "value": ""}
+ ]
+ }
+ }
+}
+```
+
+## Roadmap
+
+- Use more defaults to simplify the creation of serializers.
## Contributing
1. Fork it ( http://github.com/teamsnap/conglomerate/fork )
2. Create your feature branch (`git checkout -b my-new-feature`)