dry_serialization 0.4.4 → 0.4.4.1
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 +1 -1
- data/lib/dry_serialization/concerns/deserializable.rb +69 -0
- data/lib/dry_serialization/version.rb +1 -1
- data/lib/generators/base_generator.rb +1 -1
- data/lib/generators/dry_serialization/blueprinter/install_generator.rb +1 -1
- data/lib/generators/dry_serialization/jsonapi_serializer/install_generator.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a362cbf5323852dddb9104b617f76efd6288bbecb351a56b614cf0c6fd084250
|
4
|
+
data.tar.gz: a5e62c311423e5a8265448f9caa20685cf7b2a0d93d6395dd82eef9913fb4b44
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d342355ee030f28689dc0fc496020f69e3be986b782c154cc101f9bb3b628e44ca22ade883d64a6a58be1f47aa763d9bdfafc1609dac4f7e6fb6d6d49613d82f
|
7
|
+
data.tar.gz: 8c31a0f9f14265bb47d688e6eae8b9aac459c467252384ba5eb609d0c5efe830c20e107abe23aa04e746b5bd4a8b3a019e12c01c594b848cc2b5562ce617770f
|
data/README.md
CHANGED
@@ -27,7 +27,7 @@ Or install it yourself as:
|
|
27
27
|
## Usage
|
28
28
|
|
29
29
|
- Install with rails generator
|
30
|
-
* currently supported serializers are
|
30
|
+
* currently supported serializers are [jsonapi_serializer](https://github.com/jsonapi-serializer/jsonapi-serializer) and [blueprinter](https://github.com/procore/blueprinter)
|
31
31
|
|
32
32
|
|
33
33
|
`rails g dry_serialization:<serializer_name>:install`
|
@@ -0,0 +1,69 @@
|
|
1
|
+
module DrySerialization
|
2
|
+
module Deserializable
|
3
|
+
|
4
|
+
def deserialized_payload(base_params, object = nil)
|
5
|
+
attrs = attributes(base_params)
|
6
|
+
id = dig_id(base_params, object)
|
7
|
+
attrs.merge!(id: id) if id
|
8
|
+
|
9
|
+
build_nested_relationships(attrs, base_params)
|
10
|
+
end
|
11
|
+
|
12
|
+
private
|
13
|
+
|
14
|
+
def build_nested_relationships(attrs, base_params)
|
15
|
+
relations = relationships(base_params)
|
16
|
+
attrs.merge!(transform_object_values(relations))
|
17
|
+
end
|
18
|
+
|
19
|
+
def transform_object_values(relations)
|
20
|
+
relations.to_h.each_with_object({}) do |(key, data), acc|
|
21
|
+
key = "#{key}_attributes" unless key.end_with?('_attributes')
|
22
|
+
acc[key] ||= transform_relationships_to_get_attributes(data)
|
23
|
+
transform_nested_relationships_to_get_attributes(acc[key], data)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def transform_nested_relationships_to_get_attributes(parent_relation_hash, data)
|
28
|
+
nested_relationships = data[:data].respond_to?(:key?) ? relationships(data) : nil
|
29
|
+
return unless nested_relationships
|
30
|
+
|
31
|
+
nested_relationships.each do |(relation, rel_data)|
|
32
|
+
hash = { "#{relation}_attributes": transform_relationships_to_get_attributes(rel_data) }
|
33
|
+
parent_relation_hash.merge!(hash)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
def transform_relationships_to_get_attributes(object)
|
38
|
+
case object[:data]
|
39
|
+
when Hash
|
40
|
+
object[:attributes] || object.dig(:data, :attributes)
|
41
|
+
when Array
|
42
|
+
object[:data].map do |e|
|
43
|
+
attrs = transform_relationships_to_get_attributes({ data: e })
|
44
|
+
attrs.merge!(transform_object_values(e[:relationships]))
|
45
|
+
end
|
46
|
+
else
|
47
|
+
return
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
def dig_id(base_params, object)
|
52
|
+
return unless object
|
53
|
+
|
54
|
+
base_params.dig(:data, :id)
|
55
|
+
send("#{object}_id")
|
56
|
+
rescue
|
57
|
+
nil
|
58
|
+
end
|
59
|
+
|
60
|
+
def attributes(base_params)
|
61
|
+
base_params.dig(:data, :attributes)
|
62
|
+
end
|
63
|
+
|
64
|
+
def relationships(base_params)
|
65
|
+
base_params.dig(:data, :relationships)
|
66
|
+
end
|
67
|
+
|
68
|
+
end
|
69
|
+
end
|
@@ -7,7 +7,7 @@ module DrySerialization
|
|
7
7
|
|
8
8
|
# Add blueprinter gem to gemfile after dry_serialization declaration and bundles the newly declared gem
|
9
9
|
def install_blueprinter
|
10
|
-
remove_other_supported_gems(SERIALIZERS[:ams], SERIALIZERS[:
|
10
|
+
remove_other_supported_gems(SERIALIZERS[:ams], SERIALIZERS[:jsonapi_serializer])
|
11
11
|
|
12
12
|
puts "Installing #{SERIALIZERS[:blueprinter]}..."
|
13
13
|
insert_into_file('Gemfile',
|
@@ -6,7 +6,7 @@ module DrySerialization
|
|
6
6
|
source_root File.expand_path("../../../templates", __FILE__)
|
7
7
|
|
8
8
|
# Add blueprinter gem to gemfile after dry_serialization declaration and bundles the newly declared gem
|
9
|
-
def
|
9
|
+
def install_jsonapi_serializer
|
10
10
|
remove_other_supported_gems(SERIALIZERS[:blueprinter], SERIALIZERS[:ams])
|
11
11
|
|
12
12
|
puts "Installing #{SERIALIZERS[:jsonapi_serializer]}..."
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dry_serialization
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.4
|
4
|
+
version: 0.4.4.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mike Heft
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-10-
|
11
|
+
date: 2020-10-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -162,6 +162,7 @@ files:
|
|
162
162
|
- dry_serialization.gemspec
|
163
163
|
- lib/dry_serialization.rb
|
164
164
|
- lib/dry_serialization/blueprinter.rb
|
165
|
+
- lib/dry_serialization/concerns/deserializable.rb
|
165
166
|
- lib/dry_serialization/concerns/serialization_helper.rb
|
166
167
|
- lib/dry_serialization/jsonapi_serializer.rb
|
167
168
|
- lib/dry_serialization/version.rb
|