Module: Fend::Plugins::ExternalValidation

Defined in:
lib/fend/plugins/external_validation.rb

Overview

external_validation plugin allows you to delegate param validations to external classes/objects.

plugin :external_validation

External validation must respond to call method that takes param value as an argument and returns error messages either as an array or hash (nested data).

class CustomEmailValidator
  def initialize
    @errors = []
  end

  def call(email_value)
    @errors << "must be string" unless email_value.is_a?(String)
    @errors << "must be unique" unless unique?(email_value)

    @errors
  end

  def unique?(value)
    UniquenessCheck.call(value)
  end
end

class AddressValidation < Fend
  plugin :validation_options

  validate do |i|
    i.params(:city, :street) do |city, street|
      city.validate(type: String)
      street.validate(type: String)
    end
  end
end

class UserValidation < Fend
  plugin :external_validation

  validate do |i|
    i.params(:email, :address) do |email, address|
      email.validate_with(CustomEmailValidation.new)

      address.validate_with(AddressValidation)
    end
  end
end

validation_options plugin supports external_validation:

email.validate(with: CustomEmailValidation.new)

You are free to combine internal and external validations any way you like. Using one doesn’t mean you can’t use the other.

Defined Under Namespace

Modules: ParamMethods