mirror of
https://github.com/ditkrg/active_model_serializers.git
synced 2026-01-23 06:16:50 +00:00
NOTE: the two gems are generating different JSON
Essential difference
- Including a user's posts's comments differ in that
the included resource's relationship
is `meta: {included: false}` instead of `data: { id: 20, type: :posts}`
```diff
id: 39,
type: comments
attributes: { author: me, comment: wazzup }
relationships: {
post: {
- data: { id: 20, type: posts }
+ meta: { included: false }
}
}
}
```
Unimportant differences:
- data: { type, id } vs. data: { id, type }
Complete diff
```bash
diff --side-by-side support/json_document-ams.json support/json_document-jsonapi_rb.json
```
```diff
{ {
"data": { "data": {
"id": "1", "id": "1",
"type": "users", "type": "users",
"attributes": { "attributes": {
"first_name": "Diana", "first_name": "Diana",
"last_name": "Prince", "last_name": "Prince",
"birthday": "2017-07-01 05:00:00 UTC", "birthday": "2017-07-01 05:00:00 UTC",
"created_at": "2017-07-01 05:00:00 UTC", "created_at": "2017-07-01 05:00:00 UTC",
"updated_at": "2017-07-01 05:00:00 UTC" "updated_at": "2017-07-01 05:00:00 UTC"
}, },
"relationships": { "relationships": {
"posts": { "posts": {
"data": [ "data": [
{ {
"id": "1", | "type": "posts",
"type": "posts" | "id": "1"
}, },
{ {
"id": "2", | "type": "posts",
"type": "posts" | "id": "2"
}, },
{ {
"id": "3", | "type": "posts",
"type": "posts" | "id": "3"
}, },
{ {
"id": "4", | "type": "posts",
"type": "posts" | "id": "4"
}, },
{ {
"id": "5", | "type": "posts",
"type": "posts" | "id": "5"
}, },
{ {
"id": "6", | "type": "posts",
"type": "posts" | "id": "6"
}, },
{ {
"id": "7", | "type": "posts",
"type": "posts" | "id": "7"
}, },
{ {
"id": "8", | "type": "posts",
"type": "posts" | "id": "8"
}, },
{ {
"id": "9", | "type": "posts",
"type": "posts" | "id": "9"
}, },
{ {
"id": "10", | "type": "posts",
"type": "posts" | "id": "10"
}, },
{ {
"id": "11", | "type": "posts",
"type": "posts" | "id": "11"
}, },
{ {
"id": "12", | "type": "posts",
"type": "posts" | "id": "12"
}, },
{ {
"id": "13", | "type": "posts",
"type": "posts" | "id": "13"
}, },
{ {
"id": "14", | "type": "posts",
"type": "posts" | "id": "14"
}, },
{ {
"id": "15", | "type": "posts",
"type": "posts" | "id": "15"
}, },
{ {
"id": "16", | "type": "posts",
"type": "posts" | "id": "16"
}, },
{ {
"id": "17", | "type": "posts",
"type": "posts" | "id": "17"
}, },
{ {
"id": "18", | "type": "posts",
"type": "posts" | "id": "18"
}, },
{ {
"id": "19", | "type": "posts",
"type": "posts" | "id": "19"
}, },
{ {
"id": "20", | "type": "posts",
"type": "posts" | "id": "20"
} }
] ]
} }
} }
}, },
"included": [ "included": [
{ {
"id": "1", "id": "1",
"type": "posts", "type": "posts",
"attributes": { "attributes": {
"title": "Some Post", "title": "Some Post",
"body": "awesome content", "body": "awesome content",
"created_at": "2017-07-01 05:00:00 UTC", "created_at": "2017-07-01 05:00:00 UTC",
"updated_at": "2017-07-01 05:00:00 UTC" "updated_at": "2017-07-01 05:00:00 UTC"
}, },
"relationships": { "relationships": {
"user": { "user": {
"data": { | "meta": {
"id": "1", | "included": false
"type": "users" <
} }
}, },
"comments": { "comments": {
"data": [ "data": [
{ {
"id": "1", | "type": "comments",
"type": "comments" | "id": "1"
}, },
{ {
"id": "2", | "type": "comments",
"type": "comments" | "id": "2"
} }
] ]
} }
} }
}, },
{ {
"id": "1", | "id": "2",
"type": "comments", | "type": "posts",
"attributes": { "attributes": {
"author": "me", | "title": "Some Post",
"comment": "nice blog" | "body": "awesome content",
> "created_at": "2017-07-01 05:00:00 UTC",
> "updated_at": "2017-07-01 05:00:00 UTC"
}, },
"relationships": { "relationships": {
"post": { | "user": {
"data": { | "meta": {
"id": "1", | "included": false
"type": "posts" <
} }
> },
> "comments": {
> "data": [
> {
> "type": "comments",
> "id": "3"
> },
> {
> "type": "comments",
> "id": "4"
> }
> ]
} }
} }
}, },
{ {
"id": "2", | "id": "3",
"type": "comments", | "type": "posts",
"attributes": { "attributes": {
"author": "me", | "title": "Some Post",
"comment": "nice blog" | "body": "awesome content",
> "created_at": "2017-07-01 05:00:00 UTC",
> "updated_at": "2017-07-01 05:00:00 UTC"
}, },
"relationships": { "relationships": {
"post": { | "user": {
"data": { | "meta": {
"id": "1", | "included": false
"type": "posts" <
} }
> },
> "comments": {
> "data": [
> {
> "type": "comments",
> "id": "5"
> },
> {
> "type": "comments",
> "id": "6"
> }
> ]
} }
} }
}, },
{ {
"id": "2", | "id": "4",
"type": "posts", "type": "posts",
"attributes": { "attributes": {
"title": "Some Post", "title": "Some Post",
"body": "awesome content", "body": "awesome content",
"created_at": "2017-07-01 05:00:00 UTC", "created_at": "2017-07-01 05:00:00 UTC",
"updated_at": "2017-07-01 05:00:00 UTC" "updated_at": "2017-07-01 05:00:00 UTC"
}, },
"relationships": { "relationships": {
"user": { "user": {
"data": { | "meta": {
"id": "1", | "included": false
"type": "users" <
} }
}, },
"comments": { "comments": {
"data": [ "data": [
{ {
"id": "3", | "type": "comments",
"type": "comments" | "id": "7"
}, },
{ {
"id": "4", | "type": "comments",
"type": "comments" | "id": "8"
} }
] ]
} }
} }
}, },
{ {
"id": "3", | "id": "5",
"type": "comments", | "type": "posts",
"attributes": { "attributes": {
"author": "me", | "title": "Some Post",
"comment": "nice blog" | "body": "awesome content",
> "created_at": "2017-07-01 05:00:00 UTC",
> "updated_at": "2017-07-01 05:00:00 UTC"
}, },
"relationships": { "relationships": {
"post": { | "user": {
"data": { | "meta": {
"id": "2", | "included": false
"type": "posts" <
} }
> },
> "comments": {
> "data": [
> {
> "type": "comments",
> "id": "9"
> },
> {
> "type": "comments",
> "id": "10"
> }
> ]
} }
} }
}, },
{ {
"id": "4", | "id": "6",
"type": "comments", | "type": "posts",
"attributes": { "attributes": {
"author": "me", | "title": "Some Post",
"comment": "nice blog" | "body": "awesome content",
> "created_at": "2017-07-01 05:00:00 UTC",
> "updated_at": "2017-07-01 05:00:00 UTC"
}, },
"relationships": { "relationships": {
"post": { | "user": {
"data": { | "meta": {
"id": "2", | "included": false
"type": "posts" <
} }
> },
> "comments": {
> "data": [
> {
> "type": "comments",
> "id": "11"
> },
> {
> "type": "comments",
> "id": "12"
> }
> ]
} }
} }
}, },
{ {
"id": "3", | "id": "7",
"type": "posts", "type": "posts",
"attributes": { "attributes": {
"title": "Some Post", "title": "Some Post",
"body": "awesome content", "body": "awesome content",
"created_at": "2017-07-01 05:00:00 UTC", "created_at": "2017-07-01 05:00:00 UTC",
"updated_at": "2017-07-01 05:00:00 UTC" "updated_at": "2017-07-01 05:00:00 UTC"
}, },
"relationships": { "relationships": {
"user": { "user": {
"data": { | "meta": {
"id": "1", | "included": false
"type": "users" <
} }
}, },
"comments": { "comments": {
"data": [ "data": [
{ {
"id": "5", | "type": "comments",
"type": "comments" | "id": "13"
}, },
{ {
"id": "6", | "type": "comments",
"type": "comments" | "id": "14"
} }
] ]
} }
} }
}, },
{ {
"id": "5", | "id": "8",
"type": "comments", | "type": "posts",
"attributes": { "attributes": {
"author": "me", | "title": "Some Post",
"comment": "nice blog" | "body": "awesome content",
> "created_at": "2017-07-01 05:00:00 UTC",
> "updated_at": "2017-07-01 05:00:00 UTC"
}, },
"relationships": { "relationships": {
"post": { | "user": {
"data": { | "meta": {
"id": "3", | "included": false
"type": "posts" <
} }
> },
> "comments": {
> "data": [
> {
> "type": "comments",
> "id": "15"
> },
> {
> "type": "comments",
> "id": "16"
> }
> ]
} }
} }
}, },
{ {
"id": "6", | "id": "9",
"type": "comments", | "type": "posts",
"attributes": { "attributes": {
"author": "me", | "title": "Some Post",
"comment": "nice blog" | "body": "awesome content",
> "created_at": "2017-07-01 05:00:00 UTC",
> "updated_at": "2017-07-01 05:00:00 UTC"
}, },
"relationships": { "relationships": {
"post": { | "user": {
"data": { | "meta": {
"id": "3", | "included": false
"type": "posts" <
} }
> },
> "comments": {
> "data": [
> {
> "type": "comments",
> "id": "17"
> },
> {
> "type": "comments",
> "id": "18"
> }
> ]
} }
} }
}, },
{ {
"id": "4", | "id": "10",
"type": "posts", "type": "posts",
"attributes": { "attributes": {
"title": "Some Post", "title": "Some Post",
"body": "awesome content", "body": "awesome content",
"created_at": "2017-07-01 05:00:00 UTC", "created_at": "2017-07-01 05:00:00 UTC",
"updated_at": "2017-07-01 05:00:00 UTC" "updated_at": "2017-07-01 05:00:00 UTC"
}, },
"relationships": { "relationships": {
"user": { "user": {
"data": { | "meta": {
"id": "1", | "included": false
"type": "users" <
} }
}, },
"comments": { "comments": {
"data": [ "data": [
{ {
"id": "7", | "type": "comments",
"type": "comments" | "id": "19"
}, },
{ {
"id": "8", | "type": "comments",
"type": "comments" | "id": "20"
} }
] ]
} }
} }
}, },
{ {
"id": "7", | "id": "11",
"type": "comments", | "type": "posts",
"attributes": { "attributes": {
"author": "me", | "title": "Some Post",
"comment": "nice blog" | "body": "awesome content",
> "created_at": "2017-07-01 05:00:00 UTC",
> "updated_at": "2017-07-01 05:00:00 UTC"
}, },
"relationships": { "relationships": {
"post": { | "user": {
"data": { | "meta": {
"id": "4", | "included": false
"type": "posts" <
} }
> },
> "comments": {
> "data": [
> {
> "type": "comments",
> "id": "21"
> },
> {
> "type": "comments",
> "id": "22"
> }
> ]
} }
} }
}, },
{ {
"id": "8", | "id": "12",
"type": "comments", | "type": "posts",
"attributes": { "attributes": {
"author": "me", | "title": "Some Post",
"comment": "nice blog" | "body": "awesome content",
> "created_at": "2017-07-01 05:00:00 UTC",
> "updated_at": "2017-07-01 05:00:00 UTC"
}, },
"relationships": { "relationships": {
"post": { | "user": {
"data": { | "meta": {
"id": "4", | "included": false
"type": "posts" <
} }
> },
> "comments": {
> "data": [
> {
> "type": "comments",
> "id": "23"
> },
> {
> "type": "comments",
> "id": "24"
> }
> ]
} }
} }
}, },
{ {
"id": "5", | "id": "13",
"type": "posts", "type": "posts",
"attributes": { "attributes": {
"title": "Some Post", "title": "Some Post",
"body": "awesome content", "body": "awesome content",
"created_at": "2017-07-01 05:00:00 UTC", "created_at": "2017-07-01 05:00:00 UTC",
"updated_at": "2017-07-01 05:00:00 UTC" "updated_at": "2017-07-01 05:00:00 UTC"
}, },
"relationships": { "relationships": {
"user": { "user": {
"data": { | "meta": {
"id": "1", | "included": false
"type": "users" <
} }
}, },
"comments": { "comments": {
"data": [ "data": [
{ {
"id": "9", | "type": "comments",
"type": "comments" | "id": "25"
}, },
{ {
"id": "10", | "type": "comments",
"type": "comments" | "id": "26"
} }
] ]
} }
} }
}, },
{ {
"id": "9", | "id": "14",
"type": "comments", | "type": "posts",
"attributes": { "attributes": {
"author": "me", | "title": "Some Post",
"comment": "nice blog" | "body": "awesome content",
> "created_at": "2017-07-01 05:00:00 UTC",
> "updated_at": "2017-07-01 05:00:00 UTC"
}, },
"relationships": { "relationships": {
"post": { | "user": {
"data": { | "meta": {
"id": "5", | "included": false
"type": "posts" <
} }
> },
> "comments": {
> "data": [
> {
> "type": "comments",
> "id": "27"
> },
> {
> "type": "comments",
> "id": "28"
> }
> ]
} }
} }
}, },
{ {
"id": "10", | "id": "15",
"type": "comments", | "type": "posts",
"attributes": { "attributes": {
"author": "me", | "title": "Some Post",
"comment": "nice blog" | "body": "awesome content",
> "created_at": "2017-07-01 05:00:00 UTC",
> "updated_at": "2017-07-01 05:00:00 UTC"
}, },
"relationships": { "relationships": {
"post": { | "user": {
"data": { | "meta": {
"id": "5", | "included": false
"type": "posts" <
} }
> },
> "comments": {
> "data": [
> {
> "type": "comments",
> "id": "29"
> },
> {
> "type": "comments",
> "id": "30"
> }
> ]
} }
} }
}, },
{ {
"id": "6", | "id": "16",
"type": "posts", "type": "posts",
"attributes": { "attributes": {
"title": "Some Post", "title": "Some Post",
"body": "awesome content", "body": "awesome content",
"created_at": "2017-07-01 05:00:00 UTC", "created_at": "2017-07-01 05:00:00 UTC",
"updated_at": "2017-07-01 05:00:00 UTC" "updated_at": "2017-07-01 05:00:00 UTC"
}, },
"relationships": { "relationships": {
"user": { "user": {
"data": { | "meta": {
"id": "1", | "included": false
"type": "users" <
} }
}, },
"comments": { "comments": {
"data": [ "data": [
{ {
"id": "11", | "type": "comments",
"type": "comments" | "id": "31"
}, },
{ {
"id": "12", | "type": "comments",
"type": "comments" | "id": "32"
} }
] ]
} }
} }
}, },
{ {
"id": "11", | "id": "17",
"type": "comments", | "type": "posts",
"attributes": { "attributes": {
"author": "me", | "title": "Some Post",
"comment": "nice blog" | "body": "awesome content",
> "created_at": "2017-07-01 05:00:00 UTC",
> "updated_at": "2017-07-01 05:00:00 UTC"
}, },
"relationships": { "relationships": {
"post": { | "user": {
"data": { | "meta": {
"id": "6", | "included": false
"type": "posts" <
} }
> },
> "comments": {
> "data": [
> {
> "type": "comments",
> "id": "33"
> },
> {
> "type": "comments",
> "id": "34"
> }
> ]
} }
} }
}, },
{ {
"id": "12", | "id": "18",
"type": "comments", | "type": "posts",
"attributes": { "attributes": {
"author": "me", | "title": "Some Post",
"comment": "nice blog" | "body": "awesome content",
> "created_at": "2017-07-01 05:00:00 UTC",
> "updated_at": "2017-07-01 05:00:00 UTC"
}, },
"relationships": { "relationships": {
"post": { | "user": {
"data": { | "meta": {
"id": "6", | "included": false
"type": "posts" <
} }
> },
> "comments": {
> "data": [
> {
> "type": "comments",
> "id": "35"
> },
> {
> "type": "comments",
> "id": "36"
> }
> ]
} }
} }
}, },
{ {
"id": "7", | "id": "19",
"type": "posts", "type": "posts",
"attributes": { "attributes": {
"title": "Some Post", "title": "Some Post",
"body": "awesome content", "body": "awesome content",
"created_at": "2017-07-01 05:00:00 UTC", "created_at": "2017-07-01 05:00:00 UTC",
"updated_at": "2017-07-01 05:00:00 UTC" "updated_at": "2017-07-01 05:00:00 UTC"
}, },
"relationships": { "relationships": {
"user": { "user": {
"data": { | "meta": {
"id": "1", | "included": false
"type": "users" <
} }
}, },
"comments": { "comments": {
"data": [ "data": [
{ {
"id": "13", | "type": "comments",
"type": "comments" | "id": "37"
}, },
{ {
"id": "14", | "type": "comments",
"type": "comments" | "id": "38"
} }
] ]
} }
} }
}, },
{ {
"id": "13", | "id": "20",
"type": "comments", | "type": "posts",
"attributes": { "attributes": {
"author": "me", | "title": "Some Post",
"comment": "nice blog" | "body": "awesome content",
> "created_at": "2017-07-01 05:00:00 UTC",
> "updated_at": "2017-07-01 05:00:00 UTC"
}, },
"relationships": { "relationships": {
"post": { | "user": {
"data": { | "meta": {
"id": "7", | "included": false
"type": "posts" <
} }
> },
> "comments": {
> "data": [
> {
> "type": "comments",
> "id": "39"
> },
> {
> "type": "comments",
> "id": "40"
> }
> ]
} }
} }
}, },
{ {
"id": "14", | "id": "1",
"type": "comments", "type": "comments",
"attributes": { "attributes": {
"author": "me", "author": "me",
"comment": "nice blog" "comment": "nice blog"
}, },
"relationships": { "relationships": {
"post": { "post": {
"data": { | "meta": {
"id": "7", | "included": false
"type": "posts" <
} }
} }
} }
}, },
{ {
"id": "8", | "id": "2",
"type": "posts", | "type": "comments",
"attributes": { "attributes": {
"title": "Some Post", | "author": "me",
"body": "awesome content", | "comment": "nice blog"
"created_at": "2017-07-01 05:00:00 UTC", <
"updated_at": "2017-07-01 05:00:00 UTC" <
}, },
"relationships": { "relationships": {
"user": { | "post": {
"data": { | "meta": {
"id": "1", | "included": false
"type": "users" <
} }
}, <
"comments": { <
"data": [ <
{ <
"id": "15", <
"type": "comments" <
}, <
{ <
"id": "16", <
"type": "comments" <
} <
] <
} }
} }
}, },
{ {
"id": "15", | "id": "3",
"type": "comments", "type": "comments",
"attributes": { "attributes": {
"author": "me", "author": "me",
"comment": "nice blog" "comment": "nice blog"
}, },
"relationships": { "relationships": {
"post": { "post": {
"data": { | "meta": {
"id": "8", | "included": false
"type": "posts" <
} }
} }
} }
}, },
{ {
"id": "16", | "id": "4",
"type": "comments", "type": "comments",
"attributes": { "attributes": {
"author": "me", "author": "me",
"comment": "nice blog" "comment": "nice blog"
}, },
"relationships": { "relationships": {
"post": { "post": {
"data": { | "meta": {
"id": "8", | "included": false
"type": "posts" <
} }
} }
} }
}, },
{ {
"id": "9", | "id": "5",
"type": "posts", | "type": "comments",
"attributes": { "attributes": {
"title": "Some Post", | "author": "me",
"body": "awesome content", | "comment": "nice blog"
"created_at": "2017-07-01 05:00:00 UTC", <
"updated_at": "2017-07-01 05:00:00 UTC" <
}, },
"relationships": { "relationships": {
"user": { | "post": {
"data": { | "meta": {
"id": "1", | "included": false
"type": "users" <
} }
}, <
"comments": { <
"data": [ <
{ <
"id": "17", <
"type": "comments" <
}, <
{ <
"id": "18", <
"type": "comments" <
} <
] <
} }
} }
}, },
{ {
"id": "17", | "id": "6",
"type": "comments", "type": "comments",
"attributes": { "attributes": {
"author": "me", "author": "me",
"comment": "nice blog" "comment": "nice blog"
}, },
"relationships": { "relationships": {
"post": { "post": {
"data": { | "meta": {
"id": "9", | "included": false
"type": "posts" <
} }
} }
} }
}, },
{ {
"id": "18", | "id": "7",
"type": "comments", "type": "comments",
"attributes": { "attributes": {
"author": "me", "author": "me",
"comment": "nice blog" "comment": "nice blog"
}, },
"relationships": { "relationships": {
"post": { "post": {
"data": { | "meta": {
"id": "9", | "included": false
"type": "posts" <
} }
} }
} }
}, },
{ {
"id": "10", | "id": "8",
"type": "posts", | "type": "comments",
"attributes": { "attributes": {
"title": "Some Post", | "author": "me",
"body": "awesome content", | "comment": "nice blog"
"created_at": "2017-07-01 05:00:00 UTC", <
"updated_at": "2017-07-01 05:00:00 UTC" <
}, },
"relationships": { "relationships": {
"user": { | "post": {
"data": { | "meta": {
"id": "1", | "included": false
"type": "users" <
} }
}, <
"comments": { <
"data": [ <
{ <
"id": "19", <
"type": "comments" <
}, <
{ <
"id": "20", <
"type": "comments" <
} <
] <
} }
} }
}, },
{ {
"id": "19", | "id": "9",
"type": "comments", "type": "comments",
"attributes": { "attributes": {
"author": "me", "author": "me",
"comment": "nice blog" "comment": "nice blog"
}, },
"relationships": { "relationships": {
"post": { "post": {
"data": { | "meta": {
"id": "10", | "included": false
"type": "posts" <
} }
} }
} }
}, },
{ {
"id": "20", | "id": "10",
"type": "comments", "type": "comments",
"attributes": { "attributes": {
"author": "me", "author": "me",
"comment": "nice blog" "comment": "nice blog"
}, },
"relationships": { "relationships": {
"post": { "post": {
"data": { | "meta": {
"id": "10", | "included": false
"type": "posts" <
} }
} }
} }
}, },
{ {
"id": "11", "id": "11",
"type": "posts", | "type": "comments",
"attributes": { "attributes": {
"title": "Some Post", | "author": "me",
"body": "awesome content", | "comment": "nice blog"
"created_at": "2017-07-01 05:00:00 UTC", <
"updated_at": "2017-07-01 05:00:00 UTC" <
}, },
"relationships": { "relationships": {
"user": { | "post": {
"data": { | "meta": {
"id": "1", | "included": false
"type": "users" <
} }
}, <
"comments": { <
"data": [ <
{ <
"id": "21", <
"type": "comments" <
}, <
{ <
"id": "22", <
"type": "comments" <
} <
] <
} }
} }
}, },
{ {
"id": "21", | "id": "12",
"type": "comments", "type": "comments",
"attributes": { "attributes": {
"author": "me", "author": "me",
"comment": "nice blog" "comment": "nice blog"
}, },
"relationships": { "relationships": {
"post": { "post": {
"data": { | "meta": {
"id": "11", | "included": false
"type": "posts" <
} }
} }
} }
}, },
{ {
"id": "22", | "id": "13",
"type": "comments", "type": "comments",
"attributes": { "attributes": {
"author": "me", "author": "me",
"comment": "nice blog" "comment": "nice blog"
}, },
"relationships": { "relationships": {
"post": { "post": {
"data": { | "meta": {
"id": "11", | "included": false
"type": "posts" <
} }
} }
} }
}, },
{ {
"id": "12", | "id": "14",
"type": "posts", | "type": "comments",
"attributes": { "attributes": {
"title": "Some Post", | "author": "me",
"body": "awesome content", | "comment": "nice blog"
"created_at": "2017-07-01 05:00:00 UTC", <
"updated_at": "2017-07-01 05:00:00 UTC" <
}, },
"relationships": { "relationships": {
"user": { | "post": {
"data": { | "meta": {
"id": "1", | "included": false
"type": "users" <
} }
}, <
"comments": { <
"data": [ <
{ <
"id": "23", <
"type": "comments" <
}, <
{ <
"id": "24", <
"type": "comments" <
} <
] <
} }
} }
}, },
{ {
"id": "23", | "id": "15",
"type": "comments", "type": "comments",
"attributes": { "attributes": {
"author": "me", "author": "me",
"comment": "nice blog" "comment": "nice blog"
}, },
"relationships": { "relationships": {
"post": { "post": {
"data": { | "meta": {
"id": "12", | "included": false
"type": "posts" <
} }
} }
} }
}, },
{ {
"id": "24", | "id": "16",
"type": "comments", "type": "comments",
"attributes": { "attributes": {
"author": "me", "author": "me",
"comment": "nice blog" "comment": "nice blog"
}, },
"relationships": { "relationships": {
"post": { "post": {
"data": { | "meta": {
"id": "12", | "included": false
"type": "posts" <
} }
} }
} }
}, },
{ {
"id": "13", | "id": "17",
"type": "posts", | "type": "comments",
"attributes": { "attributes": {
"title": "Some Post", | "author": "me",
"body": "awesome content", | "comment": "nice blog"
"created_at": "2017-07-01 05:00:00 UTC", <
"updated_at": "2017-07-01 05:00:00 UTC" <
}, },
"relationships": { "relationships": {
"user": { | "post": {
"data": { | "meta": {
"id": "1", | "included": false
"type": "users" <
} }
}, <
"comments": { <
"data": [ <
{ <
"id": "25", <
"type": "comments" <
}, <
{ <
"id": "26", <
"type": "comments" <
} <
] <
} }
} }
}, },
{ {
"id": "25", | "id": "18",
"type": "comments", "type": "comments",
"attributes": { "attributes": {
"author": "me", "author": "me",
"comment": "nice blog" "comment": "nice blog"
}, },
"relationships": { "relationships": {
"post": { "post": {
"data": { | "meta": {
"id": "13", | "included": false
"type": "posts" <
} }
} }
} }
}, },
{ {
"id": "26", | "id": "19",
"type": "comments", "type": "comments",
"attributes": { "attributes": {
"author": "me", "author": "me",
"comment": "nice blog" "comment": "nice blog"
}, },
"relationships": { "relationships": {
"post": { "post": {
"data": { | "meta": {
"id": "13", | "included": false
"type": "posts" <
} }
} }
} }
}, },
{ {
"id": "14", | "id": "20",
"type": "posts", | "type": "comments",
"attributes": { "attributes": {
"title": "Some Post", | "author": "me",
"body": "awesome content", | "comment": "nice blog"
"created_at": "2017-07-01 05:00:00 UTC", <
"updated_at": "2017-07-01 05:00:00 UTC" <
}, },
"relationships": { "relationships": {
"user": { | "post": {
"data": { | "meta": {
"id": "1", | "included": false
"type": "users" <
} }
}, <
"comments": { <
"data": [ <
{ <
"id": "27", <
"type": "comments" <
}, <
{ <
"id": "28", <
"type": "comments" <
} <
] <
} }
} }
}, },
{ {
"id": "27", | "id": "21",
"type": "comments", "type": "comments",
"attributes": { "attributes": {
"author": "me", "author": "me",
"comment": "nice blog" "comment": "nice blog"
}, },
"relationships": { "relationships": {
"post": { "post": {
"data": { | "meta": {
"id": "14", | "included": false
"type": "posts" <
} }
} }
} }
}, },
{ {
"id": "28", | "id": "22",
"type": "comments", "type": "comments",
"attributes": { "attributes": {
"author": "me", "author": "me",
"comment": "nice blog" "comment": "nice blog"
}, },
"relationships": { "relationships": {
"post": { "post": {
"data": { | "meta": {
"id": "14", | "included": false
"type": "posts" <
} }
} }
} }
}, },
{ {
"id": "15", | "id": "23",
"type": "posts", | "type": "comments",
"attributes": { "attributes": {
"title": "Some Post", | "author": "me",
"body": "awesome content", | "comment": "nice blog"
"created_at": "2017-07-01 05:00:00 UTC", <
"updated_at": "2017-07-01 05:00:00 UTC" <
}, },
"relationships": { "relationships": {
"user": { | "post": {
"data": { | "meta": {
"id": "1", | "included": false
"type": "users" <
} }
}, <
"comments": { <
"data": [ <
{ <
"id": "29", <
"type": "comments" <
}, <
{ <
"id": "30", <
"type": "comments" <
} <
] <
} }
} }
}, },
{ {
"id": "29", | "id": "24",
"type": "comments", "type": "comments",
"attributes": { "attributes": {
"author": "me", "author": "me",
"comment": "nice blog" "comment": "nice blog"
}, },
"relationships": { "relationships": {
"post": { "post": {
"data": { | "meta": {
"id": "15", | "included": false
"type": "posts" <
} }
} }
} }
}, },
{ {
"id": "30", | "id": "25",
"type": "comments", "type": "comments",
"attributes": { "attributes": {
"author": "me", "author": "me",
"comment": "nice blog" "comment": "nice blog"
}, },
"relationships": { "relationships": {
"post": { "post": {
"data": { | "meta": {
"id": "15", | "included": false
"type": "posts" <
} }
} }
} }
}, },
{ {
"id": "16", | "id": "26",
"type": "posts", | "type": "comments",
"attributes": { "attributes": {
"title": "Some Post", | "author": "me",
"body": "awesome content", | "comment": "nice blog"
"created_at": "2017-07-01 05:00:00 UTC", <
"updated_at": "2017-07-01 05:00:00 UTC" <
}, },
"relationships": { "relationships": {
"user": { | "post": {
"data": { | "meta": {
"id": "1", | "included": false
"type": "users" <
} }
}, <
"comments": { <
"data": [ <
{ <
"id": "31", <
"type": "comments" <
}, <
{ <
"id": "32", <
"type": "comments" <
} <
] <
} }
} }
}, },
{ {
"id": "31", | "id": "27",
"type": "comments", "type": "comments",
"attributes": { "attributes": {
"author": "me", "author": "me",
"comment": "nice blog" "comment": "nice blog"
}, },
"relationships": { "relationships": {
"post": { "post": {
"data": { | "meta": {
"id": "16", | "included": false
"type": "posts" <
} }
} }
} }
}, },
{ {
"id": "32", | "id": "28",
"type": "comments", "type": "comments",
"attributes": { "attributes": {
"author": "me", "author": "me",
"comment": "nice blog" "comment": "nice blog"
}, },
"relationships": { "relationships": {
"post": { "post": {
"data": { | "meta": {
"id": "16", | "included": false
"type": "posts" <
} }
} }
} }
}, },
{ {
"id": "17", | "id": "29",
"type": "posts", | "type": "comments",
"attributes": { "attributes": {
"title": "Some Post", | "author": "me",
"body": "awesome content", | "comment": "nice blog"
"created_at": "2017-07-01 05:00:00 UTC", <
"updated_at": "2017-07-01 05:00:00 UTC" <
}, },
"relationships": { "relationships": {
"user": { | "post": {
"data": { | "meta": {
"id": "1", | "included": false
"type": "users" <
} }
}, <
"comments": { <
"data": [ <
{ <
"id": "33", <
"type": "comments" <
}, <
{ <
"id": "34", <
"type": "comments" <
} <
] <
} }
} }
}, },
{ {
"id": "33", | "id": "30",
"type": "comments", "type": "comments",
"attributes": { "attributes": {
"author": "me", "author": "me",
"comment": "nice blog" "comment": "nice blog"
}, },
"relationships": { "relationships": {
"post": { "post": {
"data": { | "meta": {
"id": "17", | "included": false
"type": "posts" <
} }
} }
} }
}, },
{ {
"id": "34", | "id": "31",
"type": "comments", "type": "comments",
"attributes": { "attributes": {
"author": "me", "author": "me",
"comment": "nice blog" "comment": "nice blog"
}, },
"relationships": { "relationships": {
"post": { "post": {
"data": { | "meta": {
"id": "17", | "included": false
"type": "posts" <
} }
} }
} }
}, },
{ {
"id": "18", | "id": "32",
"type": "posts", | "type": "comments",
"attributes": { "attributes": {
"title": "Some Post", | "author": "me",
"body": "awesome content", | "comment": "nice blog"
"created_at": "2017-07-01 05:00:00 UTC", <
"updated_at": "2017-07-01 05:00:00 UTC" <
}, },
"relationships": { "relationships": {
"user": { | "post": {
"data": { | "meta": {
"id": "1", | "included": false
"type": "users" <
} }
}, <
"comments": { <
"data": [ <
{ <
"id": "35", <
"type": "comments" <
}, <
{ <
"id": "36", <
"type": "comments" <
} <
] <
} }
} }
}, },
{ {
"id": "35", | "id": "33",
"type": "comments", "type": "comments",
"attributes": { "attributes": {
"author": "me", "author": "me",
"comment": "nice blog" "comment": "nice blog"
}, },
"relationships": { "relationships": {
"post": { "post": {
"data": { | "meta": {
"id": "18", | "included": false
"type": "posts" <
} }
} }
} }
}, },
{ {
"id": "36", | "id": "34",
"type": "comments", "type": "comments",
"attributes": { "attributes": {
"author": "me", "author": "me",
"comment": "nice blog" "comment": "nice blog"
}, },
"relationships": { "relationships": {
"post": { "post": {
"data": { | "meta": {
"id": "18", | "included": false
"type": "posts" <
} }
} }
} }
}, },
{ {
"id": "19", | "id": "35",
"type": "posts", | "type": "comments",
"attributes": { "attributes": {
"title": "Some Post", | "author": "me",
"body": "awesome content", | "comment": "nice blog"
"created_at": "2017-07-01 05:00:00 UTC", <
"updated_at": "2017-07-01 05:00:00 UTC" <
}, },
"relationships": { "relationships": {
"user": { | "post": {
"data": { | "meta": {
"id": "1", | "included": false
"type": "users" <
} }
}, <
"comments": { <
"data": [ <
{ <
"id": "37", <
"type": "comments" <
}, <
{ <
"id": "38", <
"type": "comments" <
} <
] <
} }
} }
}, },
{ {
"id": "37", | "id": "36",
"type": "comments", "type": "comments",
"attributes": { "attributes": {
"author": "me", "author": "me",
"comment": "nice blog" "comment": "nice blog"
}, },
"relationships": { "relationships": {
"post": { "post": {
"data": { | "meta": {
"id": "19", | "included": false
"type": "posts" <
} }
} }
} }
}, },
{ {
"id": "38", | "id": "37",
"type": "comments", "type": "comments",
"attributes": { "attributes": {
"author": "me", "author": "me",
"comment": "nice blog" "comment": "nice blog"
}, },
"relationships": { "relationships": {
"post": { "post": {
"data": { | "meta": {
"id": "19", | "included": false
"type": "posts" <
} }
} }
} }
}, },
{ {
"id": "20", | "id": "38",
"type": "posts", | "type": "comments",
"attributes": { "attributes": {
"title": "Some Post", | "author": "me",
"body": "awesome content", | "comment": "nice blog"
"created_at": "2017-07-01 05:00:00 UTC", <
"updated_at": "2017-07-01 05:00:00 UTC" <
}, },
"relationships": { "relationships": {
"user": { | "post": {
"data": { | "meta": {
"id": "1", | "included": false
"type": "users" <
} }
}, <
"comments": { <
"data": [ <
{ <
"id": "39", <
"type": "comments" <
}, <
{ <
"id": "40", <
"type": "comments" <
} <
] <
} }
} }
}, },
{ {
"id": "39", "id": "39",
"type": "comments", "type": "comments",
"attributes": { "attributes": {
"author": "me", "author": "me",
"comment": "nice blog" "comment": "nice blog"
}, },
"relationships": { "relationships": {
"post": { "post": {
"data": { | "meta": {
"id": "20", | "included": false
"type": "posts" <
} }
} }
} }
}, },
{ {
"id": "40", "id": "40",
"type": "comments", "type": "comments",
"attributes": { "attributes": {
"author": "me", "author": "me",
"comment": "nice blog" "comment": "nice blog"
}, },
"relationships": { "relationships": {
"post": { "post": {
"data": { | "meta": {
"id": "20", | "included": false
"type": "posts" <
} }
} }
} }
} }
] ]
} }
```
100 lines
3.1 KiB
Ruby
100 lines
3.1 KiB
Ruby
module BenchHelper
|
|
module_function
|
|
|
|
def clear_data
|
|
Comment.delete_all
|
|
Post.delete_all
|
|
User.delete_all
|
|
end
|
|
|
|
def seed_data
|
|
data_config = {
|
|
comments_per_post: 2,
|
|
posts: 20
|
|
}
|
|
|
|
anchor_time = Time.new(2017,7,1).utc
|
|
user = User.create(first_name: 'Diana', last_name: 'Prince', birthday: anchor_time, created_at: anchor_time, updated_at: anchor_time)
|
|
|
|
data_config[:posts].times do
|
|
post = Post.create(user_id: user.id, title: 'Some Post', body: 'awesome content', created_at: anchor_time, updated_at: anchor_time)
|
|
data_config[:comments_per_post].times do
|
|
Comment.create(author: 'me', comment: 'nice blog', post_id: post.id, created_at: anchor_time, updated_at: anchor_time)
|
|
end
|
|
end
|
|
end
|
|
|
|
def validate_render(render_gem)
|
|
expected_json_file = File.join("support", "json_document-#{render_gem}.json")
|
|
json_document = test_render(render_gem)
|
|
assert_equal_json("[#{render_gem}] :test_render", expected_json_file, json_document)
|
|
json_document = test_manual_eagerload(render_gem)
|
|
assert_equal_json("[#{render_gem}] :test_manual_eagerload", expected_json_file, json_document)
|
|
end
|
|
|
|
require "fileutils"
|
|
def assert_equal_json(description, expected_json_file, actual_json_document)
|
|
# 1. in tmp/
|
|
temp_dir = "tmp"
|
|
FileUtils.mkdir_p(temp_dir)
|
|
# 2. write pretty actual json doc
|
|
actual_json_file = File.join(temp_dir, "actual--#{File.basename(expected_json_file)}")
|
|
actual_json_document = JSON.pretty_generate(actual_json_document)
|
|
File.write(actual_json_file, actual_json_document)
|
|
# 3. if expected json doc missing, copy actual to expected
|
|
unless File.exist?(expected_json_file)
|
|
FileUtils.cp(actual_json_file, expected_json_file)
|
|
end
|
|
# 4. Check for differences
|
|
cmd = "diff --suppress-common-lines --side-by-side #{expected_json_file} #{actual_json_file}"
|
|
diff = `#{cmd}`.chomp
|
|
# 5. If none, 'true', they are equal
|
|
# else make a full diff for later review
|
|
return true if diff.empty?
|
|
cmd = "diff --side-by-side #{expected_json_file} #{actual_json_file} > #{File.join(temp_dir, "actual--#{File.basename(expected_json_file)}")}.diff"
|
|
system(cmd)
|
|
# 6. abort run, print brief diff
|
|
abort "#{description}. Invalid JSON document.\nDiff:\n#{diff}}"
|
|
end
|
|
|
|
def test_render(render_gem)
|
|
render_data(
|
|
User.first,
|
|
render_gem
|
|
)
|
|
end
|
|
|
|
def test_manual_eagerload(render_gem)
|
|
render_data(
|
|
User.includes(posts: [:comments]).first,
|
|
render_gem
|
|
)
|
|
end
|
|
|
|
# protected
|
|
|
|
def render_data(data, render_gem)
|
|
case render_gem
|
|
when :ams then render_with_ams(data)
|
|
when :jsonapi_rb then render_with_jsonapi_rb(data)
|
|
else fail ArgumentError, "Cannot render unknown gem '#{render_gem.inspect}'"
|
|
end
|
|
end
|
|
|
|
def render_with_ams(data)
|
|
ActiveModelSerializers::SerializableResource.new(
|
|
data,
|
|
include: 'posts.comments',
|
|
adapter: :json_api
|
|
).as_json
|
|
end
|
|
|
|
def render_with_jsonapi_rb(data)
|
|
JSONAPI::Serializable::Renderer.new.render(
|
|
data,
|
|
include: 'posts.comments',
|
|
class: { User: SerializableUser, Post: SerializablePost, Comment: SerializableComment }
|
|
)
|
|
end
|
|
end
|