Sha256: 570c7cae8d73d4f9a69d39d8574eb74486646e127178e843bb852a33d056ac7e

Contents?: true

Size: 984 Bytes

Versions: 2

Compression:

Stored size: 984 Bytes

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 ||=
                entity
                  .class
                  .contract
                  .new
                  .call(**entity.constructor_params.kwargs)
                  .errors
                  .to_h
                  .transform_values(&:first)
            end
          end
        end
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
convenient_service-0.2.0 lib/convenient_service/service/plugins/has_result_params_validations/using_dry_validation/middleware.rb
convenient_service-0.1.0 lib/convenient_service/service/plugins/has_result_params_validations/using_dry_validation/middleware.rb