Sha256: 18f95fd79bf98028acce96c73fef332e0316ac6abfdc19dc24860f69de2b0928

Contents?: true

Size: 1.19 KB

Versions: 13

Compression:

Stored size: 1.19 KB

Contents

# frozen_string_literal: true

module ConvenientService
  module Service
    module Plugins
      module HasResultParamsValidations
        module UsingDryValidation
          class Middleware < Core::MethodChainMiddleware
            def next(...)
              return entity.failure(data: errors) if errors.any?

              chain.next(...)
            end

            private

            ##
            # NOTE: An example of `Dry::Validation::Contract` usage.
            # https://dry-rb.org/gems/dry-validation/1.8/#quick-start
            #
            # TODO: Return one or all errors?
            #
            def errors
              @errors ||= resolve_errors
            end

            def constructor_kwargs
              @constructor_kwargs ||= entity.constructor_params.kwargs
            end

            def contract
              @contract ||= entity.class.contract
            end

            def resolve_errors
              return {} unless contract.schema

              contract.new
                .call(constructor_kwargs)
                .errors
                .to_h
                .transform_values(&:first)
            end
          end
        end
      end
    end
  end
end

Version data entries

13 entries across 13 versions & 1 rubygems

Version Path
convenient_service-0.12.0 lib/convenient_service/service/plugins/has_result_params_validations/using_dry_validation/middleware.rb
convenient_service-0.11.0 lib/convenient_service/service/plugins/has_result_params_validations/using_dry_validation/middleware.rb
convenient_service-0.10.1 lib/convenient_service/service/plugins/has_result_params_validations/using_dry_validation/middleware.rb
convenient_service-0.10.0 lib/convenient_service/service/plugins/has_result_params_validations/using_dry_validation/middleware.rb
convenient_service-0.9.0 lib/convenient_service/service/plugins/has_result_params_validations/using_dry_validation/middleware.rb
convenient_service-0.8.0 lib/convenient_service/service/plugins/has_result_params_validations/using_dry_validation/middleware.rb
convenient_service-0.7.0 lib/convenient_service/service/plugins/has_result_params_validations/using_dry_validation/middleware.rb
convenient_service-0.6.0 lib/convenient_service/service/plugins/has_result_params_validations/using_dry_validation/middleware.rb
convenient_service-0.5.0 lib/convenient_service/service/plugins/has_result_params_validations/using_dry_validation/middleware.rb
convenient_service-0.4.0 lib/convenient_service/service/plugins/has_result_params_validations/using_dry_validation/middleware.rb
convenient_service-0.3.1 lib/convenient_service/service/plugins/has_result_params_validations/using_dry_validation/middleware.rb
convenient_service-0.3.0 lib/convenient_service/service/plugins/has_result_params_validations/using_dry_validation/middleware.rb
convenient_service-0.2.1 lib/convenient_service/service/plugins/has_result_params_validations/using_dry_validation/middleware.rb