servactory 1.4.2 → 1.4.3
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/README.md +84 -3
 - data/lib/servactory/base.rb +1 -0
 - data/lib/servactory/configuration/dsl.rb +21 -0
 - data/lib/servactory/configuration/factory.rb +23 -0
 - data/lib/servactory/configuration/setup.rb +20 -0
 - data/lib/servactory/context/callable.rb +55 -0
 - data/lib/servactory/context/dsl.rb +2 -55
 - data/lib/servactory/context/store.rb +0 -38
 - data/lib/servactory/context/workspace/error.rb +19 -0
 - data/lib/servactory/context/workspace/errors.rb +33 -0
 - data/lib/servactory/context/workspace.rb +32 -0
 - data/lib/servactory/input_arguments/options_collection.rb +3 -3
 - data/lib/servactory/input_arguments/tools/prepare.rb +6 -4
 - data/lib/servactory/internal_arguments/tools/prepare.rb +12 -12
 - data/lib/servactory/output_arguments/tools/prepare.rb +13 -13
 - data/lib/servactory/version.rb +1 -1
 - data/lib/servactory.rb +2 -2
 - metadata +9 -3
 - data/lib/servactory/configuration.rb +0 -18
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA256:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: 3877871b09a517026f3b66849d43348aae44feca18f2f97e101d1948cbc4f9d0
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: c6f0feca2515ebfd9e6123351c78ac29aee0ded0da66c4f689b259460ee7e403
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: 3d9d7237afe83f2b813d3c3555a322c5357dcc56aff1f45c0289c8efc47a139f5dc0f1bfec5f81005be1083aa0372b40a99b345df212aeded2edb425a03337c8
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: e1c7a318ce6a853269c6c3240e4028921fbad2f2d50c0e0c8d1ef52820bff91fe96638e363bbf63f278419cf477c8c2211a929d0c8f19a7198dd4e76c2c122df
         
     | 
    
        data/README.md
    CHANGED
    
    | 
         @@ -23,6 +23,8 @@ A set of tools for building reliable services of any complexity. 
     | 
|
| 
       23 
