invalid_model-serializer 0.1.0 → 0.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: df1242852f66172d00295ccb760575223afa3eb03dc8603862d39c9ed3638f9b
4
- data.tar.gz: 2ee8cb553eca6bcbc2c17e81cf35410d3e5f2a58de5a5deffa2f133701464e29
3
+ metadata.gz: 32775b48469a11188d19d7f43714cb1a2dc2ddcb5824aa694c2f8ff63781e8de
4
+ data.tar.gz: 733e2006980d7764f3d479d3ae3f0c86b7ea13b289bc65804ee2975a3e2bf994
5
5
  SHA512:
6
- metadata.gz: 45263b982a706e315c9557a594fff5c9a23c186dafacac70fe4ccd4df8dc8535e23baea9e0d147eca3f08c1468074326d4c13ee71c8d2b888ff2a47818ee4c6b
7
- data.tar.gz: 529e8846f8f95c50d327c08c847e2683d237f79302ba603d4dacb5987ca0516897f00e09df071a345d7ac4a9dff87a7d1a35097ad2bb8b79e09ecfe5633dc6b8
6
+ metadata.gz: 762f08d1c2e8d11774938372013ef919be875d883ca8f0608ba85b52d815ad41df6715d3d685f4eb8a0cb045ed19446e201e00d9bd2e309aebf8cd9e6705eb1d
7
+ data.tar.gz: a28294beaa509f73419cea46b34f9ad350895f04526566a88429c04f79614a2f8c67a3493353a63bd4221ea08282838692e241869109b892ea0c05ddee0b5d1e
data/README.md CHANGED
@@ -58,3 +58,13 @@ You can pass options to the serializer as 2nd argument. The following keys are s
58
58
  * `code_format`: Override the default format. This string will be passed through a `format` method so you can use some placeholders like `type` and `attribute`.
59
59
  * `status`: Set a different status, default is `400`
60
60
  * `each_serializer`: Use your own serializer for error objects.
61
+
62
+ ### Configuration
63
+
64
+ Additionally you can set `code_format` and `status` globally via:
65
+ ```ruby
66
+ InvalidModel::Serializer.configure do |config|
67
+ config.default_code_format = 'validation_error/%{model}.%{attribute}.%{type}'
68
+ config.default_status = '422'
69
+ end
70
+ ```
@@ -0,0 +1,59 @@
1
+ module InvalidModel
2
+ class EachSerializer
3
+ def initialize(resource, error, options = {})
4
+ @resource = resource
5
+ @error = error
6
+ @options = options
7
+ end
8
+
9
+ def serializable_hash
10
+ {
11
+ code: code,
12
+ detail: detail,
13
+ meta: meta,
14
+ source: source,
15
+ status: status
16
+ }.compact
17
+ end
18
+
19
+ private
20
+
21
+ attr_reader :error, :resource
22
+
23
+ delegate :attribute, :type, to: :error
24
+ delegate :errors, :model_name, to: :resource
25
+
26
+ def code
27
+ if @options[:code].respond_to?(:call)
28
+ @options[:code].call resource, error
29
+ elsif @options[:code]
30
+ @options[:code]
31
+ else
32
+ format code_format, attribute: attribute, model: model_name.singular, type: type
33
+ end
34
+ end
35
+
36
+ def code_format
37
+ @options[:code_format] || InvalidModel::Serializer.default_code_format
38
+ end
39
+
40
+ def detail
41
+ errors.full_message(attribute, errors.generate_message(attribute, type, error.options))
42
+ end
43
+
44
+ def meta
45
+ error.options.presence
46
+ end
47
+
48
+ def source
49
+ return @options[:source] if @options.key?(:source)
50
+ return if attribute == :base
51
+
52
+ {pointer: "/data/attributes/#{attribute}"}
53
+ end
54
+
55
+ def status
56
+ @options[:status] || InvalidModel::Serializer.default_status
57
+ end
58
+ end
59
+ end
@@ -1,33 +1,33 @@
1
- require 'invalid_model'
1
+ # Bundler loading entrypoint
2
+ require 'active_support'
2
3
 
3
4
  module InvalidModel
