Sha256: c18fbf6393851831f30a3d02330e7017a88e952ccaa4fa095b09e34ec250d299

Contents?: true

Size: 1.45 KB

Versions: 1

Compression:

Stored size: 1.45 KB

Contents

module Dry
  module Validation
    class Schema::Result
      include Dry::Equalizer(:params, :messages)
      include Enumerable

      attr_reader :params

      attr_reader :result

      attr_reader :errors

      attr_reader :error_compiler

      attr_reader :hint_compiler

      def initialize(params, result, errors, error_compiler, hint_compiler)
        @params = params
        @result = result
        @errors = errors
        @error_compiler = error_compiler
        @hint_compiler = hint_compiler
      end

      def each(&block)
        failures.each(&block)
      end

      def empty?
        errors.empty?
      end

      def to_ary
        errors.map(&:to_ary)
      end

      def messages(options = {})
        @messages ||=
          begin
            all_msgs = error_compiler.with(options).(errors.map(&:to_ary))
            hints = hint_compiler.with(options).call

            msgs_data = all_msgs.map do |(name, data)|
              msgs, input =
                if data.is_a?(Hash)
                  values = data.values
                  [values.map(&:first).flatten.concat(hints[name]).uniq, values[0][1]]
                else
                  [data[0].concat(hints[name]).uniq.flatten, data[1]]
                end

              [name, [msgs, input]]
            end

            Hash[msgs_data]
          end
      end

      def successes
        result.successes
      end

      def failures
        result.failures
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
dry-validation-0.6.0 lib/dry/validation/schema/result.rb