invalid_model-serializer 0.1.0 → 0.2

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: 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