jsonapi-serializers 0.2.3 → 0.2.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +12 -2
- data/lib/jsonapi-serializers/serializer.rb +16 -12
- data/lib/jsonapi-serializers/version.rb +1 -1
- data/spec/serializer_spec.rb +21 -0
- data/spec/support/serializers.rb +21 -2
- metadata +3 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 96dd9615a9ec47ce6f61ba580121e59c363f9ecb
|
4
|
+
data.tar.gz: c73a9d9a8562c78be05103036321ccd65beb6000
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fbe1da4cf4f43dc2a65aa4e7961a51f93a36e4df79c2c40cfd954d21dff648bce5f7ded25a963cc116cbba65d6e6c883d68524f0b79179642fb825024cfba7c7
|
7
|
+
data.tar.gz: e3c49d17d6cfbc2560369f2aec9f045d568daf78a63234d914979e5d56fb1deb2858bf8a52cf7994bb5a1978799f18f706f22ce38c0ec59fb0974e46ad8dc5c7
|
data/README.md
CHANGED
@@ -149,12 +149,20 @@ Note that the JSON:API spec distinguishes in how null/empty is handled for singl
|
|
149
149
|
|
150
150
|
### Custom attributes
|
151
151
|
|
152
|
-
By default the serializer looks for the same name of the attribute on the object it is given. You can customize this behavior by providing a block to
|
152
|
+
By default the serializer looks for the same name of the attribute on the object it is given. You can customize this behavior by providing a block to `attribute`, `has_one`, or `has_many`:
|
153
153
|
|
154
154
|
```ruby
|
155
155
|
attribute :content do
|
156
156
|
object.body
|
157
157
|
end
|
158
|
+
|
159
|
+
has_one :comment do
|
160
|
+
Comment.where(post: object).take!
|
161
|
+
end
|
162
|
+
|
163
|
+
has_many :authors do
|
164
|
+
Author.where(post: object)
|
165
|
+
end
|
158
166
|
```
|
159
167
|
|
160
168
|
The block is evaluated within the serializer instance, so it has access to the `object` and `context` instance variables.
|
@@ -215,6 +223,8 @@ def relationship_related_link(attribute_name)
|
|
215
223
|
end
|
216
224
|
```
|
217
225
|
|
226
|
+
If you override `self_link`, `relationship_self_link`, or `relationship_related_link` to return `nil`, the link will be excluded from the serialized object.
|
227
|
+
|
218
228
|
## Relationships
|
219
229
|
|
220
230
|
You can easily specify relationships with the `has_one` and `has_many` directives.
|
@@ -409,7 +419,7 @@ class Api::V1::ReposController < Api::V1::BaseController
|
|
409
419
|
end
|
410
420
|
end
|
411
421
|
|
412
|
-
#
|
422
|
+
# config/initializers/jsonapi_mimetypes.rb
|
413
423
|
# Without this mimetype registration, controllers will not automatically parse JSON API params.
|
414
424
|
module JSONAPI
|
415
425
|
MIMETYPE = "application/vnd.api+json"
|
@@ -86,12 +86,14 @@ module JSONAPI
|
|
86
86
|
# Merge in data for has_one relationships.
|
87
87
|
has_one_relationships.each do |attribute_name, object|
|
88
88
|
formatted_attribute_name = format_name(attribute_name)
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
89
|
+
|
90
|
+
data[formatted_attribute_name] = {}
|
91
|
+
links_self = relationship_self_link(attribute_name)
|
92
|
+
links_related = relationship_related_link(attribute_name)
|
93
|
+
data[formatted_attribute_name]['links'] = {} if links_self || links_related
|
94
|
+
data[formatted_attribute_name]['links']['self'] = links_self if links_self
|
95
|
+
data[formatted_attribute_name]['links']['related'] = links_related if links_related
|
96
|
+
|
95
97
|
if @_include_linkages.include?(formatted_attribute_name)
|
96
98
|
if object.nil?
|
97
99
|
# Spec: Resource linkage MUST be represented as one of the following:
|
@@ -113,12 +115,14 @@ module JSONAPI
|
|
113
115
|
# Merge in data for has_many relationships.
|
114
116
|
has_many_relationships.each do |attribute_name, objects|
|
115
117
|
formatted_attribute_name = format_name(attribute_name)
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
118
|
+
|
119
|
+
data[formatted_attribute_name] = {}
|
120
|
+
links_self = relationship_self_link(attribute_name)
|
121
|
+
links_related = relationship_related_link(attribute_name)
|
122
|
+
data[formatted_attribute_name]['links'] = {} if links_self || links_related
|
123
|
+
data[formatted_attribute_name]['links']['self'] = links_self if links_self
|
124
|
+
data[formatted_attribute_name]['links']['related'] = links_related if links_related
|
125
|
+
|
122
126
|
# Spec: Resource linkage MUST be represented as one of the following:
|
123
127
|
# - an empty array ([]) for empty to-many relationships.
|
124
128
|
# - an array of linkage objects for non-empty to-many relationships.
|
data/spec/serializer_spec.rb
CHANGED
@@ -107,6 +107,27 @@ describe JSONAPI::Serializer do
|
|
107
107
|
},
|
108
108
|
})
|
109
109
|
end
|
110
|
+
it 'does not include links if relationship_self_link and relationship_related_link are nil' do
|
111
|
+
post = create(:post)
|
112
|
+
primary_data = serialize_primary(post, {serializer: MyApp::PostSerializerWithoutLinks})
|
113
|
+
expect(primary_data).to eq({
|
114
|
+
'id' => '1',
|
115
|
+
'type' => 'posts',
|
116
|
+
'attributes' => {
|
117
|
+
'title' => 'Title for Post 1',
|
118
|
+
'long-content' => 'Body for Post 1',
|
119
|
+
},
|
120
|
+
'links' => {
|
121
|
+
'self' => '/posts/1',
|
122
|
+
},
|
123
|
+
# This is technically invalid since relationships MUST contain at least one of links,
|
124
|
+
# data, or meta, but we leave that up to the user.
|
125
|
+
'relationships' => {
|
126
|
+
'author' => {},
|
127
|
+
'long-comments' => {},
|
128
|
+
},
|
129
|
+
})
|
130
|
+
end
|
110
131
|
end
|
111
132
|
context 'with linkage includes' do
|
112
133
|
it 'can serialize primary data for a null to-one relationship' do
|
data/spec/support/serializers.rb
CHANGED
@@ -64,6 +64,7 @@ module MyApp
|
|
64
64
|
|
65
65
|
class PostSerializerWithMetadata
|
66
66
|
include JSONAPI::Serializer
|
67
|
+
include JSONAPI::Serializer
|
67
68
|
|
68
69
|
attribute :title
|
69
70
|
attribute :long_content do
|
@@ -83,8 +84,6 @@ module MyApp
|
|
83
84
|
end
|
84
85
|
|
85
86
|
class PostSerializerWithContextHandling < SimplestPostSerializer
|
86
|
-
include JSONAPI::Serializer
|
87
|
-
|
88
87
|
attribute :body, if: :show_body?, unless: :hide_body?
|
89
88
|
|
90
89
|
def show_body?
|
@@ -96,6 +95,26 @@ module MyApp
|
|
96
95
|
end
|
97
96
|
end
|
98
97
|
|
98
|
+
class PostSerializerWithoutLinks
|
99
|
+
include JSONAPI::Serializer
|
100
|
+
|
101
|
+
attribute :title
|
102
|
+
attribute :long_content do
|
103
|
+
object.body
|
104
|
+
end
|
105
|
+
|
106
|
+
has_one :author
|
107
|
+
has_many :long_comments
|
108
|
+
|
109
|
+
def relationship_self_link(attribute_name)
|
110
|
+
nil
|
111
|
+
end
|
112
|
+
|
113
|
+
def relationship_related_link(attribute_name)
|
114
|
+
nil
|
115
|
+
end
|
116
|
+
end
|
117
|
+
|
99
118
|
class EmptySerializer
|
100
119
|
include JSONAPI::Serializer
|
101
120
|
end
|
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.2.
|
4
|
+
version: 0.2.4
|
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-
|
11
|
+
date: 2015-07-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -123,7 +123,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
123
123
|
version: '0'
|
124
124
|
requirements: []
|
125
125
|
rubyforge_project:
|
126
|
-
rubygems_version: 2.
|
126
|
+
rubygems_version: 2.4.5
|
127
127
|
signing_key:
|
128
128
|
specification_version: 4
|
129
129
|
summary: Pure Ruby readonly serializers for the JSON:API spec.
|
@@ -132,4 +132,3 @@ test_files:
|
|
132
132
|
- spec/spec_helper.rb
|
133
133
|
- spec/support/factory.rb
|
134
134
|
- spec/support/serializers.rb
|
135
|
-
has_rdoc:
|