servactory 2.0.0.rc2 → 2.0.0.rc4

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.
Files changed (38) hide show
  1. checksums.yaml +4 -4
  2. data/config/locales/en.yml +2 -1
  3. data/config/locales/ru.yml +2 -1
  4. data/lib/servactory/{methods/method.rb → actions/action.rb} +2 -2
  5. data/lib/servactory/{methods/aliases_for_make → actions/aliases}/collection.rb +2 -2
  6. data/lib/servactory/{methods/method_collection.rb → actions/collection.rb} +3 -3
  7. data/lib/servactory/{methods → actions}/dsl.rb +8 -8
  8. data/lib/servactory/{methods/shortcuts_for_make → actions/shortcuts}/collection.rb +2 -2
  9. data/lib/servactory/actions/stages/collection.rb +20 -0
  10. data/lib/servactory/actions/stages/stage.rb +30 -0
  11. data/lib/servactory/{methods → actions}/tools/runner.rb +1 -1
  12. data/lib/servactory/{methods → actions}/workspace.rb +2 -2
  13. data/lib/servactory/base.rb +1 -1
  14. data/lib/servactory/configuration/dsl.rb +2 -2
  15. data/lib/servactory/configuration/factory.rb +5 -5
  16. data/lib/servactory/configuration/setup.rb +4 -4
  17. data/lib/servactory/context/workspace/inputs.rb +7 -5
  18. data/lib/servactory/dsl.rb +1 -1
  19. data/lib/servactory/inputs/input.rb +3 -3
  20. data/lib/servactory/inputs/validations/base.rb +1 -1
  21. data/lib/servactory/inputs/validations/inclusion.rb +1 -1
  22. data/lib/servactory/inputs/validations/must.rb +2 -2
  23. data/lib/servactory/inputs/validations/required.rb +1 -1
  24. data/lib/servactory/inputs/validations/type.rb +13 -114
  25. data/lib/servactory/internals/internal.rb +3 -3
  26. data/lib/servactory/internals/validations/base.rb +1 -1
  27. data/lib/servactory/internals/validations/type.rb +6 -124
  28. data/lib/servactory/maintenance/attributes/option.rb +13 -7
  29. data/lib/servactory/maintenance/validations/collection.rb +66 -0
  30. data/lib/servactory/maintenance/validations/object_schema.rb +15 -18
  31. data/lib/servactory/maintenance/validations/types.rb +181 -0
  32. data/lib/servactory/outputs/output.rb +3 -3
  33. data/lib/servactory/outputs/validations/base.rb +1 -1
  34. data/lib/servactory/outputs/validations/type.rb +6 -124
  35. data/lib/servactory/version.rb +1 -1
  36. metadata +21 -19
  37. data/lib/servactory/methods/stage.rb +0 -28
  38. data/lib/servactory/methods/stage_collection.rb +0 -18
@@ -4,65 +4,10 @@ module Servactory
4
4
  module Internals
5
5
  module Validations
6
6
  class Type < Base
7
- DEFAULT_MESSAGE = lambda do |service_class_name:, internal:, value:, key_name:, expected_type:, given_type:| # rubocop:disable Metrics/BlockLength
8
- if internal.collection_mode?
9
- collection_message = internal.consists_of.fetch(:message)
10
-
11
- if collection_message.is_a?(Proc)
12
- collection_message.call(internal: internal, expected_type: expected_type)
13
- elsif collection_message.is_a?(String) && collection_message.present?
14
- collection_message
15
- elsif value.is_a?(internal.types.fetch(0, Array))
16
- I18n.t(
17
- "servactory.internals.checks.type.default_error.for_collection.wrong_element_type",
18
- service_class_name: service_class_name,
19
- internal_name: internal.name,
20
- expected_type: expected_type,
21
- given_type: given_type
22
- )
23
- else
24
- I18n.t(
25
- "servactory.internals.checks.type.default_error.for_collection.wrong_type",
26
- service_class_name: service_class_name,
27
- internal_name: internal.name,
28
- expected_type: internal.types.fetch(0, Array),
29
- given_type: value.class.name
30
- )
31
- end
32
- elsif internal.hash_mode? && key_name.present?
33
- I18n.t(
34
- "servactory.internals.checks.type.default_error.for_hash.wrong_element_type",
35
- service_class_name: service_class_name,
36
- internal_name: internal.name,
37
- key_name: key_name,
38
- expected_type: expected_type,
39
- given_type: given_type
40
- )
41
- else
42
- I18n.t(
43
- "servactory.internals.checks.type.default_error.default",
44
- service_class_name: service_class_name,
45
- internal_name: internal.name,
46
- expected_type: expected_type,
47
- given_type: given_type
48
- )
49
- end
50
- end
51
-
52
- private_constant :DEFAULT_MESSAGE
53
-
54
7
  def self.validate!(...)
