dry_serialization 0.4.3.1 → 0.4.4.2

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: 1c9d8e673079e48d49d858e5b8c951a85be6c6307e364635f6b95728bdb4eab8
4
- data.tar.gz: e277c09f5bab9d9ecf1f5f52a6c8c386e1f075663b88d7ab55fad48742e2353b
3
+ metadata.gz: 6722956e8906a82b85c3cf64a9ce275882d217c28f674003d410fa36195cfd13
4
+ data.tar.gz: b6881b357536253f4dd37ff059de7e4dcb01ec3cd6e77cc79d62a0c4b17ac60c
5
5
  SHA512:
6
- metadata.gz: f9e73c35976f275645dedd95364844ad2a5cff7b5a9a62e4e5c27b20bacb9cb3404cc105c1e96d6c08c7b48a34b96b001de62c5e7b8b61086061efc662d46a78
7
- data.tar.gz: 445d722bd9618fccac0eb9a6cf7d082287831bc8881a18a29570f0cde980c5fae9c729bfde8470e7694298e26dd65c26ced71bb9ac5b715f4b89053186bca75c
6
+ metadata.gz: b5a6afddeca50b3fd6baacf423375178354f33482edb81acd2c18693269fd1f07d0ffbd01bf03c4ff15a559e45d06080550efdeb842215e372d9f7212666aab6
7
+ data.tar.gz: 4fa61e7c736019154a8d70191459756168c6d8154cb6254517e9715f192bfe93a9851a67e775fdf7b404af47f8122a95babd95e87ccb89b59e3790a23f09e7b0
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,71 @@
1
+ module DrySerialization
2
+ module Concerns
3
+ module Deserializable
4
+
5
+ def deserialized_payload(base_params, object = nil)
6
+ attrs = attributes(base_params)
7
+ id = dig_id(base_params, object)
8
+ attrs.merge!(id: id) if id
9
+
10
+ build_nested_relationships(attrs, base_params)
11
+ end
12
+
13
+ private
14
+
15
+ def build_nested_relationships(attrs, base_params)
16
+ relations = relationships(base_params)
17
+ attrs.merge!(transform_object_values(relations))
18
+ end
19
+
20
+ def transform_object_values(relations)
21
+ relations.to_h.each_with_object({}) do |(key, data), acc|
22
+ key = "#{key}_attributes" unless key.end_with?('_attributes')
23
+ acc[key] ||= transform_relationships_to_get_attributes(data)
24
+ transform_nested_relationships_to_get_attributes(acc[key], data)
25
+ end
26
+ end
27
+
28
+ def transform_nested_relationships_to_get_attributes(parent_relation_hash, data)
29
+ nested_relationships = data[:data].respond_to?(:key?) ? relationships(data) : nil
30
+ return unless nested_relationships
31
+
32
+ nested_relationships.each do |(relation, rel_data)|
33
+ hash = { "#{relation}_attributes": transform_relationships_to_get_attributes(rel_data) }
34
+ parent_relation_hash.merge!(hash)
35
+ end
36
+ end
37
+
38
+ def transform_relationships_to_get_attributes(object)
39
+ case object[:data]
40
+ when Hash
41
+ object[:attributes] || object.dig(:data, :attributes)
42
+ when Array
43
+ object[:data].map do |e|
44
+ attrs = transform_relationships_to_get_attributes({ data: e })
45
+ attrs.merge!(transform_object_values(e[:relationships]))
46
+ end
47
+ else
48
+ return
49
+ end
50
+ end
51
+
52
+ def dig_id(base_params, object)
53
+ return unless object
54
+
55
+ base_params.dig(:data, :id)
56
+ send("#{object}_id")
57
+ rescue
58
+ nil
59
+ end
60
+
61
+ def attributes(base_params)
62
+ base_params.dig(:data, :attributes)
63
+ end
64
+
65
+ def relationships(base_params)
66
+ base_params.dig(:data, :relationships)
67
+ end
68
+
69
+ end
70
+ end
71
+ end
@@ -14,7 +14,7 @@ module DrySerialization
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.1"
2
+ VERSION = "0.4.4.2"
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.1
4
+ version: 0.4.4.2
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-25 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: