mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
26392c4ac5
This makes it possible to pass additional options through Validators to message generation. E.g. plugin authors want to add validates_presence_of :foo, :format => "some format". Also, cleanup the :default vs :message options confusion in ActiveModel validation message generation. Also, deprecate ActiveModel::Errors#add_on_blank(attributes, custom_message) in favor of ActiveModel::Errors#add_on_blank(attributes, options). Also, refactoring of ActiveModel and ActiveRecord Validation tests. Test are a lot more DRY now. Better test coverage as well now. The first four points were reapplied from an older patch of Sven Fuchs which didn't apply cleanly anymore and was not complete yet. Signed-off-by: José Valim <jose.valim@gmail.com>
43 lines
2 KiB
Ruby
43 lines
2 KiB
Ruby
require 'active_support/core_ext/object/blank'
|
|
|
|
module ActiveModel
|
|
|
|
# == Active Model Presence Validator
|
|
module Validations
|
|
class PresenceValidator < EachValidator
|
|
def validate(record)
|
|
record.errors.add_on_blank(attributes, options)
|
|
end
|
|
end
|
|
|
|
module HelperMethods
|
|
# Validates that the specified attributes are not blank (as defined by Object#blank?). Happens by default on save. Example:
|
|
#
|
|
# class Person < ActiveRecord::Base
|
|
# validates_presence_of :first_name
|
|
# end
|
|
#
|
|
# The first_name attribute must be in the object and it cannot be blank.
|
|
#
|
|
# If you want to validate the presence of a boolean field (where the real values are true and false),
|
|
# you will want to use <tt>validates_inclusion_of :field_name, :in => [true, false]</tt>.
|
|
#
|
|
# This is due to the way Object#blank? handles boolean values: <tt>false.blank? # => true</tt>.
|
|
#
|
|
# Configuration options:
|
|
# * <tt>message</tt> - A custom error message (default is: "can't be blank").
|
|
# * <tt>on</tt> - Specifies when this validation is active (default is <tt>:save</tt>, other options <tt>:create</tt>,
|
|
# <tt>:update</tt>).
|
|
# * <tt>if</tt> - Specifies a method, proc or string to call to determine if the validation should
|
|
# occur (e.g. <tt>:if => :allow_validation</tt>, or <tt>:if => Proc.new { |user| user.signup_step > 2 }</tt>).
|
|
# The method, proc or string should return or evaluate to a true or false value.
|
|
# * <tt>unless</tt> - Specifies a method, proc or string to call to determine if the validation should
|
|
# not occur (e.g. <tt>:unless => :skip_validation</tt>, or <tt>:unless => Proc.new { |user| user.signup_step <= 2 }</tt>).
|
|
# The method, proc or string should return or evaluate to a true or false value.
|
|
#
|
|
def validates_presence_of(*attr_names)
|
|
validates_with PresenceValidator, _merge_attributes(attr_names)
|
|
end
|
|
end
|
|
end
|
|
end
|