Skip to content

Commit

Permalink
update ActiveModel::Validations::Callbacks documentation [ci skip]
Browse files Browse the repository at this point in the history
  • Loading branch information
Francesco Rodriguez committed Jul 30, 2012
1 parent 097bfc8 commit cb6c3e2
Showing 1 changed file with 69 additions and 18 deletions.
87 changes: 69 additions & 18 deletions activemodel/lib/active_model/validations/callbacks.rb
Expand Up @@ -2,24 +2,24 @@

module ActiveModel
module Validations
# == Active Model Validation callbacks
#
# Provides an interface for any class to have +before_validation+ and
# +after_validation+ callbacks.
#
# First, include ActiveModel::Validations::Callbacks from the class you are
# creating:
#
# class MyModel
# include ActiveModel::Validations::Callbacks
#
# before_validation :do_stuff_before_validation
# after_validation :do_stuff_after_validation
# end
#
# Like other <tt>before_*</tt> callbacks if +before_validation+ returns
# +false+ then <tt>valid?</tt> will not be called.
module Callbacks
# == Active Model Validation callbacks
#
# Provides an interface for any class to have <tt>before_validation</tt> and
# <tt>after_validation</tt> callbacks.
#
# First, include ActiveModel::Validations::Callbacks from the class you are
# creating:
#
# class MyModel
# include ActiveModel::Validations::Callbacks
#
# before_validation :do_stuff_before_validation
# after_validation :do_stuff_after_validation
# end
#
# Like other before_* callbacks if <tt>before_validation</tt> returns false
# then <tt>valid?</tt> will not be called.
extend ActiveSupport::Concern

included do
Expand All @@ -28,6 +28,30 @@ module Callbacks
end

module ClassMethods
# Defines a callback that will get called right before validation
# happens.
#
# class Person
# include ActiveModel::Validations
# include ActiveModel::Validations::Callbacks
#
# attr_accessor :name
#
# validates_length_of :name, maximum: 6
#
# before_validation :remove_whitespaces
#
# private
#
# def remove_whitespaces
# name.strip!
# end
# end
#
# person = Person.new
# person.name = ' bob '
# person.valid? # => true
# person.name # => "bob"
def before_validation(*args, &block)
options = args.last
if options.is_a?(Hash) && options[:on]
Expand All @@ -37,6 +61,33 @@ def before_validation(*args, &block)
set_callback(:validation, :before, *args, &block)
end

# Defines a callback that will get called right after validation
# happens.
#
# class Person
# include ActiveModel::Validations
# include ActiveModel::Validations::Callbacks
#
# attr_accessor :name, :status
#
# validates_presence_of :name
#
# after_validation :set_status
#
# private
#
# def set_status
# self.status = (errors.empty?) ? true : false
# end
# end
#
# person = Person.new
# person.name = ''
# person.valid? # => false
# person.status # => false
#  person.name = 'bob'
# person.valid? # => true
# person.status # => true
def after_validation(*args, &block)
options = args.extract_options!
options[:prepend] = true
Expand All @@ -49,7 +100,7 @@ def after_validation(*args, &block)
protected

# Overwrite run validations to include callbacks.
def run_validations!
def run_validations! #:nodoc:
run_callbacks(:validation) { super }
end
end
Expand Down

0 comments on commit cb6c3e2

Please sign in to comment.