module Fend::Plugins::ValidationOptions::ParamMethods

Public Instance Methods

validate(opts = {}) click to toggle source
# File lib/fend/plugins/validation_options.rb, line 90
def validate(opts = {})
  return if opts.empty?

  allow_nil   = opts.delete(:allow_nil)
  allow_blank = opts.delete(:allow_blank)

  return if (allow_nil == true && value.nil?) || (allow_blank == true && blank?)

  opts.each do |validator_name, args|
    method_name = "validate_#{validator_name}"

    raise Error, "undefined validation method '#{validator_name}'" unless respond_to?(method_name)

    if NO_ARG_METHODS.include?(validator_name)
      if !!args == args
        next unless args

        validation_method_args = []
      else
        validation_method_args = [args]
      end
    elsif args.is_a?(Hash)
      mandatory_arg_key = MANDATORY_ARG_KEYS[validator_name]

      unless args.key?(mandatory_arg_key) || args.key?(DEFAULT_ARG_KEY)
        raise Error, "missing mandatory argument for '#{validator_name}' validator"
      end

      mandatory_arg = args.delete(mandatory_arg_key) || args.delete(DEFAULT_ARG_KEY)

      validation_method_args = [mandatory_arg, args]
    else
      validation_method_args = ARRAY_ARG_METHODS.include?(validator_name) ? [args] : args
    end

    public_send(method_name, *validation_method_args)
  end
end