active_model_serializers/benchmarks/serialization_libraries/support/bench_helper.rb
Benjamin Fleischer f8f7935535 Assert no regressions in gem-specific JSON document
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"                                   <
          }                                                               }
        }                                                               }
      }                                                               }
    }                                                               }
  ]                                                               ]
}                                                               }
```
2017-10-13 22:06:42 -05:00

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