module Formtastic::Inputs::Base::Validations

Public Instance Methods

autofocus?() click to toggle source
# File lib/formtastic/inputs/base/validations.rb, line 181
def autofocus?
  opt_autofocus = options[:input_html] && options[:input_html][:autofocus]

  !!opt_autofocus
end
column_limit() click to toggle source
# File lib/formtastic/inputs/base/validations.rb, line 187
def column_limit
  column.limit if column? && column.respond_to?(:limit)
end
limit() click to toggle source
# File lib/formtastic/inputs/base/validations.rb, line 191
def limit
  validation_limit || column_limit
end
not_required_through_negated_validation!() click to toggle source
# File lib/formtastic/inputs/base/validations.rb, line 169
def not_required_through_negated_validation!
  @not_required_through_negated_validation = true
end
not_required_through_negated_validation?() click to toggle source
# File lib/formtastic/inputs/base/validations.rb, line 165
def not_required_through_negated_validation?
  @not_required_through_negated_validation
end
optional?() click to toggle source
# File lib/formtastic/inputs/base/validations.rb, line 177
def optional?
  !required?
end
required?() click to toggle source
# File lib/formtastic/inputs/base/validations.rb, line 134
def required?
  return false if options[:required] == false
  return true if options[:required] == true
  return false if not_required_through_negated_validation?
  if validations?
    validations.select { |validator|
      if validator.options.key?(:on)
        return false if (validator.options[:on] != :save) && ((object.new_record? && validator.options[:on] != :create) || (!object.new_record? && validator.options[:on] != :update))
      end
      case validator.kind
      when :presence
        true
      when :inclusion
        validator.options[:allow_blank] != true
      when :length
        validator.options[:allow_blank] != true &&
        validator.options[:minimum].to_i > 0 ||
        validator.options[:within].try(:first).to_i > 0
      else
        false
      end
    }.any?
  else
    return responds_to_global_required? && !!builder.all_fields_required_by_default
  end
end
required_attribute?() click to toggle source
# File lib/formtastic/inputs/base/validations.rb, line 161
def required_attribute?
  required? && builder.use_required_attribute
end
responds_to_global_required?() click to toggle source
# File lib/formtastic/inputs/base/validations.rb, line 173
def responds_to_global_required?
  true
end
validation_integer_only?() click to toggle source
# File lib/formtastic/inputs/base/validations.rb, line 119
def validation_integer_only?
  validation = validations? && validations.find do |validation|
    validation.kind == :numericality
  end
  if validation
    validation.options[:only_integer]
  else
    false
  end
end
validation_limit() click to toggle source
# File lib/formtastic/inputs/base/validations.rb, line 54
def validation_limit
  validation = validations? && validations.find do |validation|
    validation.kind == :length
  end
  if validation
    validation.options[:maximum] || (validation.options[:within].present? ? validation.options[:within].max : nil)
  else
    nil
  end
end
validation_max() click to toggle source

Prefer :less_than_or_equal_to over :less_than, for no particular reason.

# File lib/formtastic/inputs/base/validations.rb, line 88
def validation_max
  validation = validations? && validations.find do |validation|
    validation.kind == :numericality
  end
  if validation
    # We can't determine an appropriate value for :greater_than with a float/decimal column
    raise IndeterminableMaximumAttributeError if validation.options[:less_than] && column? && [:float, :decimal].include?(column.type)

    if validation.options[:less_than_or_equal_to]
      return (validation.options[:less_than_or_equal_to].call(object)) if validation.options[:less_than_or_equal_to].kind_of?(Proc)
      return (validation.options[:less_than_or_equal_to])
    end

    if validation.options[:less_than]
      return ((validation.options[:less_than].call(object)) - 1) if validation.options[:less_than].kind_of?(Proc)
      return (validation.options[:less_than] - 1)
    end
  end
end
validation_min() click to toggle source

Prefer :greater_than_or_equal_to over :greater_than, for no particular reason.

# File lib/formtastic/inputs/base/validations.rb, line 66
def validation_min
  validation = validations? && validations.find do |validation|
    validation.kind == :numericality
  end

  if validation
    # We can't determine an appropriate value for :greater_than with a float/decimal column
    raise IndeterminableMinimumAttributeError if validation.options[:greater_than] && column? && [:float, :decimal].include?(column.type)

    if validation.options[:greater_than_or_equal_to]
      return (validation.options[:greater_than_or_equal_to].call(object)) if validation.options[:greater_than_or_equal_to].kind_of?(Proc)
      return (validation.options[:greater_than_or_equal_to])
    end

    if validation.options[:greater_than]
      return (validation.options[:greater_than].call(object) + 1) if validation.options[:greater_than].kind_of?(Proc)
      return (validation.options[:greater_than] + 1)
    end
  end
end
validation_step() click to toggle source
# File lib/formtastic/inputs/base/validations.rb, line 108
def validation_step
  validation = validations? && validations.find do |validation|
    validation.kind == :numericality
  end
  if validation
    validation.options[:step] || (1 if validation_integer_only?)
  else
    nil
  end
end
validations() click to toggle source
# File lib/formtastic/inputs/base/validations.rb, line 24
def validations
  @validations ||= if object && object.class.respond_to?(:validators_on)
    object.class.validators_on(attributized_method_name).select do |validator|
      validator_relevant?(validator)
    end
  else
    nil
  end
end
validations?() click to toggle source
# File lib/formtastic/inputs/base/validations.rb, line 130
def validations?
  validations != nil
end
validator_relevant?(validator) click to toggle source
# File lib/formtastic/inputs/base/validations.rb, line 34
def validator_relevant?(validator)
  return true unless validator.options.key?(:if) || validator.options.key?(:unless)
  conditional = validator.options.key?(:if) ? validator.options[:if] : validator.options[:unless]

  result = if conditional.respond_to?(:call) && conditional.arity > 0
    conditional.call(object)
  elsif conditional.respond_to?(:call) && conditional.arity == 0
    object.instance_exec(&conditional)
  elsif conditional.is_a?(::Symbol) && object.respond_to?(conditional)
    object.send(conditional)
  else
    conditional
  end

  result = validator.options.key?(:unless) ? !result : !!result
  not_required_through_negated_validation! if !result && [:presence, :inclusion, :length].include?(validator.kind)

  result
end