55
- return unless should_be_checked?
56
-
57
8
  new(...).validate!
58
9
  end
59
10
 
60
- def self.should_be_checked?
61
- true
62
- end
63
-
64
- ##########################################################################
65
-
66
11
  def initialize(context:, internal:, value:)
67
12
  super()
68
13
 
@@ -71,76 +16,13 @@ module Servactory
71
16
  @value = value
72
17
  end
73
18
 
74
- def validate! # rubocop:disable Metrics/MethodLength, Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
75
- object_schema_validator = nil
76
-
77
- return if prepared_types.any? do |type|
78
- if @internal.collection_mode?
79
- @value.is_a?(@internal.types.fetch(0, Array)) &&
80
- @value.respond_to?(:all?) && @value.all?(type)
81
- elsif @internal.hash_mode?
82
- object_schema_validator = Servactory::Maintenance::Validations::ObjectSchema.validate(
83
- object: @value,
84
- schema: @internal.schema
85
- )
86
-
87
- object_schema_validator.valid?
88
- else
89
- @value.is_a?(type)
90
- end
91
- end
92
-
93
- if (first_error = object_schema_validator&.errors&.first).present?
94
- raise_default_object_error_with(first_error)
95
- end
96
-
97
- raise_default_error
98
- end
99
-
100
- private
101
-
102
- def prepared_types
103
- @prepared_types ||=
104
- if @internal.collection_mode?
105
- prepared_types_from(Array(@internal.consists_of.fetch(:type, [])))
106
- else
107
- prepared_types_from(@internal.types)
108
- end
109
- end
110
-
111
- def prepared_types_from(types)
112
- types.map do |type|
113
- if type.is_a?(String)
114
- Object.const_get(type)
115
- else
116
- type
117
- end
118
- end
119
- end
120
-
121
- ########################################################################
122
-
123
- def raise_default_object_error_with(error)
124
- raise_error_with(
125
- DEFAULT_MESSAGE,
126
- service_class_name: @context.class.name,
127
- internal: @internal,
128
- value: @value,
129
- key_name: error.fetch(:name),
130
- expected_type: error.fetch(:expected_type),
131
- given_type: error.fetch(:given_type)
132
- )
133
- end
134
-
135
- def raise_default_error
136
- raise_error_with(
137
- DEFAULT_MESSAGE,
138
- service_class_name: @context.class.name,
139
- internal: @internal,
19
+ def validate!
20
+ Servactory::Maintenance::Validations::Types.validate!(
21
+ context: @context,
22
+ attribute: @internal,
23
+ types: @internal.types,
140
24
  value: @value,
141
- key_name: nil,
142
- expected_type: prepared_types.join(", "),
143
- given_type: @value.class.name
25
+ error_callback: ->(**args) { raise_error_with(**args) }
144
26
  )
145
27
  end
146
28
  end
@@ -75,6 +75,7 @@ module Servactory
75
75
  )
76
76
  end
77
77
 
78
+ # rubocop:disable Metrics/MethodLength
78
79
  def prepare_advanced_for(
79
80
  body:,
80
81
  body_key:,
@@ -82,17 +83,22 @@ module Servactory
82
83
  body_fallback:
83
84
  )
84
85
  if body.is_a?(Hash)
85
- message = body.fetch(:message, nil)
86
-
87
- DEFAULT_BODY.call(
88
- key: body_key,
89
- body: body.fetch(body_key, message.present? ? body_value : body_fallback),
90
- message: message
91
- )
86
+ if @name == :schema && body.fetch(body_key, nil).nil?
87
+ DEFAULT_BODY.call(key: body_key, body: body)
88
+ else
89
+ message = body.fetch(:message, nil)
90
+
91
+ DEFAULT_BODY.call(
92
+ key: body_key,
93
+ body: body.fetch(body_key, message.present? ? body_value : body_fallback),
94
+ message: message
95
+ )
96
+ end
92
97
  else
