servactory 2.5.1 → 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_matcher.rb +5 -0
- 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/test_kit/rspec/matchers/have_service_internal_matcher.rb +5 -0
- data/lib/servactory/test_kit/rspec/matchers.rb +2 -1
- 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
- data/lib/servactory.rb +1 -0
- 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
         |