5
+ autoload :Error, 'invalid_model/error'
6
+ autoload :EachSerializer, 'invalid_model/each_serializer'
7
+
4
8
  class Serializer
9
+ include ActiveSupport::Configurable
10
+
11
+ config_accessor(:default_code_format) { 'validation_error/%<type>s' }
12
+ config_accessor(:default_status) { '400' }
13
+
5
14
  def initialize(resource, options = {})
6
15
  @resource = resource
7
16
  @options = options
8
17
  end
9
18
 
10
19
  def serializable_hash
11
- {
12
- errors: errors_list.map { |error| each_serializer_klass.new(error, @options).serializable_hash }
13
- }
20
+ list = []
21
+ @resource.errors.each do |error|
22
+ list << each_serializer_klass.new(@resource, error, @options).serializable_hash
23
+ end
24
+ {errors: list}
14
25
  end
15
26
 
16
27
  private
17
28
 
18
29
  def each_serializer_klass
19
- @options[:each_serializer] || ErrorSerializer
20
- end
21
-
22
- def errors_object
23
- @resource.errors
24
- end
25
-
26
- def errors_list
27
- list = errors_object.details.map do |key, array|
28
- array.map { |error| Error.from_hash(errors_object, key, error) }
29
- end
30
- list.flatten
30
+ @options[:each_serializer] || EachSerializer
31
31
  end
32
32
  end
33
33
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: invalid_model-serializer
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: '0.2'
5
5
  platform: ruby
6
6
  authors:
7
7
  - mkon
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-02-17 00:00:00.000000000 Z
11
+ date: 2021-04-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -16,34 +16,40 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '4.2'
19
+ version: '6.1'
20
20
  - - "<"
21
21
  - !ruby/object:Gem::Version
22
- version: '6'
22
+ version: '7'
23
23
  type: :runtime
24
24
  prerelease: false
25
25
  version_requirements: !ruby/object:Gem::Requirement
26
26
  requirements:
27
27
  - - ">="
28
28
  - !ruby/object:Gem::Version
29
- version: '4.2'
29
+ version: '6.1'
30
30
  - - "<"
31
31
  - !ruby/object:Gem::Version
32
- version: '6'
32
+ version: '7'
33
33
  - !ruby/object:Gem::Dependency
34
34
  name: activemodel
35
35
  requirement: !ruby/object:Gem::Requirement
36
36
  requirements:
37
- - - "~>"
37
+ - - ">="
38
38
  - !ruby/object:Gem::Version
39
- version: 5.2.2
39
+ version: '5.0'
40
+ - - "<"
41
+ - !ruby/object:Gem::Version
42
+ version: '7'
40
43
  type: :development
41
44
  prerelease: false
42
45
  version_requirements: !ruby/object:Gem::Requirement
43
46
  requirements:
44
- - - "~>"
47
+ - - ">="
48
+ - !ruby/object:Gem::Version
49
+ version: '5.0'
50
+ - - "<"
45
51
  - !ruby/object:Gem::Version
46
- version: 5.2.2
52
+ version: '7'
47
53
  - !ruby/object:Gem::Dependency
48
54
  name: json_spec
49
55
  requirement: !ruby/object:Gem::Requirement
@@ -78,28 +84,28 @@ dependencies:
78
84
  requirements:
79
85
  - - '='
80
86
  - !ruby/object:Gem::Version
81
- version: 0.63.1
87
+ version: 1.11.0
82
88
  type: :development
83
89
  prerelease: false
84
90
  version_requirements: !ruby/object:Gem::Requirement
85
91
  requirements:
86
92
  - - '='
87
93
  - !ruby/object:Gem::Version
88
- version: 0.63.1
94
+ version: 1.11.0
89
95
  - !ruby/object:Gem::Dependency
90
96
  name: rubocop-rspec
91
97
  requirement: !ruby/object:Gem::Requirement
92
98
  requirements:
93
99
  - - '='
94
100
  - !ruby/object:Gem::Version
95
- version: 1.32.0
101
+ version: 2.2.0
96
102
  type: :development
97
103
  prerelease: false
98
104
  version_requirements: !ruby/object:Gem::Requirement