93
98
  DEFAULT_BODY.call(key: body_key, body: body)
94
99
  end
95
100
  end
101
+ # rubocop:enable Metrics/MethodLength
96
102
 
97
103
  def prepare_methods_for(attribute)
98
104
  attribute.instance_eval(define_methods_template) if define_methods_template.present?
@@ -0,0 +1,66 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Servactory
4
+ module Maintenance
5
+ module Validations
6
+ class Collection
7
+ attr_reader :errors
8
+
9
+ def self.validate(...)
10
+ new(...).validate
11
+ end
12
+
13
+ def initialize(value:, types:, type:)
14
+ @value = value
15
+ @types = types
16
+ @type = type
17
+
18
+ @errors = []
19
+ end
20
+
21
+ def validate
22
+ unless @value.is_a?(prepared_type)
23
+ add_error(
24
+ expected_type: prepared_type.name,
25
+ given_type: @value.class.name
26
+ )
27
+
28
+ return self
29
+ end
30
+
31
+ validate_value!
32
+
33
+ self
34
+ end
35
+
36
+ def valid?
37
+ @errors.empty?
38
+ end
39
+
40
+ private
41
+
42
+ def prepared_type
43
+ @prepared_type ||= @types.fetch(0, Array)
44
+ end
45
+
46
+ def validate_value!
47
+ @value.each do |value_item|
48
+ next if value_item.is_a?(@type)
49
+
50
+ add_error(
51
+ expected_type: @type,
52
+ given_type: value_item.class.name
53
+ )
54
+ end
55
+ end
56
+
57
+ def add_error(expected_type:, given_type:)
58
+ @errors << {
59
+ expected_type: expected_type,
60
+ given_type: given_type
61
+ }
62
+ end
63
+ end
64
+ end
65
+ end
66
+ end
@@ -15,31 +15,30 @@ module Servactory
15
15
 
16
16
  def initialize(object:, schema:)
17
17
  @object = object
18
- @schema = schema
18
+ @schema = schema.fetch(:is)
19
19
 
20
- @valid = false
21
20
  @errors = []
22
21
  end
23
22
 
24
23
  def validate
25
- @valid = validate_for(object: @object, schema: @schema)
24
+ validate_for(object: @object, schema: @schema)
26
25
 
27
26
  self
28
27
  end
29
28
 
30
29
  def valid?
31
- @valid
30
+ @errors.empty?
32
31
  end
33
32
 
34
33
  private
35
34
 
36
- def validate_for(object:, schema:, root_schema_key: nil) # rubocop:disable Metrics/MethodLength
35
+ def validate_for(object:, schema:, root_schema_key: nil) # rubocop:disable Metrics/MethodLength, Metrics/AbcSize
37
36
  unless object.respond_to?(:fetch)
38
- add_error(name: root_schema_key, expected_type: Hash, given_type: object.class)
39
- return false
37
+ add_error(key_name: root_schema_key, expected_type: Hash.name, given_type: object.class.name)
38
+ return
40
39
  end
41
40
 
42
- schema.all? do |schema_key, schema_value|
41
+ schema.each do |schema_key, schema_value|
43
42
  attribute_type = schema_value.fetch(:type, String)
44
43
 
45
44
  if attribute_type == Hash
@@ -57,15 +56,13 @@ module Servactory
57
56
  attribute_required: schema_value.fetch(:required, true)
58
57
  )
59
58
 
60
- unless is_success
61
- add_error(
62
- name: schema_key,
63
- expected_type: attribute_type,
64
- given_type: object.fetch(schema_key, nil).class
65
- )
66
- end
59
+ next if is_success
67
60
 
68
- is_success
61
+ add_error(
62
+ key_name: schema_key,
63
+ expected_type: attribute_type,
64
+ given_type: object.fetch(schema_key, nil).class.name
65
+ )
69
66
  end
70
67
  end
71
68
  end
@@ -106,9 +103,9 @@ module Servactory
106
103
  value.fetch(:default, nil)
107
104
  end
108
105
 
109
- def add_error(name:, expected_type:, given_type:)
106
+ def add_error(key_name:, expected_type:, given_type:)
110
107
  @errors << {
111
- name: name,
108
+ key_name: key_name,
112
109
  expected_type: expected_type,
113
110
  given_type: given_type
114
111
  }
@@ -0,0 +1,181 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Servactory
4
+ module Maintenance
5
+ module Validations
6
+ class Types # rubocop:disable Metrics/ClassLength
7
+ DEFAULT_MESSAGE = lambda do | # rubocop:disable Metrics/BlockLength
8
+ service_class_name:,
9
+ attribute_system_name:,
10
+ attribute:,
11
+ value:,
12
+ key_name:,
13
+ expected_type:,
14
+ given_type:
15
+ | # do
16
+ if attribute.collection_mode?
17
+ collection_message = attribute.consists_of.fetch(:message)
18
+
19
+ if collection_message.is_a?(Proc)
20
+ collection_message.call(
21
+ "#{attribute_system_name}_name": attribute.name,
22
+ expected_type: expected_type,
23
+ given_type: given_type
24
+ )
25
+ elsif collection_message.is_a?(String) && collection_message.present?
26
+ collection_message
27
+ elsif value.is_a?(attribute.types.fetch(0, Array))
28
+ I18n.t(
29
+ "servactory.#{attribute_system_name.to_s.pluralize}.checks.type.default_error.for_collection.wrong_element_type", # rubocop:disable Layout/LineLength
30
+ service_class_name: service_class_name,
31
+ "#{attribute_system_name}_name": attribute.name,
32
+ expected_type: expected_type,
33
+ given_type: given_type
34
+ )
35
+ else
36
+ I18n.t(
37
+ "servactory.#{attribute_system_name.to_s.pluralize}.checks.type.default_error.for_collection.wrong_type", # rubocop:disable Layout/LineLength
38
+ service_class_name: service_class_name,
39
+ "#{attribute_system_name}_name": attribute.name,
40
+ expected_type: attribute.types.fetch(0, Array),
41
+ given_type: value.class.name
42
+ )
43
+ end
44
+ elsif attribute.hash_mode? && key_name.present?
45
+ hash_message = attribute.schema.fetch(:message)
46
+
47
+ if hash_message.is_a?(Proc)
48
+ hash_message.call(
49
+ "#{attribute_system_name}_name": attribute.name,
50
+ key_name: key_name,
51
+ expected_type: expected_type,
52
+ given_type: given_type
53
+ )
54
+ elsif hash_message.is_a?(String) && hash_message.present?
55
+ hash_message
56
+ else
57
+ I18n.t(
58
+ "servactory.#{attribute_system_name.to_s.pluralize}.checks.type.default_error.for_hash.wrong_element_type", # rubocop:disable Layout/LineLength
59
+ service_class_name: service_class_name,
60
+ "#{attribute_system_name}_name": attribute.name,
61
+ key_name: key_name,
62
+ expected_type: expected_type,
63
+ given_type: given_type
64
+ )
65
+ end
66
+ else
67
+ I18n.t(
68
+ "servactory.#{attribute_system_name.to_s.pluralize}.checks.type.default_error.default",
69
+ service_class_name: service_class_name,
70
+ "#{attribute_system_name}_name": attribute.name,
71
+ expected_type: expected_type,
72
+ given_type: given_type
73
+ )
74
+ end
75
+ end
76
+
77
+ private_constant :DEFAULT_MESSAGE
78
+
79
+ def self.validate!(...)
80
+ new(...).validate!
81
+ end
82
+
83
+ def initialize(context:, attribute:, types:, value:, error_callback:)
84
+ @context = context
85
+ @attribute = attribute
86
+ @types = types
87
+ @value = value
88
+ @error_callback = error_callback
89
+ end
90
+
91
+ def validate! # rubocop:disable Metrics/MethodLength, Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
92
+ collection_validator = nil
93
+ object_schema_validator = nil
94
+
95
+ return if prepared_types.any? do |type|
96
+ if @attribute.collection_mode?
97
+ collection_validator = Servactory::Maintenance::Validations::Collection.validate(
98
+ value: @value,
99
+ types: @attribute.types,
100
+ type: type
101
+ )
102
+
103
+ collection_validator.valid?
104
+ elsif @attribute.hash_mode?
105
+ object_schema_validator = Servactory::Maintenance::Validations::ObjectSchema.validate(
106
+ object: @value,
107
+ schema: @attribute.schema
108
+ )
109
+
110
+ object_schema_validator.valid?
111
+ else
112
+ @value.is_a?(type)
113
+ end
114
+ end
115
+
116
+ if (first_error = collection_validator&.errors&.first).present?
117
+ return @error_callback.call(
118
+ message: DEFAULT_MESSAGE,
119
+ service_class_name: @context.class.name,
120
+ attribute_system_name: attribute_system_name,
121
+ attribute: @attribute,
122
+ value: @value,
123
+ key_name: nil,
124
+ expected_type: first_error.fetch(:expected_type),
125
+ given_type: first_error.fetch(:given_type)
126
+ )
127
+ end
128
+
129
+ if (first_error = object_schema_validator&.errors&.first).present?
130
+ return @error_callback.call(
131
+ message: DEFAULT_MESSAGE,
132
+ service_class_name: @context.class.name,
133
+ attribute_system_name: attribute_system_name,
134
+ attribute: @attribute,
135
+ value: @value,
136
+ key_name: first_error.fetch(:key_name),
137
+ expected_type: first_error.fetch(:expected_type),
138
+ given_type: first_error.fetch(:given_type)
139
+ )
140
+ end
141
+
142
+ @error_callback.call(
143
+ message: DEFAULT_MESSAGE,
144
+ service_class_name: @context.class.name,
145
+ attribute_system_name: attribute_system_name,
146
+ attribute: @attribute,
147
+ value: @value,
148
+ key_name: nil,
149
+ expected_type: prepared_types.join(", "),
150
+ given_type: @value.class.name
151
+ )
152
+ end
153
+
154
+ private
155
+
156
+ def attribute_system_name
157
+ @attribute.class.name.demodulize.downcase.to_sym
158
+ end
159
+
160
+ def prepared_types
161
+ @prepared_types ||=
162
+ if @attribute.collection_mode?
163
+ prepared_types_from(Array(@attribute.consists_of.fetch(:type, [])))
164
+ else
165
+ prepared_types_from(@types)
166
+ end
167
+ end
168
+
169
+ def prepared_types_from(types)
170
+ types.map do |type|
171
+ if type.is_a?(String)
172
+ Object.const_get(type)
173
+ else
174
+ type
175
+ end
176
+ end
177
+ end
178
+ end
179
+ end
180
+ end
181
+ end
@@ -37,7 +37,7 @@ module Servactory
37
37
  # Check Class: Servactory::Outputs::Validations::Type
38
38
  add_types_option_with(type)
39
39
  add_collection_option_with(type, options)
40
- add_object_option_with(type, options)
40
+ add_hash_option_with(type, options)
41
41
  end
42
42
 
43
43
  def add_types_option_with(type)
@@ -71,7 +71,7 @@ module Servactory
71
71
  )
72
72
  end
73
73
 
74
- def add_object_option_with(type, options) # rubocop:disable Metrics/MethodLength
74
+ def add_hash_option_with(type, options) # rubocop:disable Metrics/MethodLength
75
75
  collection_of_options << Servactory::Maintenance::Attributes::Option.new(
76
76
  name: :schema,
77
77
  attribute: self,
@@ -83,8 +83,8 @@ module Servactory
83
83
  )
84
84
  ],
85
85
  need_for_checks: false,
86
+ body_key: :is,
86
87
  body_fallback: {},
87
- with_advanced_mode: false,
88
88
  **options
89
89
  )
90
90
  end
@@ -6,7 +6,7 @@ module Servactory
6
6
  class Base
7
7
  protected
8
8
 
9
- def raise_error_with(message, **attributes)
9
+ def raise_error_with(message:, **attributes)
10
10
  message = message.call(**attributes) if message.is_a?(Proc)
11
11
 
12
12
  raise @context.class.config.output_error_class.new(message: message)
@@ -4,65 +4,10 @@ module Servactory
4
4
  module Outputs
5
5
  module Validations
6
6
  class Type < Base
7
- DEFAULT_MESSAGE = lambda do |service_class_name:, output:, value:, key_name:, expected_type:, given_type:| # rubocop:disable Metrics/BlockLength
8
- if output.collection_mode?
9
- collection_message = output.consists_of.fetch(:message)
10
-
11
- if collection_message.is_a?(Proc)
12
- collection_message.call(output: output, expected_type: expected_type)
13
- elsif collection_message.is_a?(String) && collection_message.present?
14
- collection_message
15
- elsif value.is_a?(output.types.fetch(0, Array))
16
- I18n.t(
17
- "servactory.outputs.checks.type.default_error.for_collection.wrong_element_type",
18
- service_class_name: service_class_name,
19
- output_name: output.name,
20
- expected_type: expected_type,
21
- given_type: given_type
22
- )
23
- else
24
- I18n.t(
25
- "servactory.outputs.checks.type.default_error.for_collection.wrong_type",
26
- service_class_name: service_class_name,
27
- output_name: output.name,
28
- expected_type: output.types.fetch(0, Array),
29
- given_type: value.class.name
30
- )
31
- end
32
- elsif output.hash_mode? && key_name.present?
33
- I18n.t(
34
- "servactory.outputs.checks.type.default_error.for_hash.wrong_element_type",
35
- service_class_name: service_class_name,
36
- output_name: output.name,
37
- key_name: key_name,
38
- expected_type: expected_type,
39
- given_type: given_type
40
- )
41
- else
42
- I18n.t(
43
- "servactory.outputs.checks.type.default_error.default",
44
- service_class_name: service_class_name,
45
- output_name: output.name,
46
- expected_type: expected_type,
47
- given_type: given_type
48
- )
49
- end
50
- end
51
-
52
- private_constant :DEFAULT_MESSAGE
53
-
54
7
  def self.validate!(...)
55
- return unless should_be_checked?
56
-
57
8
  new(...).validate!
58
9
  end
59
10
 
60
- def self.should_be_checked?
61
- true
62
- end
63
-
64
- ##########################################################################
65
-
66
11
  def initialize(context:, output:, value:)
67
12
  super()
68
13
 
@@ -71,76 +16,13 @@ module Servactory
71
16
  @value = value
72
17
  end
73
18
 
74
- def validate! # rubocop:disable Metrics/MethodLength, Metrics/AbcSize
75
- object_schema_validator = nil
76
-
77
- return if prepared_types.any? do |type|
78
- if @output.collection_mode?
79
- @value.is_a?(@output.types.fetch(0, Array)) &&
80
- @value.respond_to?(:all?) && @value.all?(type)
81
- elsif @output.hash_mode?
82
- object_schema_validator = Servactory::Maintenance::Validations::ObjectSchema.validate(
83
- object: @value,
84
- schema: @output.schema
85
- )
86
-
87
- object_schema_validator.valid?
88
- else
89
- @value.is_a?(type)
90
- end
91
- end
92
-
93
- if (first_error = object_schema_validator&.errors&.first).present?
94
- raise_default_object_error_with(first_error)
95
- end
96
-
97
- raise_default_error
98
- end
99
-
100
- private
101
-
102
- def prepared_types
103
- @prepared_types ||=
104
- if @output.collection_mode?
105
- prepared_types_from(Array(@output.consists_of.fetch(:type, [])))
106
- else
107
- prepared_types_from(@output.types)
108
- end
109
- end
110
-
111
- def prepared_types_from(types)
112
- types.map do |type|
113
- if type.is_a?(String)
114
- Object.const_get(type)
115
- else
116
- type
117
- end
118
- end
119
- end
120
-
121
- ########################################################################
122
-
123
- def raise_default_object_error_with(error)
124
- raise_error_with(
125
- DEFAULT_MESSAGE,
126
- service_class_name: @context.class.name,
127
- output: @output,
128
- value: @value,
129
- key_name: error.fetch(:name),
130
- expected_type: error.fetch(:expected_type),
131
- given_type: error.fetch(:given_type)
132
- )
133
- end
134
-
135
- def raise_default_error
136
- raise_error_with(
137
- DEFAULT_MESSAGE,
138
- service_class_name: @context.class.name,
139
- output: @output,
19
+ def validate!
20
+ Servactory::Maintenance::Validations::Types.validate!(
21
+ context: @context,
22
+ attribute: @output,
23
+ types: @output.types,
140
24
  value: @value,
141
- key_name: nil,
142
- expected_type: prepared_types.join(", "),
143
- given_type: @value.class.name
25
+ error_callback: ->(**args) { raise_error_with(**args) }
144
26
  )
145
27
  end
146
28
  end