jsonapi-serializers 0.1.1 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c5be9e7db5c661af3677e1ddc65deccbf2e9aa53
4
- data.tar.gz: 27457e4e784106807993d0374de6e131dd890a07
3
+ metadata.gz: a9515dd14ef21eec5f8fdd5011fa7e53d544c844
4
+ data.tar.gz: ae4aab29eb1048a70c4a004edd265007a992e991
5
5
  SHA512:
6
- metadata.gz: 5a936a8f8d1b73c1aca370a7db10440a9ce9fe854828eecf69b7cb98c6b623f5e573e06638e5efee9f471117a38869b5678ef531262fed69d451e28cc882989b
7
- data.tar.gz: f35e15687ce5b6038c47f721cbb4e242b57d34bcf7b338b422b46420f685e52bcb1d3fdf56aea399e8dc5815d208984ac8ab58acc8daef14013d67298b48f470
6
+ metadata.gz: f76752cbe2cdccb810f7ef9e4de4ace4dd97cacc45e841106d40abedd7401dca8b5326650f5c2994286cf9e5d70e9a57609b5cf4e5ac85b8fd92ba25916d0a7b
7
+ data.tar.gz: cf20e004587f630c21e92a1aa1247a0281df6f97d6d095199abc08f3ee7835ecc4a36bf7cc19d94170eea8409da473ad65ccba3eaf66b5159457e46d0061b501
data/README.md CHANGED
@@ -77,7 +77,8 @@ Returns a hash:
77
77
  },
78
78
  "links": {
79
79
  "self": "/posts/1"
80
- }
80
+ },
81
+ "relationships": {}
81
82
  }
82
83
  }
83
84
  ```
@@ -102,7 +103,8 @@ Returns:
102
103
  },
103
104
  "links": {
104
105
  "self": "/posts/1"
105
- }
106
+ },
107
+ "relationships": {}
106
108
  },
107
109
  {
108
110
  "id": "2",
@@ -113,7 +115,8 @@ Returns:
113
115
  },
114
116
  "links": {
115
117
  "self": "/posts/2"
116
- }
118
+ },
119
+ "relationships": {}
117
120
  }
118
121
  ]
119
122
  }
@@ -264,7 +267,7 @@ JSONAPI::Serializer.serialize(post, include: ['author', 'comments', 'comments.us
264
267
  Returns:
265
268
 
266
269
  ```json
267
-
270
+ {
268
271
  "data": {
269
272
  "id": "1",
270
273
  "type": "posts",
@@ -273,7 +276,9 @@ Returns:
273
276
  "content": "Your first post"
274
277
  },
275
278
  "links": {
276
- "self": "/posts/1",
279
+ "self": "/posts/1"
280
+ },
281
+ "relationships": {
277
282
  "author": {
278
283
  "self": "/posts/1/links/author",
279
284
  "related": "/posts/1/author",
@@ -303,7 +308,8 @@ Returns:
303
308
  },
304
309
  "links": {
305
310
  "self": "/users/1"
306
- }
311
+ },
312
+ "relationships": {}
307
313
  },
308
314
  {
309
315
  "id": "1",
@@ -312,7 +318,9 @@ Returns:
312
318
  "content": "Have no fear, sers, your king is safe."
313
319
  },
314
320
  "links": {
315
- "self": "/comments/1",
321
+ "self": "/comments/1"
322
+ },
323
+ "relationships": {
316
324
  "user": {
317
325
  "self": "/comments/1/links/user",
318
326
  "related": "/comments/1/user",
@@ -320,6 +328,10 @@ Returns:
320
328
  "type": "users",
321
329
  "id": "2"
322
330
  }
331
+ },
332
+ "post": {
333
+ "self": "/comments/1/links/post",
334
+ "related": "/comments/1/post"
323
335
  }
324
336
  }
325
337
  },
@@ -331,19 +343,20 @@ Returns:
331
343
  },
332
344
  "links": {
333
345
  "self": "/users/2"
334
- }
346
+ },
347
+ "relationships": {}
335
348
  }
336
349
  ]
337
350
  }