99
105
  requirements:
100
106
  - - '='
101
107
  - !ruby/object:Gem::Version
102
- version: 1.32.0
108
+ version: 2.2.0
103
109
  - !ruby/object:Gem::Dependency
104
110
  name: simplecov
105
111
  requirement: !ruby/object:Gem::Requirement
@@ -123,11 +129,9 @@ extra_rdoc_files: []
123
129
  files:
124
130
  - LICENSE
125
131
  - README.md
126
- - lib/invalid_model.rb
127
- - lib/invalid_model/error.rb
128
- - lib/invalid_model/error_serializer.rb
132
+ - lib/invalid_model/each_serializer.rb
129
133
  - lib/invalid_model/serializer.rb
130
- homepage: https://github.com/mkon/unprocessable_entitiy_serializer
134
+ homepage: https://github.com/mkon/invalid_model-serializer
131
135
  licenses:
132
136
  - MIT
133
137
  metadata: {}
@@ -137,16 +141,16 @@ require_paths:
137
141
  - lib
138
142
  required_ruby_version: !ruby/object:Gem::Requirement
139
143
  requirements:
140
- - - ">="
144
+ - - "~>"
141
145
  - !ruby/object:Gem::Version
142
- version: '0'
146
+ version: '2.6'
143
147
  required_rubygems_version: !ruby/object:Gem::Requirement
144
148
  requirements:
145
149
  - - ">="
146
150
  - !ruby/object:Gem::Version
147
151
  version: '0'
148
152
  requirements: []
149
- rubygems_version: 3.0.2
153
+ rubygems_version: 3.1.4
150
154
  signing_key:
151
155
  specification_version: 4
152
156
  summary: Serialize models with validation errors to json-api errors.
data/lib/invalid_model.rb DELETED
@@ -1,11 +0,0 @@
1
- require 'active_support'
2
-
3
- module InvalidModel
4
- autoload :Error, 'invalid_model/error'
5
- autoload :ErrorSerializer, 'invalid_model/error_serializer'
6
-
7
- include ActiveSupport::Configurable
8
-
9
- config_accessor(:default_code_format) { 'validation_error/%<type>s' }
10
- config_accessor(:default_status) { '400' }
11
- end
@@ -1,24 +0,0 @@
1
- module InvalidModel
2
- class Error
3
- def self.from_hash(errors_object, attribute, hash)
4
- new(errors_object, attribute, hash[:error], hash.except(:error))
5
- end
6
-
7
- attr_reader :attribute, :errors_object, :type, :meta
8
-
9
- def initialize(errors_object, attribute, type, meta)
10
- @errors_object = errors_object
11
- @attribute = attribute
12
- @type = type
13
- @meta = meta
14
- end
15
-
16
- def detail
17
- @errors_object.full_message(attribute, errors_object.generate_message(attribute, type, meta))
18
- end
19
-
20
- def model_name
21
- errors_object.instance_variable_get(:@base).model_name
22
- end
23
- end
24
- end
@@ -1,48 +0,0 @@
1
- module InvalidModel
2
- class ErrorSerializer
3
- def initialize(error, options = {})
4
- @error = error
5
- @options = options
6
- end
7
-
8
- def serializable_hash
9
- {
10
- code: code,
11
- detail: detail,
12
- meta: meta.presence,
13
- source: source,
14
- status: status
15
- }.compact
16
- end
17
-
18
- private
19
-
20
- attr_reader :error
21
-
22
- delegate :attribute, :detail, :meta, :model_name, :type, to: :error
23
-
24
- def code
25
- if @options[:code]&.respond_to?(:call)
26
- @options[:code].call error
27
- elsif @options[:code]
28
- @options[:code]
29
- else
30
- format code_format, attribute: attribute, model: model_name.singular, type: type
31
- end
32
- end
33
-
34
- def code_format
35
- @options[:code_format] || InvalidModel.default_code_format
36
- end
37
-
38
- def source
39
- return if attribute == :base
40
-
41
- {pointer: "/data/attributes/#{attribute}"}
42
- end
43
-
44
- def status
45
- @options[:status] || InvalidModel.default_status
46
- end
47
- end
48
- end