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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b221770696640aabe5ea67ea242040f7ed1835fb84419c2ba49b248a3529c8ef
4
- data.tar.gz: 951c23dd578c6b49cf7cc75ffe020e102dea1b4d5a20474be670f09496be57dd
3
+ metadata.gz: a362cbf5323852dddb9104b617f76efd6288bbecb351a56b614cf0c6fd084250
4
+ data.tar.gz: a5e62c311423e5a8265448f9caa20685cf7b2a0d93d6395dd82eef9913fb4b44
5
5
  SHA512:
6
- metadata.gz: 69b1fddad703c3f2d8adc06ac44fb93f70cbe2e48273324d0519b99e9742737707714a50917f60669804610288477f163925bf47d1acbf0251b67d520c78319a
7
- data.tar.gz: 2606853e62ddadc7eb1730846d31ade397090674702c4056472984e6028709385fe08c3b8aea8270ea1aa111b83f628bd06a43141c6349afc6b8405df7a87eb2
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 `:blueprinter`
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
@@ -1,3 +1,3 @@
1
1
  module DrySerialization
2
- VERSION = "0.4.4"
2
+ VERSION = "0.4.4.1"
3
3
  end
@@ -5,7 +5,7 @@ class BaseGenerator < Rails::Generators::Base
5
5
  SERIALIZERS = {
6
6
  ams: 'ActiveModelSerializers',
7
7
  blueprinter: 'Blueprinter',
8
- fast_jsonapi: 'JsonapiSerializer'
8
+ jsonapi_serializer: 'JsonapiSerializer'
9
9
  }
10
10
 
11
11
  def self.exit_on_failure?
@@ -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[:fast_jsonapi])
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 install_blueprinter
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-22 00:00:00.000000000 Z
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