servactory 2.0.4 → 2.1.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/config/locales/en.yml +3 -3
- data/config/locales/ru.yml +3 -3
- data/lib/servactory/context/workspace/internals.rb +2 -2
- data/lib/servactory/context/workspace/outputs.rb +2 -2
- data/lib/servactory/context/workspace.rb +4 -0
- data/lib/servactory/inputs/input.rb +20 -2
- data/lib/servactory/inputs/tools/validation.rb +5 -3
- data/lib/servactory/inputs/validations/required.rb +10 -9
- data/lib/servactory/inputs/workspace.rb +1 -2
- data/lib/servactory/internals/internal.rb +22 -1
- data/lib/servactory/maintenance/attributes/options/registrar.rb +11 -11
- data/lib/servactory/maintenance/attributes/tools/check_errors.rb +22 -0
- data/lib/servactory/maintenance/attributes/tools/validation.rb +81 -0
- data/lib/servactory/maintenance/attributes/validations/base.rb +23 -0
- data/lib/servactory/maintenance/attributes/validations/errors.rb +18 -0
- data/lib/servactory/maintenance/attributes/validations/inclusion.rb +75 -0
- data/lib/servactory/maintenance/attributes/validations/must.rb +102 -0
- data/lib/servactory/maintenance/attributes/validations/type.rb +62 -0
- data/lib/servactory/maintenance/validations/types.rb +10 -18
- data/lib/servactory/outputs/output.rb +22 -1
- data/lib/servactory/version.rb +2 -2
- metadata +9 -11
- data/lib/servactory/inputs/tools/check_errors.rb +0 -20
- data/lib/servactory/inputs/tools/distributor.rb +0 -24
- data/lib/servactory/inputs/validations/inclusion.rb +0 -66
- data/lib/servactory/inputs/validations/must.rb +0 -99
- data/lib/servactory/inputs/validations/type.rb +0 -52
- data/lib/servactory/internals/validations/base.rb +0 -17
- data/lib/servactory/internals/validations/type.rb +0 -31
- data/lib/servactory/outputs/validations/base.rb +0 -17
- data/lib/servactory/outputs/validations/type.rb +0 -31
@@ -0,0 +1,102 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Servactory
|
4
|
+
module Maintenance
|
5
|
+
module Attributes
|
6
|
+
module Validations
|
7
|
+
class Must < Base
|
8
|
+
DEFAULT_MESSAGE = lambda do |service_class_name:, input:, value:, code:|
|
9
|
+
I18n.t(
|
10
|
+
"servactory.#{input.i18n_name}.validations.must.default_error",
|
11
|
+
service_class_name: service_class_name,
|
12
|
+
"#{input.system_name}_name": input.name,
|
13
|
+
value: value,
|
14
|
+
code: code
|
15
|
+
)
|
16
|
+
end
|
17
|
+
|
18
|
+
SYNTAX_ERROR_MESSAGE = lambda do |service_class_name:, input:, value:, code:, exception_message:|
|
19
|
+
I18n.t(
|
20
|
+
"servactory.#{input.i18n_name}.validations.must.syntax_error",
|
21
|
+
service_class_name: service_class_name,
|
22
|
+
"#{input.system_name}_name": input.name,
|
23
|
+
value: value,
|
24
|
+
code: code,
|
25
|
+
exception_message: exception_message
|
26
|
+
)
|
27
|
+
end
|
28
|
+
|
29
|
+
private_constant :DEFAULT_MESSAGE, :SYNTAX_ERROR_MESSAGE
|
30
|
+
|
31
|
+
def self.check(context:, attribute:, value:, check_key:, check_options:)
|
32
|
+
return unless should_be_checked_for?(attribute, check_key)
|
33
|
+
|
34
|
+
new(context: context, attribute: attribute, value: value, check_options: check_options).check
|
35
|
+
end
|
36
|
+
|
37
|
+
def self.should_be_checked_for?(attribute, check_key)
|
38
|
+
check_key == :must && attribute.must_present?
|
39
|
+
end
|
40
|
+
|
41
|
+
##########################################################################
|
42
|
+
|
43
|
+
def initialize(context:, attribute:, value:, check_options:)
|
44
|
+
super()
|
45
|
+
|
46
|
+
@context = context
|
47
|
+
@attribute = attribute
|
48
|
+
@value = value
|
49
|
+
@check_options = check_options
|
50
|
+
end
|
51
|
+
|
52
|
+
def check
|
53
|
+
@check_options.each do |code, options|
|
54
|
+
message = call_or_fetch_message_from(code, options)
|
55
|
+
|
56
|
+
next if message.blank?
|
57
|
+
|
58
|
+
add_error_with(message, code)
|
59
|
+
end
|
60
|
+
|
61
|
+
errors
|
62
|
+
end
|
63
|
+
|
64
|
+
private
|
65
|
+
|
66
|
+
def call_or_fetch_message_from(code, options)
|
67
|
+
check, message = options.values_at(:is, :message)
|
68
|
+
|
69
|
+
return if check.call(value: @value)
|
70
|
+
|
71
|
+
message.presence || DEFAULT_MESSAGE
|
72
|
+
rescue StandardError => e
|
73
|
+
add_syntax_error_with(SYNTAX_ERROR_MESSAGE, code, e.message)
|
74
|
+
end
|
75
|
+
|
76
|
+
########################################################################
|
77
|
+
|
78
|
+
def add_error_with(message, code)
|
79
|
+
add_error(
|
80
|
+
message: message,
|
81
|
+
service_class_name: @context.class.name,
|
82
|
+
"#{@attribute.system_name}": @attribute,
|
83
|
+
value: @value,
|
84
|
+
code: code
|
85
|
+
)
|
86
|
+
end
|
87
|
+
|
88
|
+
def add_syntax_error_with(message, code, exception_message)
|
89
|
+
add_error(
|
90
|
+
message: message,
|
91
|
+
service_class_name: @context.class.name,
|
92
|
+
"#{@attribute.system_name}": @attribute,
|
93
|
+
value: @value,
|
94
|
+
code: code,
|
95
|
+
exception_message: exception_message
|
96
|
+
)
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end
|
@@ -0,0 +1,62 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Servactory
|
4
|
+
module Maintenance
|
5
|
+
module Attributes
|
6
|
+
module Validations
|
7
|
+
class Type < Base
|
8
|
+
def self.check(context:, attribute:, value:, check_key:, **)
|
9
|
+
return unless should_be_checked_for?(attribute, value, check_key)
|
10
|
+
|
11
|
+
new(context: context, attribute: attribute, value: value).check
|
12
|
+
end
|
13
|
+
|
14
|
+
# rubocop:disable Metrics/MethodLength, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
|
15
|
+
def self.should_be_checked_for?(attribute, value, check_key)
|
16
|
+
check_key == :types && (
|
17
|
+
(
|
18
|
+
attribute.input? && (
|
19
|
+
attribute.required? || (
|
20
|
+
attribute.optional? && !attribute.default.nil?
|
21
|
+
) || (
|
22
|
+
attribute.optional? && !value.nil?
|
23
|
+
)
|
24
|
+
)
|
25
|
+
) || attribute.internal? || attribute.output?
|
26
|
+
)
|
27
|
+
end
|
28
|
+
# rubocop:enable Metrics/MethodLength, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
|
29
|
+
|
30
|
+
def initialize(context:, attribute:, value:)
|
31
|
+
super()
|
32
|
+
|
33
|
+
@context = context
|
34
|
+
@attribute = attribute
|
35
|
+
@value = value
|
36
|
+
end
|
37
|
+
|
38
|
+
def check
|
39
|
+
Servactory::Maintenance::Validations::Types.validate!(
|
40
|
+
context: @context,
|
41
|
+
attribute: @attribute,
|
42
|
+
types: @attribute.types,
|
43
|
+
value: prepared_value,
|
44
|
+
error_callback: ->(**args) { add_error(**args) }
|
45
|
+
)
|
46
|
+
end
|
47
|
+
|
48
|
+
private
|
49
|
+
|
50
|
+
def prepared_value
|
51
|
+
@prepared_value ||=
|
52
|
+
if @attribute.input? && @attribute.optional? && !@attribute.default.nil? && @value.blank?
|
53
|
+
@attribute.default
|
54
|
+
else
|
55
|
+
@value
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
@@ -6,7 +6,6 @@ module Servactory
|
|
6
6
|
class Types # rubocop:disable Metrics/ClassLength
|
7
7
|
DEFAULT_MESSAGE = lambda do | # rubocop:disable Metrics/BlockLength
|
8
8
|
service_class_name:,
|
9
|
-
attribute_system_name:,
|
10
9
|
attribute:,
|
11
10
|
value:,
|
12
11
|
key_name:,
|
@@ -18,7 +17,7 @@ module Servactory
|
|
18
17
|
|
19
18
|
if collection_message.is_a?(Proc)
|
20
19
|
collection_message.call(
|
21
|
-
"#{
|
20
|
+
"#{attribute.system_name}_name": attribute.name,
|
22
21
|
expected_type: expected_type,
|
23
22
|
given_type: given_type
|
24
23
|
)
|
@@ -26,17 +25,17 @@ module Servactory
|
|
26
25
|
collection_message
|
27
26
|
elsif value.is_a?(attribute.types.fetch(0, Array))
|
28
27
|
I18n.t(
|
29
|
-
"servactory.#{
|
28
|
+
"servactory.#{attribute.i18n_name}.validations.type.default_error.for_collection.wrong_element_type",
|
30
29
|
service_class_name: service_class_name,
|
31
|
-
"#{
|
30
|
+
"#{attribute.system_name}_name": attribute.name,
|
32
31
|
expected_type: expected_type,
|
33
32
|
given_type: given_type
|
34
33
|
)
|
35
34
|
else
|
36
35
|
I18n.t(
|
37
|
-
"servactory.#{
|
36
|
+
"servactory.#{attribute.i18n_name}.validations.type.default_error.for_collection.wrong_type",
|
38
37
|
service_class_name: service_class_name,
|
39
|
-
"#{
|
38
|
+
"#{attribute.system_name}_name": attribute.name,
|
40
39
|
expected_type: attribute.types.fetch(0, Array),
|
41
40
|
given_type: value.class.name
|
42
41
|
)
|
@@ -46,7 +45,7 @@ module Servactory
|
|
46
45
|
|
47
46
|
if hash_message.is_a?(Proc)
|
48
47
|
hash_message.call(
|
49
|
-
"#{
|
48
|
+
"#{attribute.system_name}_name": attribute.name,
|
50
49
|
key_name: key_name,
|
51
50
|
expected_type: expected_type,
|
52
51
|
given_type: given_type
|
@@ -55,9 +54,9 @@ module Servactory
|
|
55
54
|
hash_message
|
56
55
|
else
|
57
56
|
I18n.t(
|
58
|
-
"servactory.#{
|
57
|
+
"servactory.#{attribute.i18n_name}.validations.type.default_error.for_hash.wrong_element_type",
|
59
58
|
service_class_name: service_class_name,
|
60
|
-
"#{
|
59
|
+
"#{attribute.system_name}_name": attribute.name,
|
61
60
|
key_name: key_name,
|
62
61
|
expected_type: expected_type,
|
63
62
|
given_type: given_type
|
@@ -65,9 +64,9 @@ module Servactory
|
|
65
64
|
end
|
66
65
|
else
|
67
66
|
I18n.t(
|
68
|
-
"servactory.#{
|
67
|
+
"servactory.#{attribute.i18n_name}.validations.type.default_error.default",
|
69
68
|
service_class_name: service_class_name,
|
70
|
-
"#{
|
69
|
+
"#{attribute.system_name}_name": attribute.name,
|
71
70
|
expected_type: expected_type,
|
72
71
|
given_type: given_type
|
73
72
|
)
|
@@ -117,7 +116,6 @@ module Servactory
|
|
117
116
|
return @error_callback.call(
|
118
117
|
message: DEFAULT_MESSAGE,
|
119
118
|
service_class_name: @context.class.name,
|
120
|
-
attribute_system_name: attribute_system_name,
|
121
119
|
attribute: @attribute,
|
122
120
|
value: @value,
|
123
121
|
key_name: nil,
|
@@ -130,7 +128,6 @@ module Servactory
|
|
130
128
|
return @error_callback.call(
|
131
129
|
message: DEFAULT_MESSAGE,
|
132
130
|
service_class_name: @context.class.name,
|
133
|
-
attribute_system_name: attribute_system_name,
|
134
131
|
attribute: @attribute,
|
135
132
|
value: @value,
|
136
133
|
key_name: first_error.fetch(:key_name),
|
@@ -142,7 +139,6 @@ module Servactory
|
|
142
139
|
@error_callback.call(
|
143
140
|
message: DEFAULT_MESSAGE,
|
144
141
|
service_class_name: @context.class.name,
|
145
|
-
attribute_system_name: attribute_system_name,
|
146
142
|
attribute: @attribute,
|
147
143
|
value: @value,
|
148
144
|
key_name: nil,
|
@@ -153,10 +149,6 @@ module Servactory
|
|
153
149
|
|
154
150
|
private
|
155
151
|
|
156
|
-
def attribute_system_name
|
157
|
-
@attribute.class.name.demodulize.downcase.to_sym
|
158
|
-
end
|
159
|
-
|
160
152
|
def prepared_types
|
161
153
|
@prepared_types ||=
|
162
154
|
if @attribute.collection_mode?
|
@@ -3,7 +3,8 @@
|
|
3
3
|
module Servactory
|
4
4
|
module Outputs
|
5
5
|
class Output
|
6
|
-
attr_reader :name
|
6
|
+
attr_reader :name,
|
7
|
+
:collection_of_options
|
7
8
|
|
8
9
|
def initialize(
|
9
10
|
name,
|
@@ -49,6 +50,26 @@ module Servactory
|
|
49
50
|
def options_for_checks
|
50
51
|
@collection_of_options.options_for_checks
|
51
52
|
end
|
53
|
+
|
54
|
+
def system_name
|
55
|
+
self.class.name.demodulize.downcase.to_sym
|
56
|
+
end
|
57
|
+
|
58
|
+
def i18n_name
|
59
|
+
system_name.to_s.pluralize
|
60
|
+
end
|
61
|
+
|
62
|
+
def input?
|
63
|
+
false
|
64
|
+
end
|
65
|
+
|
66
|
+
def internal?
|
67
|
+
false
|
68
|
+
end
|
69
|
+
|
70
|
+
def output?
|
71
|
+
true
|
72
|
+
end
|
52
73
|
end
|
53
74
|
end
|
54
75
|
end
|
data/lib/servactory/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: servactory
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Anton Sokolov
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2024-01-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -255,23 +255,16 @@ files:
|
|
255
255
|
- lib/servactory/inputs/collection.rb
|
256
256
|
- lib/servactory/inputs/dsl.rb
|
257
257
|
- lib/servactory/inputs/input.rb
|
258
|
-
- lib/servactory/inputs/tools/check_errors.rb
|
259
|
-
- lib/servactory/inputs/tools/distributor.rb
|
260
258
|
- lib/servactory/inputs/tools/rules.rb
|
261
259
|
- lib/servactory/inputs/tools/unnecessary.rb
|
262
260
|
- lib/servactory/inputs/tools/validation.rb
|
263
261
|
- lib/servactory/inputs/validations/base.rb
|
264
262
|
- lib/servactory/inputs/validations/errors.rb
|
265
|
-
- lib/servactory/inputs/validations/inclusion.rb
|
266
|
-
- lib/servactory/inputs/validations/must.rb
|
267
263
|
- lib/servactory/inputs/validations/required.rb
|
268
|
-
- lib/servactory/inputs/validations/type.rb
|
269
264
|
- lib/servactory/inputs/workspace.rb
|
270
265
|
- lib/servactory/internals/collection.rb
|
271
266
|
- lib/servactory/internals/dsl.rb
|
272
267
|
- lib/servactory/internals/internal.rb
|
273
|
-
- lib/servactory/internals/validations/base.rb
|
274
|
-
- lib/servactory/internals/validations/type.rb
|
275
268
|
- lib/servactory/maintenance/attributes/define_conflict.rb
|
276
269
|
- lib/servactory/maintenance/attributes/define_method.rb
|
277
270
|
- lib/servactory/maintenance/attributes/option.rb
|
@@ -279,6 +272,13 @@ files:
|
|
279
272
|
- lib/servactory/maintenance/attributes/option_helpers_collection.rb
|
280
273
|
- lib/servactory/maintenance/attributes/options/registrar.rb
|
281
274
|
- lib/servactory/maintenance/attributes/options_collection.rb
|
275
|
+
- lib/servactory/maintenance/attributes/tools/check_errors.rb
|
276
|
+
- lib/servactory/maintenance/attributes/tools/validation.rb
|
277
|
+
- lib/servactory/maintenance/attributes/validations/base.rb
|
278
|
+
- lib/servactory/maintenance/attributes/validations/errors.rb
|
279
|
+
- lib/servactory/maintenance/attributes/validations/inclusion.rb
|
280
|
+
- lib/servactory/maintenance/attributes/validations/must.rb
|
281
|
+
- lib/servactory/maintenance/attributes/validations/type.rb
|
282
282
|
- lib/servactory/maintenance/collection_mode/class_names_collection.rb
|
283
283
|
- lib/servactory/maintenance/hash_mode/class_names_collection.rb
|
284
284
|
- lib/servactory/maintenance/validations/collection.rb
|
@@ -287,8 +287,6 @@ files:
|
|
287
287
|
- lib/servactory/outputs/collection.rb
|
288
288
|
- lib/servactory/outputs/dsl.rb
|
289
289
|
- lib/servactory/outputs/output.rb
|
290
|
-
- lib/servactory/outputs/validations/base.rb
|
291
|
-
- lib/servactory/outputs/validations/type.rb
|
292
290
|
- lib/servactory/result.rb
|
293
291
|
- lib/servactory/test_kit/fake_type.rb
|
294
292
|
- lib/servactory/test_kit/result.rb
|
@@ -1,20 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Servactory
|
4
|
-
module Inputs
|
5
|
-
module Tools
|
6
|
-
class CheckErrors
|
7
|
-
extend Forwardable
|
8
|
-
def_delegators :@collection, :merge, :reject, :first, :empty?
|
9
|
-
|
10
|
-
def initialize(collection = Set.new)
|
11
|
-
@collection = collection
|
12
|
-
end
|
13
|
-
|
14
|
-
def not_blank
|
15
|
-
CheckErrors.new(reject(&:blank?))
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
@@ -1,24 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Servactory
|
4
|
-
module Inputs
|
5
|
-
module Tools
|
6
|
-
class Distributor
|
7
|
-
def self.assign!(...)
|
8
|
-
new(...).assign!
|
9
|
-
end
|
10
|
-
|
11
|
-
def initialize(incoming_arguments, collection_of_inputs)
|
12
|
-
@incoming_arguments = incoming_arguments
|
13
|
-
@collection_of_inputs = collection_of_inputs
|
14
|
-
end
|
15
|
-
|
16
|
-
def assign!
|
17
|
-
@collection_of_inputs.map do |input|
|
18
|
-
input.value = @incoming_arguments.fetch(input.name, nil)
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|
@@ -1,66 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Servactory
|
4
|
-
module Inputs
|
5
|
-
module Validations
|
6
|
-
class Inclusion < Base
|
7
|
-
DEFAULT_MESSAGE = lambda do |service_class_name:, input:, value:|
|
8
|
-
I18n.t(
|
9
|
-
"servactory.inputs.checks.inclusion.default_error",
|
10
|
-
service_class_name: service_class_name,
|
11
|
-
input_name: input.name,
|
12
|
-
input_inclusion: input.inclusion[:in],
|
13
|
-
value: value
|
14
|
-
)
|
15
|
-
end
|
16
|
-
|
17
|
-
private_constant :DEFAULT_MESSAGE
|
18
|
-
|
19
|
-
def self.check(context:, input:, check_key:, **)
|
20
|
-
return unless should_be_checked_for?(input, check_key)
|
21
|
-
|
22
|
-
new(context: context, input: input).check
|
23
|
-
end
|
24
|
-
|
25
|
-
def self.should_be_checked_for?(input, check_key)
|
26
|
-
check_key == :inclusion && (
|
27
|
-
input.required? || (
|
28
|
-
input.optional? && !input.default.nil?
|
29
|
-
) || (
|
30
|
-
input.optional? && !input.value.nil?
|
31
|
-
)
|
32
|
-
)
|
33
|
-
end
|
34
|
-
|
35
|
-
##########################################################################
|
36
|
-
|
37
|
-
def initialize(context:, input:)
|
38
|
-
super()
|
39
|
-
|
40
|
-
@context = context
|
41
|
-
@input = input
|
42
|
-
end
|
43
|
-
|
44
|
-
def check
|
45
|
-
inclusion_in, message = @input.inclusion.values_at(:in, :message)
|
46
|
-
|
47
|
-
return if inclusion_in.nil?
|
48
|
-
return if inclusion_in.include?(@input.value)
|
49
|
-
|
50
|
-
add_error_with(message)
|
51
|
-
end
|
52
|
-
|
53
|
-
private
|
54
|
-
|
55
|
-
def add_error_with(message)
|
56
|
-
add_error(
|
57
|
-
message: message.presence || DEFAULT_MESSAGE,
|
58
|
-
service_class_name: @context.class.name,
|
59
|
-
input: @input,
|
60
|
-
value: @input.value
|
61
|
-
)
|
62
|
-
end
|
63
|
-
end
|
64
|
-
end
|
65
|
-
end
|
66
|
-
end
|
@@ -1,99 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Servactory
|
4
|
-
module Inputs
|
5
|
-
module Validations
|
6
|
-
class Must < Base
|
7
|
-
DEFAULT_MESSAGE = lambda do |service_class_name:, input:, value:, code:|
|
8
|
-
I18n.t(
|
9
|
-
"servactory.inputs.checks.must.default_error",
|
10
|
-
service_class_name: service_class_name,
|
11
|
-
input_name: input.name,
|
12
|
-
value: value,
|
13
|
-
code: code
|
14
|
-
)
|
15
|
-
end
|
16
|
-
|
17
|
-
SYNTAX_ERROR_MESSAGE = lambda do |service_class_name:, input:, value:, code:, exception_message:|
|
18
|
-
I18n.t(
|
19
|
-
"servactory.inputs.checks.must.syntax_error",
|
20
|
-
service_class_name: service_class_name,
|
21
|
-
input_name: input.name,
|
22
|
-
value: value,
|
23
|
-
code: code,
|
24
|
-
exception_message: exception_message
|
25
|
-
)
|
26
|
-
end
|
27
|
-
|
28
|
-
private_constant :DEFAULT_MESSAGE, :SYNTAX_ERROR_MESSAGE
|
29
|
-
|
30
|
-
def self.check(context:, input:, check_key:, check_options:)
|
31
|
-
return unless should_be_checked_for?(input, check_key)
|
32
|
-
|
33
|
-
new(context: context, input: input, check_options: check_options).check
|
34
|
-
end
|
35
|
-
|
36
|
-
def self.should_be_checked_for?(input, check_key)
|
37
|
-
check_key == :must && input.must_present?
|
38
|
-
end
|
39
|
-
|
40
|
-
##########################################################################
|
41
|
-
|
42
|
-
def initialize(context:, input:, check_options:)
|
43
|
-
super()
|
44
|
-
|
45
|
-
@context = context
|
46
|
-
@input = input
|
47
|
-
@check_options = check_options
|
48
|
-
end
|
49
|
-
|
50
|
-
def check
|
51
|
-
@check_options.each do |code, options|
|
52
|
-
message = call_or_fetch_message_from(code, options)
|
53
|
-
|
54
|
-
next if message.blank?
|
55
|
-
|
56
|
-
add_error_with(message, code)
|
57
|
-
end
|
58
|
-
|
59
|
-
errors
|
60
|
-
end
|
61
|
-
|
62
|
-
private
|
63
|
-
|
64
|
-
def call_or_fetch_message_from(code, options)
|
65
|
-
check, message = options.values_at(:is, :message)
|
66
|
-
|
67
|
-
return if check.call(value: @input.value)
|
68
|
-
|
69
|
-
message.presence || DEFAULT_MESSAGE
|
70
|
-
rescue StandardError => e
|
71
|
-
add_syntax_error_with(SYNTAX_ERROR_MESSAGE, code, e.message)
|
72
|
-
end
|
73
|
-
|
74
|
-
########################################################################
|
75
|
-
|
76
|
-
def add_error_with(message, code)
|
77
|
-
add_error(
|
78
|
-
message: message,
|
79
|
-
service_class_name: @context.class.name,
|
80
|
-
input: @input,
|
81
|
-
value: @input.value,
|
82
|
-
code: code
|
83
|
-
)
|
84
|
-
end
|
85
|
-
|
86
|
-
def add_syntax_error_with(message, code, exception_message)
|
87
|
-
add_error(
|
88
|
-
message: message,
|
89
|
-
service_class_name: @context.class.name,
|
90
|
-
input: @input,
|
91
|
-
value: @input.value,
|
92
|
-
code: code,
|
93
|
-
exception_message: exception_message
|
94
|
-
)
|
95
|
-
end
|
96
|
-
end
|
97
|
-
end
|
98
|
-
end
|
99
|
-
end
|
@@ -1,52 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Servactory
|
4
|
-
module Inputs
|
5
|
-
module Validations
|
6
|
-
class Type < Base
|
7
|
-
def self.check(context:, input:, check_key:, **)
|
8
|
-
return unless should_be_checked_for?(input, check_key)
|
9
|
-
|
10
|
-
new(context: context, input: input).check
|
11
|
-
end
|
12
|
-
|
13
|
-
def self.should_be_checked_for?(input, check_key)
|
14
|
-
check_key == :types && (
|
15
|
-
input.required? || (
|
16
|
-
input.optional? && !input.default.nil?
|
17
|
-
) || (
|
18
|
-
input.optional? && !input.value.nil?
|
19
|
-
)
|
20
|
-
)
|
21
|
-
end
|
22
|
-
|
23
|
-
def initialize(context:, input:)
|
24
|
-
super()
|
25
|
-
|
26
|
-
@context = context
|
27
|
-
@input = input
|
28
|
-
end
|
29
|
-
|
30
|
-
def check
|
31
|
-
Servactory::Maintenance::Validations::Types.validate!(
|
32
|
-
context: @context,
|
33
|
-
attribute: @input,
|
34
|
-
types: @input.types,
|
35
|
-
value: prepared_value,
|
36
|
-
error_callback: ->(**args) { add_error(**args) }
|
37
|
-
)
|
38
|
-
end
|
39
|
-
|
40
|
-
private
|
41
|
-
|
42
|
-
def prepared_value
|
43
|
-
@prepared_value ||= if @input.optional? && !@input.default.nil? && @input.value.blank?
|
44
|
-
@input.default
|
45
|
-
else
|
46
|
-
@input.value
|
47
|
-
end
|
48
|
-
end
|
49
|
-
end
|
50
|
-
end
|
51
|
-
end
|
52
|
-
end
|
@@ -1,17 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Servactory
|
4
|
-
module Internals
|
5
|
-
module Validations
|
6
|
-
class Base
|
7
|
-
protected
|
8
|
-
|
9
|
-
def raise_error_with(message:, **attributes)
|
10
|
-
message = message.call(**attributes) if message.is_a?(Proc)
|
11
|
-
|
12
|
-
raise @context.class.config.internal_error_class.new(message: message)
|
13
|
-
end
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|