338
351
  ```
339
352
 
340
353
  Notice a few things:
341
- * The [primary data](http://jsonapi.org/format/#document-structure-top-level) now includes "linkage" information for each relationship that was included.
354
+ * The [primary data](http://jsonapi.org/format/#document-structure-top-level) relationships now include "linkage" information for each relationship that was included.
342
355
  * The related objects themselves are loaded in the top-level `included` member.
343
356
  * The related objects _also_ include "linkage" information when a deeper relationship is also present in the compound document. This is a very powerful feature of the JSON:API spec, and allows you to deeply link complicated relationships all in the same document and in a single HTTP response. JSONAPI::Serializers automatically includes the correct linkage information for whatever `include` paths you specify. This conforms to this part of the spec:
344
357
 
345
- > Note: Resource linkage in a compound document allows a client to link together all of the included resource objects without having to GET any relationship URLs.
346
- > [JSON:API Resource Relationships](http://jsonapi.org/format/#document-structure-resource-relationships)
358
+ > Note: Full linkage ensures that included resources are related to either the primary data (which could be resource objects or resource identifier objects) or to each other.
359
+ > [JSON:API Compound Documents](http://jsonapi.org/format/#document-structure-compound-documents)
347
360
 
348
361
  #### Relationship path handling
349
362
 
@@ -79,7 +79,10 @@ module JSONAPI
79
79
  def links
80
80
  data = {}
81
81
  data.merge!({'self' => self_link}) if self_link
82
+ end
82
83
 
84
+ def relationships
85
+ data = {}
83
86
  # Merge in data for has_one relationships.
84
87
  has_one_relationships.each do |attribute_name, object|
85
88
  formatted_attribute_name = format_name(attribute_name)
@@ -260,7 +263,6 @@ module JSONAPI
260
263
  # Given all the primary objects (either the single root object or collection of objects),
261
264
  # recursively search and find related associations that were specified as includes.
262
265
  objects = options[:is_collection] ? objects.to_a : [objects]
263
- serializers = []
264
266
  objects.compact.each do |obj|
265
267
  # Use the mutability of relationship_data as the return datastructure to take advantage
266
268
  # of the internal special merging logic.
@@ -296,6 +298,7 @@ module JSONAPI
296
298
  # http://jsonapi.org/format/#document-structure-resource-objects
297
299
  data.merge!({'attributes' => serializer.attributes}) if !serializer.attributes.nil?
298
300
  data.merge!({'links' => serializer.links}) if !serializer.links.nil?
301
+ data.merge!({'relationships' => serializer.relationships}) if !serializer.relationships.nil?
299
302
  data.merge!({'meta' => serializer.meta}) if !serializer.meta.nil?
300
303
  data
301
304
  end
@@ -1,5 +1,5 @@
1
1
  module JSONAPI
2
2
  module Serializer
3
- VERSION = '0.1.1'
3
+ VERSION = '0.1.2'
4
4
  end
5
5
  end
@@ -25,6 +25,7 @@ describe JSONAPI::Serializer do
25
25
  'links' => {
26
26
  'self' => '/posts/1',
27
27
  },
28
+ 'relationships' => {},
28
29
  })
29
30
  end
30
31
  it 'can serialize primary data for a simple object with a long name' do
@@ -38,6 +39,8 @@ describe JSONAPI::Serializer do
38
39
  },
39
40
  'links' => {
40
41
  'self' => '/long-comments/1',
42
+ },
43
+ 'relationships' => {
41
44
  'user' => {
42
45
  'self' => '/long-comments/1/links/user',
43
46
  'related' => '/long-comments/1/user',
@@ -62,6 +65,7 @@ describe JSONAPI::Serializer do
62
65
  'links' => {
63
66
  'self' => '/posts/1',
64
67
  },
68
+ 'relationships' => {},
65
69
  'meta' => {
66
70
  'copyright' => 'Copyright 2015 Example Corp.',
67
71
  'authors' => [
@@ -83,6 +87,8 @@ describe JSONAPI::Serializer do
83
87
  },
84
88
  'links' => {
85
89
  'self' => '/posts/1',
90
+ },
91
+ 'relationships' => {
86
92
  # Both to-one and to-many links are present, but neither include linkage:
87
93
  'author' => {
88
94
  'self' => '/posts/1/links/author',
@@ -113,6 +119,8 @@ describe JSONAPI::Serializer do
113
119
  },
114
120
  'links' => {
115
121
  'self' => '/posts/1',
122
+ },
123
+ 'relationships' => {
116
124
  'author' => {
117
125
  'self' => '/posts/1/links/author',
118
126
  'related' => '/posts/1/author',
@@ -145,6 +153,8 @@ describe JSONAPI::Serializer do
145
153
  },
146
154
  'links' => {
147
155
  'self' => '/posts/1',
156
+ },
157
+ 'relationships' => {
148
158
  'author' => {
149
159
  'self' => '/posts/1/links/author',
150
160
  'related' => '/posts/1/author',
@@ -180,6 +190,8 @@ describe JSONAPI::Serializer do
180
190
  },
181
191
  'links' => {
182
192
  'self' => '/posts/1',
193
+ },
194
+ 'relationships' => {
183
195
  'author' => {
184
196
  'self' => '/posts/1/links/author',
185
197
  'related' => '/posts/1/author',
@@ -213,6 +225,8 @@ describe JSONAPI::Serializer do
213
225
  },
214
226
  'links' => {
215
227
  'self' => '/posts/1',
228
+ },
229
+ 'relationships' => {
216
230
  'author' => {
217
231
  'self' => '/posts/1/links/author',
218
232
  'related' => '/posts/1/author',
@@ -414,7 +428,7 @@ describe JSONAPI::Serializer do
414
428
  ],
415
429
  }
416
430
  includes = ['long-comments.post.author']
417
- actual_data = JSONAPI::Serializer.serialize(post, include: ['long-comments.post.author'])
431
+ actual_data = JSONAPI::Serializer.serialize(post, include: includes)
418
432
  # Multiple expectations for better diff output for debugging.
419
433
  expect(actual_data['data']).to eq(expected_data['data'])
420
434
  expect(actual_data['included']).to eq(expected_data['included'])
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jsonapi-serializers
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mike Fotinakis
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-05-16 00:00:00.000000000 Z
11
+ date: 2015-05-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -132,3 +132,4 @@ test_files:
132
132
  - spec/spec_helper.rb
133
133
  - spec/support/factory.rb
134
134
  - spec/support/serializers.rb
135
+ has_rdoc: