servactory 2.5.2 → 2.6.0.rc1
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 +4 -4
- data/config/locales/en.yml +9 -10
- data/config/locales/ru.yml +9 -11
- data/lib/generators/servactory/templates/services/application_service/base.rb +2 -2
- data/lib/servactory/actions/tools/rules.rb +2 -3
- data/lib/servactory/configuration/dsl.rb +0 -2
- data/lib/servactory/configuration/factory.rb +19 -6
- data/lib/servactory/configuration/setup.rb +18 -10
- data/lib/servactory/context/workspace/inputs.rb +2 -3
- data/lib/servactory/context/workspace/internals.rb +2 -3
- data/lib/servactory/context/workspace/outputs.rb +2 -3
- data/lib/servactory/context/workspace.rb +23 -3
- data/lib/servactory/info/dsl.rb +3 -9
- data/lib/servactory/inputs/dsl.rb +0 -1
- data/lib/servactory/inputs/input.rb +2 -6
- data/lib/servactory/inputs/tools/rules.rb +2 -3
- data/lib/servactory/inputs/tools/unnecessary.rb +2 -3
- data/lib/servactory/inputs/translator/required.rb +3 -7
- data/lib/servactory/inputs/validations/required.rb +2 -14
- data/lib/servactory/internals/dsl.rb +0 -1
- data/lib/servactory/internals/internal.rb +2 -6
- data/lib/servactory/maintenance/attributes/options/registrar.rb +2 -34
- data/lib/servactory/maintenance/attributes/translator/inclusion.rb +3 -4
- data/lib/servactory/maintenance/attributes/translator/must.rb +8 -10
- data/lib/servactory/maintenance/attributes/translator/type.rb +11 -46
- data/lib/servactory/maintenance/attributes/validations/inclusion.rb +1 -1
- data/lib/servactory/maintenance/attributes/validations/must.rb +2 -2
- data/lib/servactory/maintenance/validations/types.rb +4 -30
- data/lib/servactory/outputs/dsl.rb +0 -1
- data/lib/servactory/outputs/output.rb +2 -6
- data/lib/servactory/result.rb +2 -3
- data/lib/servactory/test_kit/rspec/matchers/have_service_attribute_matchers/consists_of_matcher.rb +8 -56
- data/lib/servactory/test_kit/rspec/matchers/have_service_attribute_matchers/must_matcher.rb +7 -2
- data/lib/servactory/test_kit/rspec/matchers/have_service_input_matchers/required_matcher.rb +5 -2
- data/lib/servactory/test_kit/rspec/matchers/have_service_input_matchers/valid_with_matcher.rb +18 -62
- data/lib/servactory/tool_kit/dynamic_options/consists_of.rb +92 -0
- data/lib/servactory/tool_kit/dynamic_options/format.rb +9 -12
- data/lib/servactory/tool_kit/dynamic_options/max.rb +9 -12
- data/lib/servactory/tool_kit/dynamic_options/min.rb +9 -12
- data/lib/servactory/utils.rb +3 -3
- data/lib/servactory/version.rb +3 -3
- metadata +3 -4
- data/lib/servactory/maintenance/collection_mode/class_names_collection.rb +0 -16
- data/lib/servactory/maintenance/validations/collection.rb +0 -86
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ed5a30d8696509717be1bdd8bc4a1207f89e1b43e8cce695829d889480c162d9
|
4
|
+
data.tar.gz: 2c4fc042d8a917428fb909829e6b9557a5b8bff94e6f0b7753c628a3795c851f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: '09d166769f1772395a40af0bdadf7f0278aab29e67c5dc2fe4f25bdbadb8a8941b60f70f6256fa6a85a2ef80b32f9162ef1f14b12bf14f0fed08268c2b034b67'
|
7
|
+
data.tar.gz: 5a4fecc6ff9b62a9745a940bdfa18d37b943d9bc3f4e888b43a25d3c612e3285d9ae6cb5a523e198dabd2f5bd7de570cc937ea1d848f6548445f9368123a4a32
|
data/config/locales/en.yml
CHANGED
@@ -18,6 +18,9 @@ en:
|
|
18
18
|
default_error: "[%{service_class_name}] Input `%{input_name}` must \"%{code}\""
|
19
19
|
syntax_error: "[%{service_class_name}] Syntax error inside `%{code}` of `%{input_name}` input: %{exception_message}"
|
20
20
|
dynamic_options:
|
21
|
+
consists_of:
|
22
|
+
required: "[%{service_class_name}] Required element in input collection `%{input_name}` is missing"
|
23
|
+
wrong_type: "[%{service_class_name}] Wrong element type in input collection `%{input_name}`, expected `%{expected_type}`, got `%{given_type}`"
|
21
24
|
format:
|
22
25
|
default: "[%{service_class_name}] Input `%{input_name}` does not match `%{format_name}` format"
|
23
26
|
wrong_pattern: "[%{service_class_name}] Input `%{input_name}` does not match `%{format_name}` format"
|
@@ -29,13 +32,9 @@ en:
|
|
29
32
|
required:
|
30
33
|
default_error:
|
31
34
|
default: "[%{service_class_name}] Required input `%{input_name}` is missing"
|
32
|
-
for_collection: "[%{service_class_name}] Required element in input collection `%{input_name}` is missing"
|
33
35
|
type:
|
34
36
|
default_error:
|
35
37
|
default: "[%{service_class_name}] Wrong type of input `%{input_name}`, expected `%{expected_type}`, got `%{given_type}`"
|
36
|
-
for_collection:
|
37
|
-
wrong_type: "[%{service_class_name}] Wrong input collection type `%{input_name}`, expected `%{expected_type}`, got `%{given_type}`"
|
38
|
-
wrong_element_type: "[%{service_class_name}] Wrong type in input collection `%{input_name}`, expected `%{expected_type}`, got `%{given_type}`"
|
39
38
|
for_hash:
|
40
39
|
wrong_element_type: "[%{service_class_name}] Wrong type in input hash `%{input_name}`, expected `%{expected_type}` for `%{key_name}`, got `%{given_type}`"
|
41
40
|
tools:
|
@@ -54,6 +53,9 @@ en:
|
|
54
53
|
default_error: "[%{service_class_name}] Internal attribute `%{internal_name}` must \"%{code}\""
|
55
54
|
syntax_error: "[%{service_class_name}] Syntax error inside `%{code}` of `%{internal_name}` internal attribute: %{exception_message}"
|
56
55
|
dynamic_options:
|
56
|
+
consists_of:
|
57
|
+
required: "[%{service_class_name}] Required element in internal attribute collection `%{internal_name}` is missing"
|
58
|
+
wrong_type: "[%{service_class_name}] Wrong element type in internal attribute collection `%{internal_name}`, expected `%{expected_type}`, got `%{given_type}`"
|
57
59
|
format:
|
58
60
|
default: "[%{service_class_name}] Internal attribute `%{internal_name}` does not match `%{format_name}` format"
|
59
61
|
wrong_pattern: "[%{service_class_name}] Internal attribute `%{internal_name}` does not match `%{format_name}` format"
|
@@ -65,9 +67,6 @@ en:
|
|
65
67
|
type:
|
66
68
|
default_error:
|
67
69
|
default: "[%{service_class_name}] Wrong type of internal attribute `%{internal_name}`, expected `%{expected_type}`, got `%{given_type}`"
|
68
|
-
for_collection:
|
69
|
-
wrong_type: "[%{service_class_name}] Wrong internal attribute collection type `%{internal_name}`, expected `%{expected_type}`, got `%{given_type}`"
|
70
|
-
wrong_element_type: "[%{service_class_name}] Wrong element type in internal attribute collection `%{internal_name}`, expected `%{expected_type}`, got `%{given_type}`"
|
71
70
|
for_hash:
|
72
71
|
wrong_element_type: "[%{service_class_name}] Wrong type in internal attribute hash `%{internal_name}`, expected `%{expected_type}` for `%{key_name}`, got `%{given_type}`"
|
73
72
|
outputs:
|
@@ -81,6 +80,9 @@ en:
|
|
81
80
|
default_error: "[%{service_class_name}] Output attribute `%{output_name}` must \"%{code}\""
|
82
81
|
syntax_error: "[%{service_class_name}] Syntax error inside `%{code}` of `%{output_name}` output attribute: %{exception_message}"
|
83
82
|
dynamic_options:
|
83
|
+
consists_of:
|
84
|
+
required: "[%{service_class_name}] Required element in output attribute collection `%{output_name}` is missing"
|
85
|
+
wrong_type: "[%{service_class_name}] Wrong element type in output attribute collection `%{output_name}`, expected `%{expected_type}`, got `%{given_type}`"
|
84
86
|
format:
|
85
87
|
default: "[%{service_class_name}] Output attribute `%{output_name}` does not match `%{format_name}` format"
|
86
88
|
wrong_pattern: "[%{service_class_name}] Output attribute `%{output_name}` does not match `%{format_name}` format"
|
@@ -92,8 +94,5 @@ en:
|
|
92
94
|
type:
|
93
95
|
default_error:
|
94
96
|
default: "[%{service_class_name}] Wrong type of output attribute `%{output_name}`, expected `%{expected_type}`, got `%{given_type}`"
|
95
|
-
for_collection:
|
96
|
-
wrong_type: "[%{service_class_name}] Wrong output attribute collection type `%{output_name}`, expected `%{expected_type}`, got `%{given_type}`"
|
97
|
-
wrong_element_type: "[%{service_class_name}] Wrong element type in output attribute collection `%{output_name}`, expected `%{expected_type}`, got `%{given_type}`"
|
98
97
|
for_hash:
|
99
98
|
wrong_element_type: "[%{service_class_name}] Wrong type in output attribute hash `%{output_name}`, expected `%{expected_type}` for `%{key_name}`, got `%{given_type}`"
|
data/config/locales/ru.yml
CHANGED
@@ -18,6 +18,9 @@ ru:
|
|
18
18
|
default_error: "[%{service_class_name}] Инпут `%{input_name}` должен \"%{code}\""
|
19
19
|
syntax_error: "[%{service_class_name}] Синтаксическая ошибка внутри `%{code}` инпута `%{input_name}`: %{exception_message}"
|
20
20
|
dynamic_options:
|
21
|
+
consists_of:
|
22
|
+
required: "[%{service_class_name}] Отсутствует обязательный элемент в коллекции инпута `%{input_name}`"
|
23
|
+
wrong_type: "[%{service_class_name}] Неправильный тип элемента в коллекции инпута `%{input_name}`, ожидалось `%{expected_type}`, получено `%{given_type}`"
|
21
24
|
format:
|
22
25
|
default: "[%{service_class_name}] Инпут `%{input_name}` не соответствует формату `%{format_name}`"
|
23
26
|
wrong_pattern: "[%{service_class_name}] Инпут `%{input_name}` не соответствует формату `%{format_name}`"
|
@@ -29,16 +32,11 @@ ru:
|
|
29
32
|
required:
|
30
33
|
default_error:
|
31
34
|
default: "[%{service_class_name}] Обязательный инпут `%{input_name}` отсутствует"
|
32
|
-
for_collection: "[%{service_class_name}] Обязательный элемент в коллекции инпута `%{input_name}` отсутствует"
|
33
35
|
type:
|
34
36
|
default_error:
|
35
37
|
default: "[%{service_class_name}] Неправильный тип инпута `%{input_name}`, ожидалось `%{expected_type}`, получено `%{given_type}`"
|
36
|
-
for_collection:
|
37
|
-
wrong_type: "[%{service_class_name}] Неправильный тип коллекции инпута `%{input_name}`, ожидалось `%{expected_type}`, получено `%{given_type}`"
|
38
|
-
wrong_element_type: "[%{service_class_name}] Неправильный тип в коллекции инпута `%{input_name}`, ожидалось `%{expected_type}`, получено `%{given_type}`"
|
39
38
|
for_hash:
|
40
39
|
wrong_element_type: "[%{service_class_name}] Неправильный тип в хеше инпута `%{input_name}`, для `%{key_name}` ожидалось `%{expected_type}`, получено `%{given_type}`"
|
41
|
-
|
42
40
|
tools:
|
43
41
|
find_unnecessary:
|
44
42
|
error: "[%{service_class_name}] Неожиданные атрибуты: `%{unnecessary_attributes}`"
|
@@ -55,6 +53,9 @@ ru:
|
|
55
53
|
default_error: "[%{service_class_name}] Внутренний атрибут `%{internal_name}` должен \"%{code}\""
|
56
54
|
syntax_error: "[%{service_class_name}] Синтаксическая ошибка внутри `%{code}` внутреннего атрибута `%{internal_name}`: %{exception_message}"
|
57
55
|
dynamic_options:
|
56
|
+
consists_of:
|
57
|
+
required: "[%{service_class_name}] Отсутствует обязательный элемент в коллекции внутреннего атрибута `%{internal_name}`"
|
58
|
+
wrong_type: "[%{service_class_name}] Неправильный тип элемента в коллекции внутреннего атрибута `%{internal_name}`, ожидалось `%{expected_type}`, получено `%{given_type}`"
|
58
59
|
format:
|
59
60
|
default: "[%{service_class_name}] Внутренний атрибут `%{internal_name}` не соответствует формату `%{format_name}`"
|
60
61
|
wrong_pattern: "[%{service_class_name}] Внутренний атрибут `%{internal_name}` не соответствует формату `%{format_name}`"
|
@@ -66,9 +67,6 @@ ru:
|
|
66
67
|
type:
|
67
68
|
default_error:
|
68
69
|
default: "[%{service_class_name}] Неправильный тип внутреннего атрибута `%{internal_name}`, ожидалось `%{expected_type}`, получено `%{given_type}`"
|
69
|
-
for_collection:
|
70
|
-
wrong_type: "[%{service_class_name}] Неправильный тип коллекции внутреннего атрибута `%{internal_name}`, ожидалось `%{expected_type}`, получено `%{given_type}`"
|
71
|
-
wrong_element_type: "[%{service_class_name}] Неправильный тип элемента в коллекции внутреннего атрибута `%{internal_name}`, ожидалось `%{expected_type}`, получено `%{given_type}`"
|
72
70
|
for_hash:
|
73
71
|
wrong_element_type: "[%{service_class_name}] Неправильный тип в хеше внутреннего атрибута `%{internal_name}`, для `%{key_name}` ожидалось `%{expected_type}`, получено `%{given_type}`"
|
74
72
|
outputs:
|
@@ -82,6 +80,9 @@ ru:
|
|
82
80
|
default_error: "[%{service_class_name}] Выходящий атрибут `%{output_name}` должен \"%{code}\""
|
83
81
|
syntax_error: "[%{service_class_name}] Синтаксическая ошибка внутри `%{code}` выходящего атрибута `%{output_name}`: %{exception_message}"
|
84
82
|
dynamic_options:
|
83
|
+
consists_of:
|
84
|
+
required: "[%{service_class_name}] Отсутствует обязательный элемент в коллекции выходящего атрибута `%{output_name}`"
|
85
|
+
wrong_type: "[%{service_class_name}] Неправильный тип элемента в коллекции выходящего атрибута `%{output_name}`, ожидалось `%{expected_type}`, получено `%{given_type}`"
|
85
86
|
format:
|
86
87
|
default: "[%{service_class_name}] Выходящий атрибут `%{output_name}` не соответствует формату `%{format_name}`"
|
87
88
|
wrong_pattern: "[%{service_class_name}] Выходящий атрибут `%{output_name}` не соответствует формату `%{format_name}`"
|
@@ -92,8 +93,5 @@ ru:
|
|
92
93
|
default: "[%{service_class_name}] Выходящий атрибут `%{output_name}` получил значение `%{value}`, которое больше `%{option_value}`"
|
93
94
|
type:
|
94
95
|
default: "[%{service_class_name}] Неправильный тип выходящего атрибута `%{output_name}`, ожидалось `%{expected_type}`, получено `%{given_type}`"
|
95
|
-
for_collection:
|
96
|
-
wrong_type: "[%{service_class_name}] Неправильный тип коллекции выходящего атрибута `%{output_name}`, ожидалось `%{expected_type}`, получено `%{given_type}`"
|
97
|
-
wrong_element_type: "[%{service_class_name}] Неправильный тип элемента в коллекции выходящего атрибута `%{output_name}`, ожидалось `%{expected_type}`, получено `%{given_type}`"
|
98
96
|
for_hash:
|
99
97
|
wrong_element_type: "[%{service_class_name}] Неправильный тип в хеше выходящего атрибута `%{output_name}`, для `%{key_name}` ожидалось `%{expected_type}`, получено `%{given_type}`"
|
@@ -48,14 +48,14 @@ module ApplicationService
|
|
48
48
|
# ]
|
49
49
|
# )
|
50
50
|
|
51
|
-
# collection_mode_class_names [ActiveRecord::Relation]
|
52
|
-
|
53
51
|
# hash_mode_class_names [CustomHash]
|
54
52
|
|
55
53
|
# action_shortcuts %i[assign build create save]
|
56
54
|
|
57
55
|
# action_aliases %i[do_it!]
|
58
56
|
|
57
|
+
# i18n_root_key :servactory
|
58
|
+
|
59
59
|
# predicate_methods_enabled false
|
60
60
|
end
|
61
61
|
end
|
@@ -58,9 +58,8 @@ module Servactory
|
|
58
58
|
def raise_message_with!(formatted_text)
|
59
59
|
raise @context.class.config.failure_class.new(
|
60
60
|
type: :base,
|
61
|
-
message:
|
62
|
-
"
|
63
|
-
service_class_name: @context.class.name,
|
61
|
+
message: @context.send(:servactory_service_info).translate(
|
62
|
+
"methods.cannot_be_overwritten",
|
64
63
|
list_of_methods: formatted_text
|
65
64
|
)
|
66
65
|
)
|
@@ -20,8 +20,6 @@ module Servactory
|
|
20
20
|
|
21
21
|
child.config.result_class = config.result_class
|
22
22
|
|
23
|
-
child.config.collection_mode_class_names = config.collection_mode_class_names
|
24
|
-
|
25
23
|
child.config.input_option_helpers = config.input_option_helpers
|
26
24
|
child.config.internal_option_helpers = config.internal_option_helpers
|
27
25
|
child.config.output_option_helpers = config.output_option_helpers
|
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
module Servactory
|
4
4
|
module Configuration
|
5
|
-
class Factory
|
5
|
+
class Factory # rubocop:disable Metrics/ClassLength
|
6
6
|
def initialize(config)
|
7
7
|
@config = config
|
8
8
|
end
|
@@ -69,10 +69,6 @@ module Servactory
|
|
69
69
|
raise_error_about_wrong_result_class_with(:result_class, result_class)
|
70
70
|
end
|
71
71
|
|
72
|
-
def collection_mode_class_names(collection_mode_class_names)
|
73
|
-
@config.collection_mode_class_names.merge(collection_mode_class_names)
|
74
|
-
end
|
75
|
-
|
76
72
|
def hash_mode_class_names(hash_mode_class_names)
|
77
73
|
@config.hash_mode_class_names.merge(hash_mode_class_names)
|
78
74
|
end
|
@@ -97,6 +93,12 @@ module Servactory
|
|
97
93
|
@config.action_shortcuts.merge(action_shortcuts)
|
98
94
|
end
|
99
95
|
|
96
|
+
def i18n_root_key(value)
|
97
|
+
return @config.i18n_root_key = value.to_s if i18n_key?(value)
|
98
|
+
|
99
|
+
raise_error_about_wrong_i18n_root_key_with(:i18n_root_key, value)
|
100
|
+
end
|
101
|
+
|
100
102
|
def predicate_methods_enabled(flag)
|
101
103
|
return @config.predicate_methods_enabled = flag if boolean?(flag)
|
102
104
|
|
@@ -117,6 +119,10 @@ module Servactory
|
|
117
119
|
value.is_a?(Class) && value <= Servactory::Result
|
118
120
|
end
|
119
121
|
|
122
|
+
def i18n_key?(value)
|
123
|
+
value.is_a?(Symbol) || (value.is_a?(String) && value.present?)
|
124
|
+
end
|
125
|
+
|
120
126
|
def boolean?(value)
|
121
127
|
value.is_a?(TrueClass) || value.is_a?(FalseClass)
|
122
128
|
end
|
@@ -137,10 +143,17 @@ module Servactory
|
|
137
143
|
"See configuration example here: https://servactory.com/guide/configuration"
|
138
144
|
end
|
139
145
|
|
146
|
+
def raise_error_about_wrong_i18n_root_key_with(config_name, value)
|
147
|
+
raise ArgumentError,
|
148
|
+
"Error in `#{config_name}` configuration. " \
|
149
|
+
"The `#{value.inspect}` value must be `Symbol` or `String`. " \
|
150
|
+
"See configuration example here: https://servactory.com/guide/configuration"
|
151
|
+
end
|
152
|
+
|
140
153
|
def raise_error_about_wrong_predicate_methods_enabled_with(config_name, value)
|
141
154
|
raise ArgumentError,
|
142
155
|
"Error in `#{config_name}` configuration. " \
|
143
|
-
"The `#{value}` value must be `TrueClass` or `FalseClass`. " \
|
156
|
+
"The `#{value.inspect}` value must be `TrueClass` or `FalseClass`. " \
|
144
157
|
"See configuration example here: https://servactory.com/guide/configuration"
|
145
158
|
end
|
146
159
|
end
|
@@ -9,7 +9,6 @@ module Servactory
|
|
9
9
|
:success_class,
|
10
10
|
:failure_class,
|
11
11
|
:result_class,
|
12
|
-
:collection_mode_class_names,
|
13
12
|
:hash_mode_class_names,
|
14
13
|
:input_option_helpers,
|
15
14
|
:internal_option_helpers,
|
@@ -17,6 +16,7 @@ module Servactory
|
|
17
16
|
:action_aliases,
|
18
17
|
:action_shortcuts,
|
19
18
|
:action_rescue_handlers,
|
19
|
+
:i18n_root_key,
|
20
20
|
:predicate_methods_enabled
|
21
21
|
|
22
22
|
def initialize # rubocop:disable Metrics/MethodLength, Metrics/AbcSize
|
@@ -29,9 +29,6 @@ module Servactory
|
|
29
29
|
|
30
30
|
@result_class = Servactory::Result
|
31
31
|
|
32
|
-
@collection_mode_class_names =
|
33
|
-
Servactory::Maintenance::CollectionMode::ClassNamesCollection.new(default_collection_mode_class_names)
|
34
|
-
|
35
32
|
@hash_mode_class_names =
|
36
33
|
Servactory::Maintenance::HashMode::ClassNamesCollection.new(default_hash_mode_class_names)
|
37
34
|
|
@@ -39,15 +36,17 @@ module Servactory
|
|
39
36
|
Servactory::Maintenance::Attributes::OptionHelpersCollection.new(default_input_option_helpers)
|
40
37
|
|
41
38
|
@internal_option_helpers =
|
42
|
-
Servactory::Maintenance::Attributes::OptionHelpersCollection.new
|
39
|
+
Servactory::Maintenance::Attributes::OptionHelpersCollection.new(default_internal_option_helpers)
|
43
40
|
|
44
41
|
@output_option_helpers =
|
45
|
-
Servactory::Maintenance::Attributes::OptionHelpersCollection.new
|
42
|
+
Servactory::Maintenance::Attributes::OptionHelpersCollection.new(default_output_option_helpers)
|
46
43
|
|
47
44
|
@action_aliases = Servactory::Actions::Aliases::Collection.new
|
48
45
|
@action_shortcuts = Servactory::Actions::Shortcuts::Collection.new
|
49
46
|
@action_rescue_handlers = Servactory::Actions::RescueHandlers::Collection.new
|
50
47
|
|
48
|
+
@i18n_root_key = "servactory"
|
49
|
+
|
51
50
|
@predicate_methods_enabled = true
|
52
51
|
end
|
53
52
|
|
@@ -57,10 +56,6 @@ module Servactory
|
|
57
56
|
|
58
57
|
private
|
59
58
|
|
60
|
-
def default_collection_mode_class_names
|
61
|
-
Set[Array, Set]
|
62
|
-
end
|
63
|
-
|
64
59
|
def default_hash_mode_class_names
|
65
60
|
Set[Hash]
|
66
61
|
end
|
@@ -68,6 +63,19 @@ module Servactory
|
|
68
63
|
def default_input_option_helpers
|
69
64
|
Set[
|
70
65
|
Servactory::Maintenance::Attributes::OptionHelper.new(name: :optional, equivalent: { required: false }),
|
66
|
+
Servactory::ToolKit::DynamicOptions::ConsistsOf.setup
|
67
|
+
]
|
68
|
+
end
|
69
|
+
|
70
|
+
def default_internal_option_helpers
|
71
|
+
Set[
|
72
|
+
Servactory::ToolKit::DynamicOptions::ConsistsOf.setup
|
73
|
+
]
|
74
|
+
end
|
75
|
+
|
76
|
+
def default_output_option_helpers
|
77
|
+
Set[
|
78
|
+
Servactory::ToolKit::DynamicOptions::ConsistsOf.setup
|
71
79
|
]
|
72
80
|
end
|
73
81
|
end
|
@@ -99,9 +99,8 @@ module Servactory
|
|
99
99
|
end
|
100
100
|
|
101
101
|
def raise_error_for(type, name)
|
102
|
-
message_text =
|
103
|
-
"
|
104
|
-
service_class_name: @context.class.name,
|
102
|
+
message_text = @context.send(:servactory_service_info).translate(
|
103
|
+
"inputs.undefined.#{type}",
|
105
104
|
input_name: name
|
106
105
|
)
|
107
106
|
|
@@ -69,9 +69,8 @@ module Servactory
|
|
69
69
|
end
|
70
70
|
|
71
71
|
def raise_error_for(type, name)
|
72
|
-
message_text =
|
73
|
-
"
|
74
|
-
service_class_name: @context.class.name,
|
72
|
+
message_text = @context.send(:servactory_service_info).translate(
|
73
|
+
"internals.undefined.#{type}",
|
75
74
|
internal_name: name
|
76
75
|
)
|
77
76
|
|
@@ -69,9 +69,8 @@ module Servactory
|
|
69
69
|
end
|
70
70
|
|
71
71
|
def raise_error_for(type, name)
|
72
|
-
message_text =
|
73
|
-
"
|
74
|
-
service_class_name: @context.class.name,
|
72
|
+
message_text = @context.send(:servactory_service_info).translate(
|
73
|
+
"outputs.undefined.#{type}",
|
75
74
|
output_name: name
|
76
75
|
)
|
77
76
|
|
@@ -3,6 +3,23 @@
|
|
3
3
|
module Servactory
|
4
4
|
module Context
|
5
5
|
module Workspace
|
6
|
+
class Actor
|
7
|
+
attr_reader :class_name
|
8
|
+
|
9
|
+
def initialize(context)
|
10
|
+
@class_name = context.class.name
|
11
|
+
@i18n_root_key = context.class.config.i18n_root_key
|
12
|
+
end
|
13
|
+
|
14
|
+
def translate(key, **options)
|
15
|
+
I18n.t(
|
16
|
+
"#{@i18n_root_key}.#{key}",
|
17
|
+
service_class_name: class_name,
|
18
|
+
**options
|
19
|
+
)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
6
23
|
def inputs
|
7
24
|
@inputs ||= Inputs.new(
|
8
25
|
context: self,
|
@@ -100,13 +117,16 @@ module Servactory
|
|
100
117
|
def call
|
101
118
|
raise self.class.config.failure_class.new(
|
102
119
|
type: :base,
|
103
|
-
message:
|
104
|
-
"
|
105
|
-
service_class_name: self.class.name
|
120
|
+
message: servactory_service_info.translate(
|
121
|
+
"methods.call.not_used"
|
106
122
|
)
|
107
123
|
)
|
108
124
|
end
|
109
125
|
|
126
|
+
def servactory_service_info
|
127
|
+
@servactory_service_info ||= self.class::Actor.new(self)
|
128
|
+
end
|
129
|
+
|
110
130
|
def servactory_service_store
|
111
131
|
@servactory_service_store ||= Store.new(self)
|
112
132
|
end
|
data/lib/servactory/info/dsl.rb
CHANGED
@@ -11,8 +11,7 @@ module Servactory
|
|
11
11
|
def info # rubocop:disable Metrics/MethodLength, Metrics/AbcSize
|
12
12
|
Servactory::Info::Result.new(
|
13
13
|
inputs: collection_of_inputs.to_h do |input|
|
14
|
-
work = input.class::
|
15
|
-
consists_of = input.collection_of_options.find_by(name: :consists_of)
|
14
|
+
work = input.class::Actor.new(input)
|
16
15
|
inclusion = input.collection_of_options.find_by(name: :inclusion)
|
17
16
|
must = input.collection_of_options.find_by(name: :must)
|
18
17
|
|
@@ -23,7 +22,6 @@ module Servactory
|
|
23
22
|
types: input.types,
|
24
23
|
required: input.required,
|
25
24
|
default: input.default,
|
26
|
-
consists_of: consists_of.body,
|
27
25
|
inclusion: inclusion.body,
|
28
26
|
must: must.body
|
29
27
|
}
|
@@ -31,8 +29,7 @@ module Servactory
|
|
31
29
|
end,
|
32
30
|
|
33
31
|
internals: collection_of_internals.to_h do |internal|
|
34
|
-
work = internal.class::
|
35
|
-
consists_of = internal.collection_of_options.find_by(name: :consists_of)
|
32
|
+
work = internal.class::Actor.new(internal)
|
36
33
|
inclusion = internal.collection_of_options.find_by(name: :inclusion)
|
37
34
|
must = internal.collection_of_options.find_by(name: :must)
|
38
35
|
|
@@ -41,7 +38,6 @@ module Servactory
|
|
41
38
|
{
|
42
39
|
work: work,
|
43
40
|
types: internal.types,
|
44
|
-
consists_of: consists_of.body,
|
45
41
|
inclusion: inclusion.body,
|
46
42
|
must: must.body
|
47
43
|
}
|
@@ -49,8 +45,7 @@ module Servactory
|
|
49
45
|
end,
|
50
46
|
|
51
47
|
outputs: collection_of_outputs.to_h do |output|
|
52
|
-
work = output.class::
|
53
|
-
consists_of = output.collection_of_options.find_by(name: :consists_of)
|
48
|
+
work = output.class::Actor.new(output)
|
54
49
|
inclusion = output.collection_of_options.find_by(name: :inclusion)
|
55
50
|
must = output.collection_of_options.find_by(name: :must)
|
56
51
|
|
@@ -59,7 +54,6 @@ module Servactory
|
|
59
54
|
{
|
60
55
|
work: work,
|
61
56
|
types: output.types,
|
62
|
-
consists_of: consists_of.body,
|
63
57
|
inclusion: inclusion.body,
|
64
58
|
must: must.body
|
65
59
|
}
|
@@ -21,7 +21,6 @@ module Servactory
|
|
21
21
|
collection_of_inputs << Input.new(
|
22
22
|
name,
|
23
23
|
*helpers,
|
24
|
-
collection_mode_class_names: config.collection_mode_class_names,
|
25
24
|
hash_mode_class_names: config.hash_mode_class_names,
|
26
25
|
option_helpers: config.input_option_helpers,
|
27
26
|
**options
|
@@ -3,7 +3,7 @@
|
|
3
3
|
module Servactory
|
4
4
|
module Inputs
|
5
5
|
class Input
|
6
|
-
class
|
6
|
+
class Actor
|
7
7
|
attr_reader :name,
|
8
8
|
:internal_name,
|
9
9
|
:types,
|
@@ -35,14 +35,12 @@ module Servactory
|
|
35
35
|
name,
|
36
36
|
*helpers,
|
37
37
|
as: nil,
|
38
|
-
collection_mode_class_names:,
|
39
38
|
hash_mode_class_names:,
|
40
39
|
option_helpers:,
|
41
40
|
**options
|
42
41
|
)
|
43
42
|
@name = name
|
44
43
|
@internal_name = as.present? ? as : name
|
45
|
-
@collection_mode_class_names = collection_mode_class_names
|
46
44
|
@hash_mode_class_names = hash_mode_class_names
|
47
45
|
@option_helpers = option_helpers
|
48
46
|
|
@@ -70,14 +68,12 @@ module Servactory
|
|
70
68
|
|
71
69
|
options_registrar = Servactory::Maintenance::Attributes::Options::Registrar.register(
|
72
70
|
attribute: self,
|
73
|
-
collection_mode_class_names: @collection_mode_class_names,
|
74
71
|
hash_mode_class_names: @hash_mode_class_names,
|
75
72
|
options: options,
|
76
73
|
features: {
|
77
74
|
required: true,
|
78
75
|
types: true,
|
79
76
|
default: true,
|
80
|
-
collection: true,
|
81
77
|
hash: true,
|
82
78
|
inclusion: true,
|
83
79
|
must: true,
|
@@ -106,7 +102,7 @@ module Servactory
|
|
106
102
|
prepared_options.deep_merge!(prepared_option)
|
107
103
|
end
|
108
104
|
|
109
|
-
options.
|
105
|
+
options.deep_merge(prepared_options)
|
110
106
|
end
|
111
107
|
|
112
108
|
def options_for_checks
|
@@ -28,9 +28,8 @@ module Servactory
|
|
28
28
|
end
|
29
29
|
|
30
30
|
def raise_error_for(input)
|
31
|
-
message_text =
|
32
|
-
"
|
33
|
-
service_class_name: @context.class.name,
|
31
|
+
message_text = @context.send(:servactory_service_info).translate(
|
32
|
+
"inputs.tools.rules.error",
|
34
33
|
input_name: input.name,
|
35
34
|
conflict_code: input.conflict_code
|
36
35
|
)
|
@@ -17,9 +17,8 @@ module Servactory
|
|
17
17
|
def find!
|
18
18
|
return if unnecessary_attributes.empty?
|
19
19
|
|
20
|
-
message_text =
|
21
|
-
"
|
22
|
-
service_class_name: @context.class.name,
|
20
|
+
message_text = @context.send(:servactory_service_info).translate(
|
21
|
+
"inputs.tools.find_unnecessary.error",
|
23
22
|
unnecessary_attributes: unnecessary_attributes.join(", ")
|
24
23
|
)
|
25
24
|
|
@@ -7,13 +7,9 @@ module Servactory
|
|
7
7
|
module_function
|
8
8
|
|
9
9
|
def default_message
|
10
|
-
lambda do |
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
I18n.t(
|
15
|
-
i18n_key,
|
16
|
-
service_class_name: service_class_name,
|
10
|
+
lambda do |service:, input:, **|
|
11
|
+
service.translate(
|
12
|
+
"inputs.validations.required.default_error.default",
|
17
13
|
input_name: input.name
|
18
14
|
)
|
19
15
|
end
|
@@ -25,11 +25,7 @@ module Servactory
|
|
25
25
|
end
|
26
26
|
|
27
27
|
def check
|
28
|
-
if
|
29
|
-
return if collection_valid?
|
30
|
-
elsif Servactory::Utils.value_present?(@value)
|
31
|
-
return
|
32
|
-
end
|
28
|
+
return if Servactory::Utils.value_present?(@value)
|
33
29
|
|
34
30
|
_, message = @input.required.values_at(:is, :message)
|
35
31
|
|
@@ -38,18 +34,10 @@ module Servactory
|
|
38
34
|
|
39
35
|
private
|
40
36
|
|
41
|
-
def collection_valid?
|
42
|
-
collection_valid_for?(values: @value)
|
43
|
-
end
|
44
|
-
|
45
|
-
def collection_valid_for?(values:)
|
46
|
-
values.respond_to?(:all?) && values.flatten.all?(&:present?)
|
47
|
-
end
|
48
|
-
|
49
37
|
def add_error_with(message)
|
50
38
|
add_error(
|
51
39
|
message: message.presence || Servactory::Inputs::Translator::Required.default_message,
|
52
|
-
|
40
|
+
service: @context.send(:servactory_service_info),
|
53
41
|
input: @input,
|
54
42
|
value: @value
|
55
43
|
)
|
@@ -20,7 +20,6 @@ module Servactory
|
|
20
20
|
collection_of_internals << Internal.new(
|
21
21
|
name,
|
22
22
|
*helpers,
|
23
|
-
collection_mode_class_names: config.collection_mode_class_names,
|
24
23
|
hash_mode_class_names: config.hash_mode_class_names,
|
25
24
|
option_helpers: config.internal_option_helpers,
|
26
25
|
**options
|
@@ -3,7 +3,7 @@
|
|
3
3
|
module Servactory
|
4
4
|
module Internals
|
5
5
|
class Internal
|
6
|
-
class
|
6
|
+
class Actor
|
7
7
|
attr_reader :name,
|
8
8
|
:types,
|
9
9
|
:inclusion
|
@@ -28,13 +28,11 @@ module Servactory
|
|
28
28
|
def initialize(
|
29
29
|
name,
|
30
30
|
*helpers,
|
31
|
-
collection_mode_class_names:,
|
32
31
|
hash_mode_class_names:,
|
33
32
|
option_helpers:,
|
34
33
|
**options
|
35
34
|
)
|
36
35
|
@name = name
|
37
|
-
@collection_mode_class_names = collection_mode_class_names
|
38
36
|
@hash_mode_class_names = hash_mode_class_names
|
39
37
|
@option_helpers = option_helpers
|
40
38
|
|
@@ -61,12 +59,10 @@ module Servactory
|
|
61
59
|
|
62
60
|
options_registrar = Servactory::Maintenance::Attributes::Options::Registrar.register(
|
63
61
|
attribute: self,
|
64
|
-
collection_mode_class_names: @collection_mode_class_names,
|
65
62
|
hash_mode_class_names: @hash_mode_class_names,
|
66
63
|
options: options,
|
67
64
|
features: {
|
68
65
|
types: true,
|
69
|
-
collection: true,
|
70
66
|
hash: true,
|
71
67
|
inclusion: true,
|
72
68
|
must: true
|
@@ -94,7 +90,7 @@ module Servactory
|
|
94
90
|
prepared_options.deep_merge!(prepared_option)
|
95
91
|
end
|
96
92
|
|
97
|
-
options.
|
93
|
+
options.deep_merge(prepared_options)
|
98
94
|
end
|
99
95
|
|
100
96
|
def options_for_checks
|