dry_serialization 0.4.3 → 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: 90a445b57058169cbfcbc1320111c29db630285f4cdb2b2d8677dc6bf40efdd4
4
- data.tar.gz: f96c09045f95e6b9d28bbc08a8c6ffc79f1c9026301c85e062fb97fcd0b5bbbd
3
+ metadata.gz: a362cbf5323852dddb9104b617f76efd6288bbecb351a56b614cf0c6fd084250
4
+ data.tar.gz: a5e62c311423e5a8265448f9caa20685cf7b2a0d93d6395dd82eef9913fb4b44
5
5
  SHA512:
6
- metadata.gz: cb606bc1c012bbb4d0963cfc5df3ed4997da217bb8c7e49264261b89db7853f0811cafef908a8d2b61acb29d3e6bba568b504d11b217ac92d0999d1f5c2b8da0
7
- data.tar.gz: 970b00e53f7306ef07f5ec563499c8de15a83d7feee525dec520531be0b125ec474b782c32785f5378a90e56bfdbe437a66eba88a26bd3b8389e5a3ff9f7e0f0
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`
@@ -30,5 +30,5 @@ Gem::Specification.new do |spec|
30
30
  spec.add_development_dependency 'activerecord'
31
31
  spec.add_development_dependency 'sqlite3', '~> 1.4'
32
32
  spec.add_development_dependency 'yard', '~> 0.9.11'
33
- spec.add_development_dependency 'fast_jsonapi'
33
+ spec.add_development_dependency 'jsonapi_serializer'
34
34
  end
@@ -1,6 +1,6 @@
1
1
  require "dry_serialization/version"
2
2
  require "dry_serialization/blueprinter"
3
- require "dry_serialization/fast_jsonapi"
3
+ require "dry_serialization/jsonapi_serializer"
4
4
  require "dry_serialization/concerns/serialization_helper"
5
5
 
6
6
  module DrySerialization
@@ -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
@@ -9,12 +9,12 @@ module DrySerialization
9
9
  errors = [errors] unless errors.is_a?(Array)
10
10
  errors = handle_errors(errors)
11
11
 
12
- render json: errors, status: status
12
+ render json: { errors: errors }, status: status
13
13
  end
14
14
 
15
15
  private
16
16
 
17
- def handle_errors(*errors)
17
+ def handle_errors(errors)
18
18
  errors.each_with_object([]) { |error, acc| acc << { detail: error } }
19
19
  end
20
20
 
@@ -1,4 +1,4 @@
1
- module DrySerialization::FastJsonapi
1
+ module DrySerialization::JsonapiSerializer
2
2
 
3
3
  def serialized_resource(resource, serializer, options = {})
4
4
  if resource.is_a?(ActiveRecord::Relation) || resource.is_a?(Array)
@@ -1,3 +1,3 @@
1
1
  module DrySerialization
2
- VERSION = "0.4.3"
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: 'FastJsonapi'
8
+ jsonapi_serializer: 'JsonapiSerializer'
9
9
  }
10
10
 
11
11
  def self.exit_on_failure?
@@ -14,7 +14,7 @@ class BaseGenerator < Rails::Generators::Base
14
14
 
15
15
  private
16
16
 
17
- # Removes other serialization gems, currently just AMS and FastJsonapi
17
+ # Removes other serialization gems, currently just AMS and JsonapiSerializer
18
18
  def remove_other_supported_gems(*gems)
19
19
  gems = [gems] unless gems.is_a?(Array)
20
20
  return if gems.empty?
@@ -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',
@@ -1,21 +1,21 @@
1
1
  require 'generators/base_generator'
2
2
 
3
3
  module DrySerialization
4
- module FastJsonapi
4
+ module JsonapiSerializer
5
5
  class InstallGenerator < BaseGenerator
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
- puts "Installing #{SERIALIZERS[:blueprinter]}..."
12
+ puts "Installing #{SERIALIZERS[:jsonapi_serializer]}..."
13
13
  insert_into_file('Gemfile',
14
- "\ngem 'fast_jsonapi'",
15
- after: "gem 'dry_serialization', source: 'https://gem.fury.io/mikeyduece-gems/'")
14
+ "\ngem 'jsonapi_serializer'",
15
+ after: "gem 'dry_serialization'")
16
16
  run 'bundle install'
17
17
 
18
- helper_include(SERIALIZERS[:fast_jsonapi])
18
+ helper_include(SERIALIZERS[:jsonapi_serializer])
19
19
  end
20
20
 
21
21
  end
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.3
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-10 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
@@ -137,7 +137,7 @@ dependencies:
137
137
  - !ruby/object:Gem::Version
138
138
  version: 0.9.11
139
139
  - !ruby/object:Gem::Dependency
140
- name: fast_jsonapi
140
+ name: jsonapi_serializer
141
141
  requirement: !ruby/object:Gem::Requirement
142
142
  requirements:
143
143
  - - ">="
@@ -162,12 +162,13 @@ 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
- - lib/dry_serialization/fast_jsonapi.rb
167
+ - lib/dry_serialization/jsonapi_serializer.rb
167
168
  - lib/dry_serialization/version.rb
168
169
  - lib/generators/base_generator.rb
169
170
  - lib/generators/dry_serialization/blueprinter/install_generator.rb
170
- - lib/generators/dry_serialization/fast_jsonapi/install_generator.rb
171
+ - lib/generators/dry_serialization/jsonapi_serializer/install_generator.rb
171
172
  - lib/generators/templates/api_controller.rb
172
173
  homepage:
173
174
  licenses: