jsonapi-serializers 0.2.3 → 0.2.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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:
|