dry_serialization 0.4.4 → 0.4.4.1

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