jsonapi-serializer 2.1.0 → 2.2.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|