jsonapi-serializer 2.1.0 → 2.2.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 +60 -1
- data/lib/fast_jsonapi.rb +2 -0
- data/lib/fast_jsonapi/helpers.rb +10 -1
- data/lib/fast_jsonapi/object_serializer.rb +6 -6
- data/lib/fast_jsonapi/relationship.rb +1 -1
- data/lib/fast_jsonapi/serialization_core.rb +1 -2
- data/lib/jsonapi/serializer/errors.rb +21 -0
- data/lib/jsonapi/serializer/version.rb +1 -1
- metadata +4 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 26d8c5dcdd61fbf82798d95753f56f0ca147e9a78d865b6ccd4880fa3dd9c356
|
4
|
+
data.tar.gz: bc4d791913f8085d97ae57602175f803e322213c8f97bc8793925a33d1e314d2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ff64f90a94a1bbdc8beecb60997c325cdbfb6d14b48f01a7f4b6e707de4fb338a2cbfa45bae5ff272988fcff2dbe7a746e2ea00e8e3a422e843c844479b836f0
|
7
|
+
data.tar.gz: 1b161b48c481dd1e8b9bfdf3c269770cbcd8fd7d6a9b823719b0b05ce1a676cae98ed2d2d377ca95dd8d27a278ab735f64d8b28ce73f825fa40ca74d9f851e44
|
data/README.md
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
# JSON:API Serialization Library
|
2
2
|
|
3
|
+
## :warning: :construction: [At the moment, contributions are welcome only for v3](https://github.com/jsonapi-serializer/jsonapi-serializer/pull/141)! :construction: :warning:
|
4
|
+
|
3
5
|
A fast [JSON:API](https://jsonapi.org/) serializer for Ruby Objects.
|
4
6
|
|
5
7
|
Previously this project was called **fast_jsonapi**, we forked the project
|
@@ -39,6 +41,8 @@ article in the `docs` folder for any questions related to methodology.
|
|
39
41
|
* [Sparse Fieldsets](#sparse-fieldsets)
|
40
42
|
* [Using helper methods](#using-helper-methods)
|
41
43
|
* [Performance Instrumentation](#performance-instrumentation)
|
44
|
+
* [Deserialization](#deserialization)
|
45
|
+
* [Migrating from Netflix/fast_jsonapi](#migrating-from-netflixfast_jsonapi)
|
42
46
|
* [Contributing](#contributing)
|
43
47
|
|
44
48
|
|
@@ -458,7 +462,7 @@ class MovieSerializer
|
|
458
462
|
|
459
463
|
belongs_to :primary_agent do |movie, params|
|
460
464
|
# in here, params is a hash containing the `:current_user` key
|
461
|
-
params[:current_user]
|
465
|
+
params[:current_user]
|
462
466
|
end
|
463
467
|
end
|
464
468
|
|
@@ -693,6 +697,61 @@ tests. To run tests use the following command:
|
|
693
697
|
rspec
|
694
698
|
```
|
695
699
|
|
700
|
+
## Deserialization
|
701
|
+
We currently do not support deserialization, but we recommend to use any of the next gems:
|
702
|
+
|
703
|
+
### [JSONAPI.rb](https://github.com/stas/jsonapi.rb)
|
704
|
+
|
705
|
+
This gem provides the next features alongside deserialization:
|
706
|
+
- Collection meta
|
707
|
+
- Error handling
|
708
|
+
- Includes and sparse fields
|
709
|
+
- Filtering and sorting
|
710
|
+
- Pagination
|
711
|
+
|
712
|
+
## Migrating from Netflix/fast_jsonapi
|
713
|
+
|
714
|
+
If you come from [Netflix/fast_jsonapi](https://github.com/Netflix/fast_jsonapi), here is the instructions to switch.
|
715
|
+
|
716
|
+
### Modify your Gemfile
|
717
|
+
|
718
|
+
```diff
|
719
|
+
- gem 'fast_jsonapi'
|
720
|
+
+ gem 'jsonapi-serializer'
|
721
|
+
```
|
722
|
+
|
723
|
+
### Replace all constant references
|
724
|
+
|
725
|
+
```diff
|
726
|
+
class MovieSerializer
|
727
|
+
- include FastJsonapi::ObjectSerializer
|
728
|
+
+ include JSONAPI::Serializer
|
729
|
+
end
|
730
|
+
```
|
731
|
+
|
732
|
+
### Replace removed methods
|
733
|
+
|
734
|
+
```diff
|
735
|
+
- json_string = MovieSerializer.new(movie).serialized_json
|
736
|
+
+ json_string = MovieSerializer.new(movie).serializable_hash.to_json
|
737
|
+
```
|
738
|
+
|
739
|
+
### Replace require references
|
740
|
+
|
741
|
+
```diff
|
742
|
+
- require 'fast_jsonapi'
|
743
|
+
+ require 'jsonapi/serializer'
|
744
|
+
```
|
745
|
+
|
746
|
+
### Update your cache options
|
747
|
+
|
748
|
+
See [docs](https://github.com/jsonapi-serializer/jsonapi-serializer#caching).
|
749
|
+
|
750
|
+
```diff
|
751
|
+
- cache_options enabled: true, cache_length: 12.hours
|
752
|
+
+ cache_options store: Rails.cache, namespace: 'jsonapi-serializer', expires_in: 1.hour
|
753
|
+
```
|
754
|
+
|
696
755
|
## Contributing
|
697
756
|
|
698
757
|
Please follow the instructions we provide as part of the issue and
|
data/lib/fast_jsonapi.rb
CHANGED
data/lib/fast_jsonapi/helpers.rb
CHANGED
@@ -6,7 +6,16 @@ module FastJsonapi
|
|
6
6
|
# @param [Array<Object>] *params any number of parameters to be passed to the Proc
|
7
7
|
# @return [Object] the result of the Proc call with the supplied parameters
|
8
8
|
def call_proc(proc, *params)
|
9
|
-
|
9
|
+
# The parameters array for a lambda created from a symbol (&:foo) differs
|
10
|
+
# from explictly defined procs/lambdas, so we can't deduce the number of
|
11
|
+
# parameters from the array length (and differs between Ruby 2.x and 3).
|
12
|
+
# In the case of negative arity -- unlimited/unknown argument count --
|
13
|
+
# just send the object to act as the method receiver.
|
14
|
+
if proc.arity.negative?
|
15
|
+
proc.call(params.first)
|
16
|
+
else
|
17
|
+
proc.call(*params.take(proc.parameters.length))
|
18
|
+
end
|
10
19
|
end
|
11
20
|
end
|
12
21
|
end
|
@@ -228,10 +228,10 @@ module FastJsonapi
|
|
228
228
|
|
229
229
|
# TODO: Remove this undocumented option.
|
230
230
|
# Delegate the caching to the serializer exclusively.
|
231
|
-
if
|
232
|
-
uncachable_relationships_to_serialize[relationship.name] = relationship
|
233
|
-
else
|
231
|
+
if relationship.cached
|
234
232
|
cachable_relationships_to_serialize[relationship.name] = relationship
|
233
|
+
else
|
234
|
+
uncachable_relationships_to_serialize[relationship.name] = relationship
|
235
235
|
end
|
236
236
|
relationships_to_serialize[relationship.name] = relationship
|
237
237
|
end
|
@@ -302,7 +302,7 @@ module FastJsonapi
|
|
302
302
|
|
303
303
|
def serializer_for(name)
|
304
304
|
namespace = self.name.gsub(/()?\w+Serializer$/, '')
|
305
|
-
serializer_name = name.to_s.demodulize.classify
|
305
|
+
serializer_name = "#{name.to_s.demodulize.classify}Serializer"
|
306
306
|
serializer_class_name = namespace + serializer_name
|
307
307
|
begin
|
308
308
|
serializer_class_name.constantize
|
@@ -340,9 +340,9 @@ module FastJsonapi
|
|
340
340
|
def validate_includes!(includes)
|
341
341
|
return if includes.blank?
|
342
342
|
|
343
|
-
parse_includes_list(includes).
|
343
|
+
parse_includes_list(includes).each_key do |include_item|
|
344
344
|
relationship_to_include = relationships_to_serialize[include_item]
|
345
|
-
raise
|
345
|
+
raise(JSONAPI::Serializer::UnsupportedIncludeError.new(include_item, name)) unless relationship_to_include
|
346
346
|
|
347
347
|
relationship_to_include.static_serializer # called for a side-effect to check for a known serializer class.
|
348
348
|
end
|
@@ -71,12 +71,11 @@ module FastJsonapi
|
|
71
71
|
record_hash = cache_store_instance.fetch(record, **cache_opts) do
|
72
72
|
temp_hash = id_hash(id_from_record(record, params), record_type, true)
|
73
73
|
temp_hash[:attributes] = attributes_hash(record, fieldset, params) if attributes_to_serialize.present?
|
74
|
-
temp_hash[:relationships] = {}
|
75
74
|
temp_hash[:relationships] = relationships_hash(record, cachable_relationships_to_serialize, fieldset, includes_list, params) if cachable_relationships_to_serialize.present?
|
76
75
|
temp_hash[:links] = links_hash(record, params) if data_links.present?
|
77
76
|
temp_hash
|
78
77
|
end
|
79
|
-
record_hash[:relationships] = record_hash[:relationships].merge(relationships_hash(record, uncachable_relationships_to_serialize, fieldset, includes_list, params)) if uncachable_relationships_to_serialize.present?
|
78
|
+
record_hash[:relationships] = (record_hash[:relationships] || {}).merge(relationships_hash(record, uncachable_relationships_to_serialize, fieldset, includes_list, params)) if uncachable_relationships_to_serialize.present?
|
80
79
|
else
|
81
80
|
record_hash = id_hash(id_from_record(record, params), record_type, true)
|
82
81
|
record_hash[:attributes] = attributes_hash(record, fieldset, params) if attributes_to_serialize.present?
|
@@ -0,0 +1,21 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module JSONAPI
|
4
|
+
module Serializer
|
5
|
+
class Error < StandardError; end
|
6
|
+
|
7
|
+
class UnsupportedIncludeError < Error
|
8
|
+
attr_reader :include_item, :klass
|
9
|
+
|
10
|
+
def initialize(include_item, klass)
|
11
|
+
super()
|
12
|
+
@include_item = include_item
|
13
|
+
@klass = klass
|
14
|
+
end
|
15
|
+
|
16
|
+
def message
|
17
|
+
"#{include_item} is not specified as a relationship on #{klass}"
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jsonapi-serializer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- JSON:API Serializer Community
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-03-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -220,6 +220,7 @@ files:
|
|
220
220
|
- lib/generators/serializer/serializer_generator.rb
|
221
221
|
- lib/generators/serializer/templates/serializer.rb.tt
|
222
222
|
- lib/jsonapi/serializer.rb
|
223
|
+
- lib/jsonapi/serializer/errors.rb
|
223
224
|
- lib/jsonapi/serializer/instrumentation.rb
|
224
225
|
- lib/jsonapi/serializer/version.rb
|
225
226
|
homepage: https://github.com/jsonapi-serializer/jsonapi-serializer
|
@@ -241,7 +242,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
241
242
|
- !ruby/object:Gem::Version
|
242
243
|
version: '0'
|
243
244
|
requirements: []
|
244
|
-
rubygems_version: 3.
|
245
|
+
rubygems_version: 3.2.3
|
245
246
|
signing_key:
|
246
247
|
specification_version: 4
|
247
248
|
summary: Fast JSON:API serialization library
|