23 
     | 
    
         
             
                - [Must](#must)
         
     | 
| 
       24 
24 
     | 
    
         
             
              - [Output attributes](#output-attributes)
         
     | 
| 
       25 
25 
     | 
    
         
             
              - [Internal attributes](#internal-attributes)
         
     | 
| 
      
 26 
     | 
    
         
            +
              - [Stage](#stage)
         
     | 
| 
      
 27 
     | 
    
         
            +
              - [Failures](#failures)
         
     | 
| 
       26 
28 
     | 
    
         
             
              - [Result](#result)
         
     | 
| 
       27 
29 
     | 
    
         | 
| 
       28 
30 
     | 
    
         
             
            ## Requirements
         
     | 
| 
         @@ -52,7 +54,7 @@ bundle install 
     | 
|
| 
       52 
54 
     | 
    
         | 
| 
       53 
55 
     | 
    
         
             
            ### Preparation
         
     | 
| 
       54 
56 
     | 
    
         | 
| 
       55 
     | 
    
         
            -
             
     | 
| 
      
 57 
     | 
    
         
            +
            As a first step, it is recommended to prepare the base class for further inheritance.
         
     | 
| 
       56 
58 
     | 
    
         | 
| 
       57 
59 
     | 
    
         
             
            #### ApplicationService::Errors
         
     | 
| 
       58 
60 
     | 
    
         | 
| 
         @@ -150,9 +152,9 @@ By default, all inputs are required. To make an input optional, specify `false` 
     | 
|
| 
       150 
152 
     | 
    
         | 
| 
       151 
153 
     | 
    
         
             
            ```ruby
         
     | 
| 
       152 
154 
     | 
    
         
             
            class UsersService::Create < ApplicationService::Base
         
     | 
| 
       153 
     | 
    
         
            -
              input :first_name, type: String 
     | 
| 
      
 155 
     | 
    
         
            +
              input :first_name, type: String
         
     | 
| 
       154 
156 
     | 
    
         
             
              input :middle_name, type: String, required: false
         
     | 
| 
       155 
     | 
    
         
            -
              input :last_name, type: String 
     | 
| 
      
 157 
     | 
    
         
            +
              input :last_name, type: String
         
     | 
| 
       156 
158 
     | 
    
         | 
| 
       157 
159 
     | 
    
         
             
              # ...
         
     | 
| 
       158 
160 
     | 
    
         
             
            end
         
     | 
| 
         @@ -242,6 +244,85 @@ class NotificationService::Create < ApplicationService::Base 
     | 
|
| 
       242 
244 
     | 
    
         
             
            end
         
     | 
| 
       243 
245 
     | 
    
         
             
            ```
         
     | 
| 
       244 
246 
     | 
    
         | 
| 
      
 247 
     | 
    
         
            +
            ### Stage
         
     | 
| 
      
 248 
     | 
    
         
            +
             
     | 
| 
      
 249 
     | 
    
         
            +
            A "stage" is a single action or group of actions that needs to be "make".
         
     | 
| 
      
 250 
     | 
    
         
            +
             
     | 
| 
      
 251 
     | 
    
         
            +
            #### Minimal example
         
     | 
| 
      
 252 
     | 
    
         
            +
             
     | 
| 
      
 253 
     | 
    
         
            +
            ```ruby
         
     | 
| 
      
 254 
     | 
    
         
            +
            stage { make :something }
         
     | 
| 
      
 255 
     | 
    
         
            +
             
     | 
| 
      
 256 
     | 
    
         
            +
            def something
         
     | 
| 
      
 257 
     | 
    
         
            +
              # ...
         
     | 
| 
      
 258 
     | 
    
         
            +
            end
         
     | 
| 
      
 259 
     | 
    
         
            +
            ```
         
     | 
| 
      
 260 
     | 
    
         
            +
             
     | 
| 
      
 261 
     | 
    
         
            +
            #### Condition
         
     | 
| 
      
 262 
     | 
    
         
            +
             
     | 
| 
      
 263 
     | 
    
         
            +
            ```ruby
         
     | 
| 
      
 264 
     | 
    
         
            +
            stage { make :something, if: -> { Settings.something.enabled } }
         
     | 
| 
      
 265 
     | 
    
         
            +
             
     | 
| 
      
 266 
     | 
    
         
            +
            def something
         
     | 
| 
      
 267 
     | 
    
         
            +
              # ...
         
     | 
| 
      
 268 
     | 
    
         
            +
            end
         
     | 
| 
      
 269 
     | 
    
         
            +
            ```
         
     | 
| 
      
 270 
     | 
    
         
            +
             
     | 
| 
      
 271 
     | 
    
         
            +
            #### Groups
         
     | 
| 
      
 272 
     | 
    
         
            +
             
     | 
| 
      
 273 
     | 
    
         
            +
            The functionality of stage groups will be expanded in future releases.
         
     | 
| 
      
 274 
     | 
    
         
            +
             
     | 
| 
      
 275 
     | 
    
         
            +
            ```ruby
         
     | 
| 
      
 276 
     | 
    
         
            +
            stage do
         
     | 
| 
      
 277 
     | 
    
         
            +
              make :assign_api_model
         
     | 
| 
      
 278 
     | 
    
         
            +
              make :perform_api_request
         
     | 
| 
      
 279 
     | 
    
         
            +
            end
         
     | 
| 
      
 280 
     | 
    
         
            +
             
     | 
| 
      
 281 
     | 
    
         
            +
            stage do
         
     | 
| 
      
 282 
     | 
    
         
            +
              make :process_result
         
     | 
| 
      
 283 
     | 
    
         
            +
            end
         
     | 
| 
      
 284 
     | 
    
         
            +
             
     | 
| 
      
 285 
     | 
    
         
            +
            def assign_api_model
         
     | 
| 
      
 286 
     | 
    
         
            +
              self.api_model = APIModel.new
         
     | 
| 
      
 287 
     | 
    
         
            +
            end
         
     | 
| 
      
 288 
     | 
    
         
            +
             
     | 
| 
      
 289 
     | 
    
         
            +
            def perform_api_request
         
     | 
| 
      
 290 
     | 
    
         
            +
              self.response = APIClient.resource.create(api_model)
         
     | 
| 
      
 291 
     | 
    
         
            +
            end
         
     | 
| 
      
 292 
     | 
    
         
            +
             
     | 
| 
      
 293 
     | 
    
         
            +
            def process_result
         
     | 
| 
      
 294 
     | 
    
         
            +
              ARModel.create!(response)
         
     | 
| 
      
 295 
     | 
    
         
            +
            end
         
     | 
| 
      
 296 
     | 
    
         
            +
            ```
         
     | 
| 
      
 297 
     | 
    
         
            +
             
     | 
| 
      
 298 
     | 
    
         
            +
            ### Failures
         
     | 
| 
      
 299 
     | 
    
         
            +
             
     | 
| 
      
 300 
     | 
    
         
            +
            The methods that are used in the stages may fail. In order to more informatively provide information about this outside the service, the following methods were prepared.
         
     | 
| 
      
 301 
     | 
    
         
            +
             
     | 
| 
      
 302 
     | 
    
         
            +
            #### Fail
         
     | 
| 
      
 303 
     | 
    
         
            +
             
     | 
| 
      
 304 
     | 
    
         
            +
            ```ruby
         
     | 
| 
      
 305 
     | 
    
         
            +
            stage { make :check! }
         
     | 
| 
      
 306 
     | 
    
         
            +
             
     | 
| 
      
 307 
     | 
    
         
            +
            def check!
         
     | 
| 
      
 308 
     | 
    
         
            +
              return if inputs.invoice_number.start_with?("AA")
         
     | 
| 
      
 309 
     | 
    
         
            +
             
     | 
| 
      
 310 
     | 
    
         
            +
              fail!("Invalid invoice number")
         
     | 
| 
      
 311 
     | 
    
         
            +
            end
         
     | 
| 
      
 312 
     | 
    
         
            +
            ```
         
     | 
| 
      
 313 
     | 
    
         
            +
             
     | 
| 
      
 314 
     | 
    
         
            +
            #### Fail for input
         
     | 
| 
      
 315 
     | 
    
         
            +
             
     | 
| 
      
 316 
     | 
    
         
            +
            ```ruby
         
     | 
| 
      
 317 
     | 
    
         
            +
            stage { make :check! }
         
     | 
| 
      
 318 
     | 
    
         
            +
             
     | 
| 
      
 319 
     | 
    
         
            +
            def check!
         
     | 
| 
      
 320 
     | 
    
         
            +
              return if inputs.invoice_number.start_with?("AA")
         
     | 
| 
      
 321 
     | 
    
         
            +
             
     | 
| 
      
 322 
     | 
    
         
            +
              fail_input!(:invoice_number, "Invalid invoice number")
         
     | 
| 
      
 323 
     | 
    
         
            +
            end
         
     | 
| 
      
 324 
     | 
    
         
            +
            ```
         
     | 
| 
      
 325 
     | 
    
         
            +
             
     | 
| 
       245 
326 
     | 
    
         
             
            ### Result
         
     | 
| 
       246 
327 
     | 
    
         | 
| 
       247 
328 
     | 
    
         
             
            All services have the result of their work. For example, in case of success this call:
         
     | 
    
        data/lib/servactory/base.rb
    CHANGED
    
    
| 
         @@ -0,0 +1,21 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # frozen_string_literal: true
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            module Servactory
         
     | 
| 
      
 4 
     | 
    
         
            +
              module Configuration
         
     | 
| 
      
 5 
     | 
    
         
            +
                module DSL
         
     | 
| 
      
 6 
     | 
    
         
            +
                  def self.included(base)
         
     | 
| 
      
 7 
     | 
    
         
            +
                    base.extend(ClassMethods)
         
     | 
| 
      
 8 
     | 
    
         
            +
                  end
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
                  module ClassMethods
         
     | 
| 
      
 11 
     | 
    
         
            +
                    private
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
                    def configuration(&block)
         
     | 
| 
      
 14 
     | 
    
         
            +
                      @configuration_factory ||= Factory.new
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
                      @configuration_factory.instance_eval(&block)
         
     | 
| 
      
 17 
     | 
    
         
            +
                    end
         
     | 
| 
      
 18 
     | 
    
         
            +
                  end
         
     | 
| 
      
 19 
     | 
    
         
            +
                end
         
     | 
| 
      
 20 
     | 
    
         
            +
              end
         
     | 
| 
      
 21 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,23 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # frozen_string_literal: true
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            module Servactory
         
     | 
| 
      
 4 
     | 
    
         
            +
              module Configuration
         
     | 
| 
      
 5 
     | 
    
         
            +
                class Factory
         
     | 
| 
      
 6 
     | 
    
         
            +
                  def input_argument_error_class(input_argument_error_class)
         
     | 
| 
      
 7 
     | 
    
         
            +
                    Servactory.configuration.input_argument_error_class = input_argument_error_class
         
     | 
| 
      
 8 
     | 
    
         
            +
                  end
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
                  def output_argument_error_class(output_argument_error_class)
         
     | 
| 
      
 11 
     | 
    
         
            +
                    Servactory.configuration.output_argument_error_class = output_argument_error_class
         
     | 
| 
      
 12 
     | 
    
         
            +
                  end
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
                  def internal_argument_error_class(internal_argument_error_class)
         
     | 
| 
      
 15 
     | 
    
         
            +
                    Servactory.configuration.internal_argument_error_class = internal_argument_error_class
         
     | 
| 
      
 16 
     | 
    
         
            +
                  end
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
                  def failure_class(failure_class)
         
     | 
| 
      
 19 
     | 
    
         
            +
                    Servactory.configuration.failure_class = failure_class
         
     | 
| 
      
 20 
     | 
    
         
            +
                  end
         
     | 
| 
      
 21 
     | 
    
         
            +
                end
         
     | 
| 
      
 22 
     | 
    
         
            +
              end
         
     | 
| 
      
 23 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,20 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # frozen_string_literal: true
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            module Servactory
         
     | 
| 
      
 4 
     | 
    
         
            +
              module Configuration
         
     | 
| 
      
 5 
     | 
    
         
            +
                class Setup
         
     | 
| 
      
 6 
     | 
    
         
            +
                  attr_accessor :input_argument_error_class,
         
     | 
| 
      
 7 
     | 
    
         
            +
                                :internal_argument_error_class,
         
     | 
| 
      
 8 
     | 
    
         
            +
                                :output_argument_error_class,
         
     | 
| 
      
 9 
     | 
    
         
            +
                                :failure_class
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
                  def initialize
         
     | 
| 
      
 12 
     | 
    
         
            +
                    @input_argument_error_class = Servactory::Errors::InputArgumentError
         
     | 
| 
      
 13 
     | 
    
         
            +
                    @internal_argument_error_class = Servactory::Errors::InternalArgumentError
         
     | 
| 
      
 14 
     | 
    
         
            +
                    @output_argument_error_class = Servactory::Errors::OutputArgumentError
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
                    @failure_class = Servactory::Errors::Failure
         
     | 
| 
      
 17 
     | 
    
         
            +
                  end
         
     | 
| 
      
 18 
     | 
    
         
            +
                end
         
     | 
| 
      
 19 
     | 
    
         
            +
              end
         
     | 
| 
      
 20 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,55 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # frozen_string_literal: true
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            module Servactory
         
     | 
| 
      
 4 
     | 
    
         
            +
              module Context
         
     | 
| 
      
 5 
     | 
    
         
            +
                module Callable
         
     | 
| 
      
 6 
     | 
    
         
            +
                  def call!(arguments = {}) # rubocop:disable Metrics/MethodLength, Metrics/AbcSize
         
     | 
| 
      
 7 
     | 
    
         
            +
                    @context_store = Store.new(self)
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
                    assign_data_with(arguments)
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
                    input_arguments_workbench.find_unnecessary!
         
     | 
| 
      
 12 
     | 
    
         
            +
                    input_arguments_workbench.check_rules!
         
     | 
| 
      
 13 
     | 
    
         
            +
                    output_arguments_workbench.find_conflicts_in!(
         
     | 
| 
      
 14 
     | 
    
         
            +
                      collection_of_internal_arguments: collection_of_internal_arguments
         
     | 
| 
      
 15 
     | 
    
         
            +
                    )
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
                    prepare_data
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
                    input_arguments_workbench.check!
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
                    stage_handyman.run_methods!
         
     | 
| 
      
 22 
     | 
    
         
            +
             
     | 
| 
      
 23 
     | 
    
         
            +
                    context_store.context.raise_first_fail
         
     | 
| 
      
 24 
     | 
    
         
            +
             
     | 
| 
      
 25 
     | 
    
         
            +
                    Servactory::Result.prepare_for(
         
     | 
| 
      
 26 
     | 
    
         
            +
                      context: context_store.context,
         
     | 
| 
      
 27 
     | 
    
         
            +
                      collection_of_output_arguments: collection_of_output_arguments
         
     | 
| 
      
 28 
     | 
    
         
            +
                    )
         
     | 
| 
      
 29 
     | 
    
         
            +
                  end
         
     | 
| 
      
 30 
     | 
    
         
            +
             
     | 
| 
      
 31 
     | 
    
         
            +
                  private
         
     | 
| 
      
 32 
     | 
    
         
            +
             
     | 
| 
      
 33 
     | 
    
         
            +
                  attr_reader :context_store
         
     | 
| 
      
 34 
     | 
    
         
            +
             
     | 
| 
      
 35 
     | 
    
         
            +
                  def assign_data_with(arguments) # rubocop:disable Metrics/AbcSize
         
     | 
| 
      
 36 
     | 
    
         
            +
                    input_arguments_workbench.assign(
         
     | 
| 
      
 37 
     | 
    
         
            +
                      context: context_store.context,
         
     | 
| 
      
 38 
     | 
    
         
            +
                      arguments: arguments,
         
     | 
| 
      
 39 
     | 
    
         
            +
                      collection_of_input_options: collection_of_input_options
         
     | 
| 
      
 40 
     | 
    
         
            +
                    )
         
     | 
| 
      
 41 
     | 
    
         
            +
             
     | 
| 
      
 42 
     | 
    
         
            +
                    internal_arguments_workbench.assign(context: context_store.context)
         
     | 
| 
      
 43 
     | 
    
         
            +
                    output_arguments_workbench.assign(context: context_store.context)
         
     | 
| 
      
 44 
     | 
    
         
            +
                    stage_handyman&.assign(context: context_store.context)
         
     | 
| 
      
 45 
     | 
    
         
            +
                  end
         
     | 
| 
      
 46 
     | 
    
         
            +
             
     | 
| 
      
 47 
     | 
    
         
            +
                  def prepare_data
         
     | 
| 
      
 48 
     | 
    
         
            +
                    input_arguments_workbench.prepare     # 1
         
     | 
| 
      
 49 
     | 
    
         
            +
             
     | 
| 
      
 50 
     | 
    
         
            +
                    output_arguments_workbench.prepare    # 2
         
     | 
| 
      
 51 
     | 
    
         
            +
                    internal_arguments_workbench.prepare  # 3
         
     | 
| 
      
 52 
     | 
    
         
            +
                  end
         
     | 
| 
      
 53 
     | 
    
         
            +
                end
         
     | 
| 
      
 54 
     | 
    
         
            +
              end
         
     | 
| 
      
 55 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -4,61 +4,8 @@ module Servactory 
     | 
|
| 
       4 
4 
     | 
    
         
             
              module Context
         
     | 
| 
       5 
5 
     | 
    
         
             
                module DSL
         
     | 
| 
       6 
6 
     | 
    
         
             
                  def self.included(base)
         
     | 
| 
       7 
     | 
    
         
            -
                    base.extend( 
     | 
| 
       8 
     | 
    
         
            -
             
     | 
| 
       9 
     | 
    
         
            -
             
     | 
| 
       10 
     | 
    
         
            -
                  module ClassMethods
         
     | 
| 
       11 
     | 
    
         
            -
                    def call!(arguments = {}) # rubocop:disable Metrics/MethodLength, Metrics/AbcSize
         
     | 
| 
       12 
     | 
    
         
            -
                      @context_store ||= Store.new(self)
         
     | 
| 
       13 
     | 
    
         
            -
             
     | 
| 
       14 
     | 
    
         
            -
                      assign_data_with(arguments)
         
     | 
| 
       15 
     | 
    
         
            -
             
     | 
| 
       16 
     | 
    
         
            -
                      input_arguments_workbench.find_unnecessary!
         
     | 
| 
       17 
     | 
    
         
            -
                      input_arguments_workbench.check_rules!
         
     | 
| 
       18 
     | 
    
         
            -
                      output_arguments_workbench.find_conflicts_in!(
         
     | 
| 
       19 
     | 
    
         
            -
                        collection_of_internal_arguments: collection_of_internal_arguments
         
     | 
| 
       20 
     | 
    
         
            -
                      )
         
     | 
| 
       21 
     | 
    
         
            -
             
     | 
| 
       22 
     | 
    
         
            -
                      prepare_data
         
     | 
| 
       23 
     | 
    
         
            -
             
     | 
| 
       24 
     | 
    
         
            -
                      input_arguments_workbench.check!
         
     | 
| 
       25 
     | 
    
         
            -
             
     | 
| 
       26 
     | 
    
         
            -
                      stage_handyman.run_methods!
         
     | 
| 
       27 
     | 
    
         
            -
             
     | 
| 
       28 
     | 
    
         
            -
                      Servactory::Result.prepare_for(
         
     | 
| 
       29 
     | 
    
         
            -
                        context: context_store.context,
         
     | 
| 
       30 
     | 
    
         
            -
                        collection_of_output_arguments: collection_of_output_arguments
         
     | 
| 
       31 
     | 
    
         
            -
                      )
         
     | 
| 
       32 
     | 
    
         
            -
                    end
         
     | 
| 
       33 
     | 
    
         
            -
             
     | 
| 
       34 
     | 
    
         
            -
                    private
         
     | 
| 
       35 
     | 
    
         
            -
             
     | 
| 
       36 
     | 
    
         
            -
                    attr_reader :context_store
         
     | 
| 
       37 
     | 
    
         
            -
             
     | 
| 
       38 
     | 
    
         
            -
                    def assign_data_with(arguments) # rubocop:disable Metrics/AbcSize
         
     | 
| 
       39 
     | 
    
         
            -
                      input_arguments_workbench.assign(
         
     | 
| 
       40 
     | 
    
         
            -
                        context: context_store.context,
         
     | 
| 
       41 
     | 
    
         
            -
                        arguments: arguments,
         
     | 
| 
       42 
     | 
    
         
            -
                        collection_of_input_options: collection_of_input_options
         
     | 
| 
       43 
     | 
    
         
            -
                      )
         
     | 
| 
       44 
     | 
    
         
            -
             
     | 
| 
       45 
     | 
    
         
            -
                      internal_arguments_workbench.assign(context: context_store.context)
         
     | 
| 
       46 
     | 
    
         
            -
                      output_arguments_workbench.assign(context: context_store.context)
         
     | 
| 
       47 
     | 
    
         
            -
                      stage_handyman&.assign(context: context_store.context)
         
     | 
| 
       48 
     | 
    
         
            -
                    end
         
     | 
| 
       49 
     | 
    
         
            -
             
     | 
| 
       50 
     | 
    
         
            -
                    def prepare_data
         
     | 
| 
       51 
     | 
    
         
            -
                      input_arguments_workbench.prepare     # 1
         
     | 
| 
       52 
     | 
    
         
            -
             
     | 
| 
       53 
     | 
    
         
            -
                      output_arguments_workbench.prepare    # 2
         
     | 
| 
       54 
     | 
    
         
            -
                      internal_arguments_workbench.prepare  # 3
         
     | 
| 
       55 
     | 
    
         
            -
                    end
         
     | 
| 
       56 
     | 
    
         
            -
             
     | 
| 
       57 
     | 
    
         
            -
                    def configuration(&block)
         
     | 
| 
       58 
     | 
    
         
            -
                      context_configuration = Servactory::Context::Configuration.new
         
     | 
| 
       59 
     | 
    
         
            -
             
     | 
| 
       60 
     | 
    
         
            -
                      context_configuration.instance_eval(&block)
         
     | 
| 
       61 
     | 
    
         
            -
                    end
         
     | 
| 
      
 7 
     | 
    
         
            +
                    base.extend(Callable)
         
     | 
| 
      
 8 
     | 
    
         
            +
                    base.prepend(Workspace)
         
     | 
| 
       62 
9 
     | 
    
         
             
                  end
         
     | 
| 
       63 
10 
     | 
    
         
             
                end
         
     | 
| 
       64 
11 
     | 
    
         
             
              end
         
     | 
| 
         @@ -7,44 +7,6 @@ module Servactory 
     | 
|
| 
       7 
7 
     | 
    
         | 
| 
       8 
8 
     | 
    
         
             
                  def initialize(service_class)
         
     | 
| 
       9 
9 
     | 
    
         
             
                    @context = service_class.new
         
     | 
| 
       10 
     | 
    
         
            -
             
     | 
| 
       11 
     | 
    
         
            -
                    service_class.class_eval(service_class_template_with(context))
         
     | 
| 
       12 
     | 
    
         
            -
                  end
         
     | 
| 
       13 
     | 
    
         
            -
             
     | 
| 
       14 
     | 
    
         
            -
                  private
         
     | 
| 
       15 
     | 
    
         
            -
             
     | 
| 
       16 
     | 
    
         
            -
                  # EXAMPLE:
         
     | 
| 
       17 
     | 
    
         
            -
                  #
         
     | 
| 
       18 
     | 
    
         
            -
                  #   attr_reader(:inputs)
         
     | 
| 
       19 
     | 
    
         
            -
                  #
         
     | 
| 
       20 
     | 
    
         
            -
                  #   def assign_inputs(inputs)
         
     | 
| 
       21 
     | 
    
         
            -
                  #     @inputs = inputs
         
     | 
| 
       22 
     | 
    
         
            -
                  #   end
         
     | 
| 
       23 
     | 
    
         
            -
                  #
         
     | 
| 
       24 
     | 
    
         
            -
                  #   def fail_input!(input_attribute_name, message, prefix: true)
         
     | 
| 
       25 
     | 
    
         
            -
                  #     message_text = prefix ? "[#{context.class.name}] Custom `\#{input_attribute_name}` input error: " : ""
         
     | 
| 
       26 
     | 
    
         
            -
                  #
         
     | 
| 
       27 
     | 
    
         
            -
                  #     message_text += message
         
     | 
| 
       28 
     | 
    
         
            -
                  #
         
     | 
| 
       29 
     | 
    
         
            -
                  #     raise Servactory.configuration.input_argument_error_class, message_text
         
     | 
| 
       30 
     | 
    
         
            -
                  #   end
         
     | 
| 
       31 
     | 
    
         
            -
                  #
         
     | 
| 
       32 
     | 
    
         
            -
                  def service_class_template_with(context)
         
     | 
| 
       33 
     | 
    
         
            -
                    <<-RUBY
         
     | 
| 
       34 
     | 
    
         
            -
                      attr_reader(:inputs)
         
     | 
| 
       35 
     | 
    
         
            -
             
     | 
| 
       36 
     | 
    
         
            -
                      def assign_inputs(inputs)
         
     | 
| 
       37 
     | 
    
         
            -
                        @inputs = inputs
         
     | 
| 
       38 
     | 
    
         
            -
                      end
         
     | 
| 
       39 
     | 
    
         
            -
             
     | 
| 
       40 
     | 
    
         
            -
                      def fail_input!(input_attribute_name, message, prefix: true)
         
     | 
| 
       41 
     | 
    
         
            -
                        message_text = prefix ? "[#{context.class.name}] Custom `\#{input_attribute_name}` input error: " : ""
         
     | 
| 
       42 
     | 
    
         
            -
             
     | 
| 
       43 
     | 
    
         
            -
                        message_text += message
         
     | 
| 
       44 
     | 
    
         
            -
             
     | 
| 
       45 
     | 
    
         
            -
                        raise Servactory.configuration.input_argument_error_class, message_text
         
     | 
| 
       46 
     | 
    
         
            -
                      end
         
     | 
| 
       47 
     | 
    
         
            -
                    RUBY
         
     | 
| 
       48 
10 
     | 
    
         
             
                  end
         
     | 
| 
       49 
11 
     | 
    
         
             
                end
         
     | 
| 
       50 
12 
     | 
    
         
             
              end
         
     | 
| 
         @@ -0,0 +1,19 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # frozen_string_literal: true
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            module Servactory
         
     | 
| 
      
 4 
     | 
    
         
            +
              module Context
         
     | 
| 
      
 5 
     | 
    
         
            +
                module Workspace
         
     | 
| 
      
 6 
     | 
    
         
            +
                  class Error
         
     | 
| 
      
 7 
     | 
    
         
            +
                    attr_reader :type,
         
     | 
| 
      
 8 
     | 
    
         
            +
                                :message,
         
     | 
| 
      
 9 
     | 
    
         
            +
                                :attribute_name
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
                    def initialize(type:, message:, attribute_name: nil)
         
     | 
| 
      
 12 
     | 
    
         
            +
                      @type = type
         
     | 
| 
      
 13 
     | 
    
         
            +
                      @message = message
         
     | 
| 
      
 14 
     | 
    
         
            +
                      @attribute_name = attribute_name
         
     | 
| 
      
 15 
     | 
    
         
            +
                    end
         
     | 
| 
      
 16 
     | 
    
         
            +
                  end
         
     | 
| 
      
 17 
     | 
    
         
            +
                end
         
     | 
| 
      
 18 
     | 
    
         
            +
              end
         
     | 
| 
      
 19 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,33 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # frozen_string_literal: true
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            module Servactory
         
     | 
| 
      
 4 
     | 
    
         
            +
              module Context
         
     | 
| 
      
 5 
     | 
    
         
            +
                module Workspace
         
     | 
| 
      
 6 
     | 
    
         
            +
                  class Errors
         
     | 
| 
      
 7 
     | 
    
         
            +
                    # NOTE: http://words.steveklabnik.com/beware-subclassing-ruby-core-classes
         
     | 
| 
      
 8 
     | 
    
         
            +
                    extend Forwardable
         
     | 
| 
      
 9 
     | 
    
         
            +
                    def_delegators :@collection, :<<, :filter, :reject, :empty?, :first
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
                    def initialize(collection = [])
         
     | 
| 
      
 12 
     | 
    
         
            +
                      @collection = collection
         
     | 
| 
      
 13 
     | 
    
         
            +
                    end
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
                    def not_blank_and_uniq
         
     | 
| 
      
 16 
     | 
    
         
            +
                      Errors.new(reject(&:blank?).uniq)
         
     | 
| 
      
 17 
     | 
    
         
            +
                    end
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
                    def for_fails
         
     | 
| 
      
 20 
     | 
    
         
            +
                      filtered = filter { |error| error.type == :fail }
         
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
      
 22 
     | 
    
         
            +
                      Errors.new(filtered)
         
     | 
| 
      
 23 
     | 
    
         
            +
                    end
         
     | 
| 
      
 24 
     | 
    
         
            +
             
     | 
| 
      
 25 
     | 
    
         
            +
                    def for_inputs
         
     | 
| 
      
 26 
     | 
    
         
            +
                      filtered = filter { |error| error.type == :inputs }
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
                      Errors.new(filtered)
         
     | 
| 
      
 29 
     | 
    
         
            +
                    end
         
     | 
| 
      
 30 
     | 
    
         
            +
                  end
         
     | 
| 
      
 31 
     | 
    
         
            +
                end
         
     | 
| 
      
 32 
     | 
    
         
            +
              end
         
     | 
| 
      
 33 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,32 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # frozen_string_literal: true
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            module Servactory
         
     | 
| 
      
 4 
     | 
    
         
            +
              module Context
         
     | 
| 
      
 5 
     | 
    
         
            +
                module Workspace
         
     | 
| 
      
 6 
     | 
    
         
            +
                  attr_reader :inputs
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
                  def errors
         
     | 
| 
      
 9 
     | 
    
         
            +
                    @errors ||= Errors.new
         
     | 
| 
      
 10 
     | 
    
         
            +
                  end
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
                  def assign_inputs(inputs)
         
     | 
| 
      
 13 
     | 
    
         
            +
                    @inputs = inputs
         
     | 
| 
      
 14 
     | 
    
         
            +
                  end
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
                  def fail_input!(input_attribute_name, message)
         
     | 
| 
      
 17 
     | 
    
         
            +
                    raise Servactory.configuration.input_argument_error_class,
         
     | 
| 
      
 18 
     | 
    
         
            +
                          Error.new(type: :input, attribute_name: input_attribute_name, message: message).message
         
     | 
| 
      
 19 
     | 
    
         
            +
                  end
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
                  def fail!(error)
         
     | 
| 
      
 22 
     | 
    
         
            +
                    errors << Error.new(type: :fail, message: error)
         
     | 
| 
      
 23 
     | 
    
         
            +
                  end
         
     | 
| 
      
 24 
     | 
    
         
            +
             
     | 
| 
      
 25 
     | 
    
         
            +
                  def raise_first_fail
         
     | 
| 
      
 26 
     | 
    
         
            +
                    return if (tmp_errors = errors.for_fails.not_blank_and_uniq).empty?
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
                    raise Servactory.configuration.failure_class, tmp_errors.first.message
         
     | 
| 
      
 29 
     | 
    
         
            +
                  end
         
     | 
| 
      
 30 
     | 
    
         
            +
                end
         
     | 
| 
      
 31 
     | 
    
         
            +
              end
         
     | 
| 
      
 32 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -5,18 +5,18 @@ module Servactory 
     | 
|
| 
       5 
5 
     | 
    
         
             
                class OptionsCollection
         
     | 
| 
       6 
6 
     | 
    
         
             
                  # NOTE: http://words.steveklabnik.com/beware-subclassing-ruby-core-classes
         
     | 
| 
       7 
7 
     | 
    
         
             
                  extend Forwardable
         
     | 
| 
       8 
     | 
    
         
            -
                  def_delegators :@collection, :<<, : 
     | 
| 
      
 8 
     | 
    
         
            +
                  def_delegators :@collection, :<<, :filter, :each, :map
         
     | 
| 
       9 
9 
     | 
    
         | 
| 
       10 
10 
     | 
    
         
             
                  def initialize(*)
         
     | 
| 
       11 
11 
     | 
    
         
             
                    @collection = []
         
     | 
| 
       12 
12 
     | 
    
         
             
                  end
         
     | 
| 
       13 
13 
     | 
    
         | 
| 
       14 
14 
     | 
    
         
             
                  def check_classes
         
     | 
| 
       15 
     | 
    
         
            -
                     
     | 
| 
      
 15 
     | 
    
         
            +
                    filter { |option| option.check_class.present? }.map(&:check_class).uniq
         
     | 
| 
       16 
16 
     | 
    
         
             
                  end
         
     | 
| 
       17 
17 
     | 
    
         | 
| 
       18 
18 
     | 
    
         
             
                  def options_for_checks
         
     | 
| 
       19 
     | 
    
         
            -
                     
     | 
| 
      
 19 
     | 
    
         
            +
                    filter(&:need_for_checks?).to_h do |option|
         
     | 
| 
       20 
20 
     | 
    
         
             
                      value = if option.value.is_a?(Hash)
         
     | 
| 
       21 
21 
     | 
    
         
             
                                option.value.key?(:is) ? option.value.fetch(:is) : option.value
         
     | 
| 
       22 
22 
     | 
    
         
             
                              else
         
     | 
| 
         @@ -75,15 +75,17 @@ module Servactory 
     | 
|
| 
       75 
75 
     | 
    
         | 
| 
       76 
76 
     | 
    
         
             
                    # EXAMPLE:
         
     | 
| 
       77 
77 
     | 
    
         
             
                    #
         
     | 
| 
       78 
     | 
    
         
            -
                    #   private 
     | 
| 
      
 78 
     | 
    
         
            +
                    #   private
         
     | 
| 
      
 79 
     | 
    
         
            +
                    #
         
     | 
| 
      
 80 
     | 
    
         
            +
                    #   attr_reader(*[:attr_1])
         
     | 
| 
       79 
81 
     | 
    
         
             
                    #
         
     | 
| 
       80 
82 
     | 
    
         
             
                    def context_internal_variables_template
         
     | 
| 
       81 
83 
     | 
    
         
             
                      return if @internal_variables.blank?
         
     | 
| 
       82 
84 
     | 
    
         | 
| 
       83 
     | 
    
         
            -
                      @context_internal_variables_template ||= <<-RUBY 
     | 
| 
       84 
     | 
    
         
            -
                        private 
     | 
| 
      
 85 
     | 
    
         
            +
                      @context_internal_variables_template ||= <<-RUBY
         
     | 
| 
      
 86 
     | 
    
         
            +
                        private
         
     | 
| 
       85 
87 
     | 
    
         | 
| 
       86 
     | 
    
         
            -
                        attr_reader(*#{@internal_variables.keys}) 
     | 
| 
      
 88 
     | 
    
         
            +
                        attr_reader(*#{@internal_variables.keys})
         
     | 
| 
       87 
89 
     | 
    
         
             
                      RUBY
         
     | 
| 
       88 
90 
     | 
    
         
             
                    end
         
     | 
| 
       89 
91 
     | 
    
         
             
                  end
         
     | 
| 
         @@ -29,29 +29,29 @@ module Servactory 
     | 
|
| 
       29 
29 
     | 
    
         | 
| 
       30 
30 
     | 
    
         
             
                    # EXAMPLE:
         
     | 
| 
       31 
31 
     | 
    
         
             
                    #
         
     | 
| 
       32 
     | 
    
         
            -
                    #   define_method(:user=) do |value 
     | 
| 
       33 
     | 
    
         
            -
                    #     Servactory::InternalArguments::Checks::Type.check!( context: self, internal_argument:, value: ) 
     | 
| 
      
 32 
     | 
    
         
            +
                    #   define_method(:user=) do |value|
         
     | 
| 
      
 33 
     | 
    
         
            +
                    #     Servactory::InternalArguments::Checks::Type.check!( context: self, internal_argument:, value: )
         
     | 
| 
       34 
34 
     | 
    
         
             
                    #
         
     | 
| 
       35 
     | 
    
         
            -
                    #     instance_variable_set(:@user, value) 
     | 
| 
       36 
     | 
    
         
            -
                    #   end 
     | 
| 
      
 35 
     | 
    
         
            +
                    #     instance_variable_set(:@user, value)
         
     | 
| 
      
 36 
     | 
    
         
            +
                    #   end
         
     | 
| 
       37 
37 
     | 
    
         
             
                    #
         
     | 
| 
       38 
     | 
    
         
            -
                    #   private attr_reader :user 
     | 
| 
      
 38 
     | 
    
         
            +
                    #   private attr_reader :user
         
     | 
| 
       39 
39 
     | 
    
         
             
                    #
         
     | 
| 
       40 
40 
     | 
    
         
             
                    def context_internal_argument_template_for(internal_argument)
         
     | 
| 
       41 
     | 
    
         
            -
                      <<-RUBY 
     | 
| 
       42 
     | 
    
         
            -
                        define_method(:#{internal_argument.name}=) do |value 
     | 
| 
      
 41 
     | 
    
         
            +
                      <<-RUBY
         
     | 
| 
      
 42 
     | 
    
         
            +
                        define_method(:#{internal_argument.name}=) do |value|
         
     | 
| 
       43 
43 
     | 
    
         
             
                          Servactory::InternalArguments::Checks::Type.check!(
         
     | 
| 
       44 
44 
     | 
    
         
             
                            context: self,
         
     | 
| 
       45 
45 
     | 
    
         
             
                            internal_argument: internal_argument,
         
     | 
| 
       46 
46 
     | 
    
         
             
                            value: value
         
     | 
| 
       47 
     | 
    
         
            -
                          ) 
     | 
| 
      
 47 
     | 
    
         
            +
                          )
         
     | 
| 
       48 
48 
     | 
    
         | 
| 
       49 
     | 
    
         
            -
                          instance_variable_set(:@#{internal_argument.name}, value) 
     | 
| 
       50 
     | 
    
         
            -
                        end 
     | 
| 
      
 49 
     | 
    
         
            +
                          instance_variable_set(:@#{internal_argument.name}, value)
         
     | 
| 
      
 50 
     | 
    
         
            +
                        end
         
     | 
| 
       51 
51 
     | 
    
         | 
| 
       52 
     | 
    
         
            -
                        private 
     | 
| 
      
 52 
     | 
    
         
            +
                        private
         
     | 
| 
       53 
53 
     | 
    
         | 
| 
       54 
     | 
    
         
            -
                        attr_reader :#{internal_argument.name} 
     | 
| 
      
 54 
     | 
    
         
            +
                        attr_reader :#{internal_argument.name}
         
     | 
| 
       55 
55 
     | 
    
         
             
                      RUBY
         
     | 
| 
       56 
56 
     | 
    
         
             
                    end
         
     | 
| 
       57 
57 
     | 
    
         
             
                  end
         
     | 
| 
         @@ -29,31 +29,31 @@ module Servactory 
     | 
|
| 
       29 
29 
     | 
    
         | 
| 
       30 
30 
     | 
    
         
             
                    # EXAMPLE:
         
     | 
| 
       31 
31 
     | 
    
         
             
                    #
         
     | 
| 
       32 
     | 
    
         
            -
                    #   define_method(:user=) do |value 
     | 
| 
       33 
     | 
    
         
            -
                    #     Servactory::InternalArguments::Checks::Type.check!( context: self, output_argument:, value: ) 
     | 
| 
      
 32 
     | 
    
         
            +
                    #   define_method(:user=) do |value|
         
     | 
| 
      
 33 
     | 
    
         
            +
                    #     Servactory::InternalArguments::Checks::Type.check!( context: self, output_argument:, value: )
         
     | 
| 
       34 
34 
     | 
    
         
             
                    #
         
     | 
| 
       35 
     | 
    
         
            -
                    #     instance_variable_set(:@user, value) 
     | 
| 
       36 
     | 
    
         
            -
                    #   end 
     | 
| 
      
 35 
     | 
    
         
            +
                    #     instance_variable_set(:@user, value)
         
     | 
| 
      
 36 
     | 
    
         
            +
                    #   end
         
     | 
| 
       37 
37 
     | 
    
         
             
                    #
         
     | 
| 
       38 
     | 
    
         
            -
                    #   private 
     | 
| 
      
 38 
     | 
    
         
            +
                    #   private
         
     | 
| 
       39 
39 
     | 
    
         
             
                    #
         
     | 
| 
       40 
     | 
    
         
            -
                    #   attr_reader :user 
     | 
| 
      
 40 
     | 
    
         
            +
                    #   attr_reader :user
         
     | 
| 
       41 
41 
     | 
    
         
             
                    #
         
     | 
| 
       42 
42 
     | 
    
         
             
                    def context_output_argument_template_for(output_argument)
         
     | 
| 
       43 
     | 
    
         
            -
                      <<-RUBY 
     | 
| 
       44 
     | 
    
         
            -
                        define_method(:#{output_argument.name}=) do |value 
     | 
| 
      
 43 
     | 
    
         
            +
                      <<-RUBY
         
     | 
| 
      
 44 
     | 
    
         
            +
                        define_method(:#{output_argument.name}=) do |value|
         
     | 
| 
       45 
45 
     | 
    
         
             
                          Servactory::OutputArguments::Checks::Type.check!(
         
     | 
| 
       46 
46 
     | 
    
         
             
                            context: self,
         
     | 
| 
       47 
47 
     | 
    
         
             
                            output_argument: output_argument,
         
     | 
| 
       48 
48 
     | 
    
         
             
                            value: value
         
     | 
| 
       49 
     | 
    
         
            -
                          ) 
     | 
| 
      
 49 
     | 
    
         
            +
                          )
         
     | 
| 
       50 
50 
     | 
    
         | 
| 
       51 
     | 
    
         
            -
                          instance_variable_set(:@#{output_argument.name}, value) 
     | 
| 
       52 
     | 
    
         
            -
                        end 
     | 
| 
      
 51 
     | 
    
         
            +
                          instance_variable_set(:@#{output_argument.name}, value)
         
     | 
| 
      
 52 
     | 
    
         
            +
                        end
         
     | 
| 
       53 
53 
     | 
    
         | 
| 
       54 
     | 
    
         
            -
                        private 
     | 
| 
      
 54 
     | 
    
         
            +
                        private
         
     | 
| 
       55 
55 
     | 
    
         | 
| 
       56 
     | 
    
         
            -
                        attr_reader :#{output_argument.name} 
     | 
| 
      
 56 
     | 
    
         
            +
                        attr_reader :#{output_argument.name}
         
     | 
| 
       57 
57 
     | 
    
         
             
                      RUBY
         
     | 
| 
       58 
58 
     | 
    
         
             
                    end
         
     | 
| 
       59 
59 
     | 
    
         
             
                  end
         
     | 
    
        data/lib/servactory/version.rb
    CHANGED
    
    
    
        data/lib/servactory.rb
    CHANGED
    
    | 
         @@ -17,11 +17,11 @@ module Servactory 
     | 
|
| 
       17 
17 
     | 
    
         
             
              module_function
         
     | 
| 
       18 
18 
     | 
    
         | 
| 
       19 
19 
     | 
    
         
             
              def configuration
         
     | 
| 
       20 
     | 
    
         
            -
                @configuration ||= Servactory::Configuration.new
         
     | 
| 
      
 20 
     | 
    
         
            +
                @configuration ||= Servactory::Configuration::Setup.new
         
     | 
| 
       21 
21 
     | 
    
         
             
              end
         
     | 
| 
       22 
22 
     | 
    
         | 
| 
       23 
23 
     | 
    
         
             
              def reset
         
     | 
| 
       24 
     | 
    
         
            -
                @configuration = Servactory::Configuration.new
         
     | 
| 
      
 24 
     | 
    
         
            +
                @configuration = Servactory::Configuration::Setup.new
         
     | 
| 
       25 
25 
     | 
    
         
             
              end
         
     | 
| 
       26 
26 
     | 
    
         | 
| 
       27 
27 
     | 
    
         
             
              def configure
         
     | 
    
        metadata
    CHANGED
    
    | 
         @@ -1,14 +1,14 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: servactory
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version: 1.4. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 1.4.3
         
     | 
| 
       5 
5 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       6 
6 
     | 
    
         
             
            authors:
         
     | 
| 
       7 
7 
     | 
    
         
             
            - Anton Sokolov
         
     | 
| 
       8 
8 
     | 
    
         
             
            autorequire:
         
     | 
| 
       9 
9 
     | 
    
         
             
            bindir: bin
         
     | 
| 
       10 
10 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       11 
     | 
    
         
            -
            date: 2023-05- 
     | 
| 
      
 11 
     | 
    
         
            +
            date: 2023-05-12 00:00:00.000000000 Z
         
     | 
| 
       12 
12 
     | 
    
         
             
            dependencies:
         
     | 
| 
       13 
13 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       14 
14 
     | 
    
         
             
              name: zeitwerk
         
     | 
| 
         @@ -161,10 +161,16 @@ files: 
     | 
|
| 
       161 
161 
     | 
    
         
             
            - Rakefile
         
     | 
| 
       162 
162 
     | 
    
         
             
            - lib/servactory.rb
         
     | 
| 
       163 
163 
     | 
    
         
             
            - lib/servactory/base.rb
         
     | 
| 
       164 
     | 
    
         
            -
            - lib/servactory/configuration.rb
         
     | 
| 
      
 164 
     | 
    
         
            +
            - lib/servactory/configuration/dsl.rb
         
     | 
| 
      
 165 
     | 
    
         
            +
            - lib/servactory/configuration/factory.rb
         
     | 
| 
      
 166 
     | 
    
         
            +
            - lib/servactory/configuration/setup.rb
         
     | 
| 
      
 167 
     | 
    
         
            +
            - lib/servactory/context/callable.rb
         
     | 
| 
       165 
168 
     | 
    
         
             
            - lib/servactory/context/configuration.rb
         
     | 
| 
       166 
169 
     | 
    
         
             
            - lib/servactory/context/dsl.rb
         
     | 
| 
       167 
170 
     | 
    
         
             
            - lib/servactory/context/store.rb
         
     | 
| 
      
 171 
     | 
    
         
            +
            - lib/servactory/context/workspace.rb
         
     | 
| 
      
 172 
     | 
    
         
            +
            - lib/servactory/context/workspace/error.rb
         
     | 
| 
      
 173 
     | 
    
         
            +
            - lib/servactory/context/workspace/errors.rb
         
     | 
| 
       168 
174 
     | 
    
         
             
            - lib/servactory/errors/base.rb
         
     | 
| 
       169 
175 
     | 
    
         
             
            - lib/servactory/errors/failure.rb
         
     | 
| 
       170 
176 
     | 
    
         
             
            - lib/servactory/errors/input_argument_error.rb
         
     | 
| 
         @@ -1,18 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            # frozen_string_literal: true
         
     | 
| 
       2 
     | 
    
         
            -
             
     | 
| 
       3 
     | 
    
         
            -
            module Servactory
         
     | 
| 
       4 
     | 
    
         
            -
              class Configuration
         
     | 
| 
       5 
     | 
    
         
            -
                attr_accessor :input_argument_error_class,
         
     | 
| 
       6 
     | 
    
         
            -
                              :internal_argument_error_class,
         
     | 
| 
       7 
     | 
    
         
            -
                              :output_argument_error_class,
         
     | 
| 
       8 
     | 
    
         
            -
                              :failure_class
         
     | 
| 
       9 
     | 
    
         
            -
             
     | 
| 
       10 
     | 
    
         
            -
                def initialize
         
     | 
| 
       11 
     | 
    
         
            -
                  @input_argument_error_class = Servactory::Errors::InputArgumentError
         
     | 
| 
       12 
     | 
    
         
            -
                  @internal_argument_error_class = Servactory::Errors::InternalArgumentError
         
     | 
| 
       13 
     | 
    
         
            -
                  @output_argument_error_class = Servactory::Errors::OutputArgumentError
         
     | 
| 
       14 
     | 
    
         
            -
             
     | 
| 
       15 
     | 
    
         
            -
                  @failure_class = Servactory::Errors::Failure
         
     | 
| 
       16 
     | 
    
         
            -
                end
         
     | 
| 
       17 
     | 
    
         
            -
              end
         
     | 
| 
       18 
     | 
    
         
            -
            end
         
     |