jsonapi-serializers 0.4.0 → 0.5.0
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 +23 -0
- data/lib/jsonapi-serializers/serializer.rb +3 -0
- data/lib/jsonapi-serializers/version.rb +1 -1
- data/spec/serializer_spec.rb +6 -6
- data/spec/support/serializers.rb +14 -6
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 42699af4d36a1e0a2293c857393c2dc3536d8d82
|
4
|
+
data.tar.gz: 92ef3e0b867d350c32fe4145c01958e38ceb2a8b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 06c90bbb58c2910078140c46592ee8f6ce81d20504b530e1ca853484b7573a198fd1da7e2f98d54cbb8f76eb471eda50cc41599b5e99cd76733c6e66a7280c57
|
7
|
+
data.tar.gz: 696761f2e0863825c0b232d506795758e4eda93a166d32f05095e59b412cde1531dc992e7c89e83afe86b1b568712a57fd9bb5a44d4fad628f181022a4b290c4
|
data/README.md
CHANGED
@@ -19,6 +19,7 @@ This library is up-to-date with the finalized v1 JSON API spec.
|
|
19
19
|
* [More customizations](#more-customizations)
|
20
20
|
* [Base URL](#base-url)
|
21
21
|
* [Root metadata](#root-metadata)
|
22
|
+
* [Explicit serializer discovery](#explicit-serializer-discovery)
|
22
23
|
* [Relationships](#relationships)
|
23
24
|
* [Compound documents and includes](#compound-documents-and-includes)
|
24
25
|
* [Relationship path handling](#relationship-path-handling)
|
@@ -313,6 +314,20 @@ You can pass a `meta` argument to specify top-level metadata:
|
|
313
314
|
JSONAPI::Serializer.serialize(post, meta: {copyright: 'Copyright 2015 Example Corp.'})
|
314
315
|
```
|
315
316
|
|
317
|
+
### Explicit serializer discovery
|
318
|
+
|
319
|
+
By default, jsonapi-serializers assumes that the serializer class for `Namespace::User` is `Namespace::UserSerializer`. You can override this behavior on a per-object basis by implementing the `jsonapi_serializer_class_name` method.
|
320
|
+
|
321
|
+
```ruby
|
322
|
+
class User
|
323
|
+
def jsonapi_serializer_class_name
|
324
|
+
'SomeOtherNamespace::CustomUserSerializer'
|
325
|
+
end
|
326
|
+
end
|
327
|
+
```
|
328
|
+
|
329
|
+
Now, when a `User` object is serialized, it will use the `SomeOtherNamespace::CustomUserSerializer`.
|
330
|
+
|
316
331
|
## Relationships
|
317
332
|
|
318
333
|
You can easily specify relationships with the `has_one` and `has_many` directives.
|
@@ -513,9 +528,16 @@ module JSONAPI
|
|
513
528
|
MIMETYPE = "application/vnd.api+json"
|
514
529
|
end
|
515
530
|
Mime::Type.register(JSONAPI::MIMETYPE, :api_json)
|
531
|
+
|
532
|
+
# Rails 4
|
516
533
|
ActionDispatch::ParamsParser::DEFAULT_PARSERS[Mime::Type.lookup(JSONAPI::MIMETYPE)] = lambda do |body|
|
517
534
|
JSON.parse(body)
|
518
535
|
end
|
536
|
+
|
537
|
+
# Rails 5 moved DEFAULT_PARSERS
|
538
|
+
ActionDispatch::Http::Parameters::DEFAULT_PARSERS[Mime::Type.lookup(JSONAPI::MIMETYPE)] = lambda do |body|
|
539
|
+
JSON.parse(body)
|
540
|
+
end
|
519
541
|
```
|
520
542
|
|
521
543
|
## Unfinished business
|
@@ -527,6 +549,7 @@ end
|
|
527
549
|
|
528
550
|
## Release notes
|
529
551
|
|
552
|
+
* v0.5.0: Support for explicit serializer discovery.
|
530
553
|
* v0.4.0: Support for declaring multiple `attributes`.
|
531
554
|
* v0.3.1: Improve performance of loading included relationships.
|
532
555
|
* v0.3.0: Add top-level `meta` support.
|
data/spec/serializer_spec.rb
CHANGED
@@ -423,7 +423,7 @@ describe JSONAPI::Serializer do
|
|
423
423
|
expect(JSONAPI::Serializer.serialize(post, include: ['author'])).to eq({
|
424
424
|
'data' => expected_primary_data,
|
425
425
|
'included' => [
|
426
|
-
serialize_primary(post.author, {serializer:
|
426
|
+
serialize_primary(post.author, {serializer: MyAppOtherNamespace::UserSerializer}),
|
427
427
|
],
|
428
428
|
})
|
429
429
|
end
|
@@ -518,7 +518,7 @@ describe JSONAPI::Serializer do
|
|
518
518
|
'data' => serialize_primary(post, {serializer: MyApp::PostSerializer}),
|
519
519
|
'included' => [
|
520
520
|
# Only the author is included:
|
521
|
-
serialize_primary(post.author, {serializer:
|
521
|
+
serialize_primary(post.author, {serializer: MyAppOtherNamespace::UserSerializer}),
|
522
522
|
],
|
523
523
|
}
|
524
524
|
includes = ['long-comments.post.author']
|
@@ -542,8 +542,8 @@ describe JSONAPI::Serializer do
|
|
542
542
|
# Same note about primary data linkages as above.
|
543
543
|
'data' => serialize_primary(post, {serializer: MyApp::PostSerializer}),
|
544
544
|
'included' => [
|
545
|
-
serialize_primary(first_user, {serializer:
|
546
|
-
serialize_primary(second_user, {serializer:
|
545
|
+
serialize_primary(first_user, {serializer: MyAppOtherNamespace::UserSerializer}),
|
546
|
+
serialize_primary(second_user, {serializer: MyAppOtherNamespace::UserSerializer}),
|
547
547
|
],
|
548
548
|
}
|
549
549
|
includes = ['long-comments.user']
|
@@ -571,7 +571,7 @@ describe JSONAPI::Serializer do
|
|
571
571
|
include_linkages: ['user'],
|
572
572
|
}),
|
573
573
|
# Note: post.author does not show up here because it was not included.
|
574
|
-
serialize_primary(comment_user, {serializer:
|
574
|
+
serialize_primary(comment_user, {serializer: MyAppOtherNamespace::UserSerializer}),
|
575
575
|
],
|
576
576
|
}
|
577
577
|
includes = ['long-comments', 'long-comments.user']
|
@@ -598,7 +598,7 @@ describe JSONAPI::Serializer do
|
|
598
598
|
'included' => [
|
599
599
|
serialize_primary(long_comments.first, {serializer: MyApp::LongCommentSerializer}),
|
600
600
|
serialize_primary(long_comments.last, {serializer: MyApp::LongCommentSerializer}),
|
601
|
-
serialize_primary(post.author, {serializer:
|
601
|
+
serialize_primary(post.author, {serializer: MyAppOtherNamespace::UserSerializer}),
|
602
602
|
],
|
603
603
|
}
|
604
604
|
# Also test that it handles string include arguments.
|
data/spec/support/serializers.rb
CHANGED
@@ -17,6 +17,10 @@ module MyApp
|
|
17
17
|
class User
|
18
18
|
attr_accessor :id
|
19
19
|
attr_accessor :name
|
20
|
+
|
21
|
+
def jsonapi_serializer_class_name
|
22
|
+
'MyAppOtherNamespace::UserSerializer'
|
23
|
+
end
|
20
24
|
end
|
21
25
|
|
22
26
|
class PostSerializer
|
@@ -41,12 +45,6 @@ module MyApp
|
|
41
45
|
has_one :post
|
42
46
|
end
|
43
47
|
|
44
|
-
class UserSerializer
|
45
|
-
include JSONAPI::Serializer
|
46
|
-
|
47
|
-
attribute :name
|
48
|
-
end
|
49
|
-
|
50
48
|
# More customized, one-off serializers to test particular behaviors:
|
51
49
|
|
52
50
|
class SimplestPostSerializer
|
@@ -141,3 +139,13 @@ module MyApp
|
|
141
139
|
attributes :title, :body
|
142
140
|
end
|
143
141
|
end
|
142
|
+
|
143
|
+
# Test the `jsonapi_serializer_class_name` override method for serializers in different namespaces.
|
144
|
+
# There is no explicit test for this, just implicit tests that correctly serialize User objects.
|
145
|
+
module MyAppOtherNamespace
|
146
|
+
class UserSerializer
|
147
|
+
include JSONAPI::Serializer
|
148
|
+
|
149
|
+
attribute :name
|
150
|
+
end
|
151
|
+
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.
|
4
|
+
version: 0.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mike Fotinakis
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-01-
|
11
|
+
date: 2016-01-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|