Sha256: 115ba0b886077d1c3e54808a5b64bffe4a49bb86c202168317bd61ea1d46d0e5

Contents?: true

Size: 1.12 KB

Versions: 1

Compression:

Stored size: 1.12 KB

Contents

require "dry-validation"
require "reform/validation"
require "dry/validation/schema/form"

module Reform::Form::Dry
  module Validations

    def build_errors
      Reform::Contract::Errors.new(self)
    end

    module ClassMethods
      def validation_group_class
        Group
      end
    end

    def self.included(includer)
      includer.extend(ClassMethods)
    end

    class Group
      def initialize
        @validator = Class.new(ValidatorSchema)
      end

      def instance_exec(&block)
        @validator.class_eval(&block)
      end

      def call(fields, reform_errors, form)
        validator = @validator.new(form)

        validator.call(fields).messages.each do |dry_error|
          # a dry error message looks like this:
          # [:email, [['Please provide your email', '']]]
          dry_error[1].each do |attr_error|
            reform_errors.add(dry_error[0], attr_error[0])
          end
        end
      end
    end

    class ValidatorSchema < Dry::Validation::Schema::Form
      def initialize(form)
        @form = form
        super()
      end

      def form
        @form
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
reform-2.1.0.rc1 lib/reform/form/dry.rb