Skip to content

Commit

Permalink
updated AMo validations to use a context for valid? and invalid?, rem…
Browse files Browse the repository at this point in the history
…oving the dependency on AR
  • Loading branch information
joshk authored and Carl Lerche committed May 8, 2010
1 parent 0b4211c commit 8248506
Showing 1 changed file with 12 additions and 5 deletions.
17 changes: 12 additions & 5 deletions activemodel/lib/active_model/validations.rb
Expand Up @@ -29,7 +29,7 @@ module ActiveModel
# person.invalid?
# #=> false
# person.first_name = 'zoolander'
# person.valid?
# person.valid?
# #=> false
# person.invalid?
# #=> true
Expand All @@ -48,6 +48,8 @@ module Validations
extend ActiveModel::Translation
define_callbacks :validate, :scope => :name

attr_accessor :validation_context

class_attribute :_validators
self._validators = Hash.new { |h,k| h[k] = [] }
end
Expand Down Expand Up @@ -117,7 +119,7 @@ def validate(*args, &block)
options = args.last
if options.is_a?(Hash) && options.key?(:on)
options[:if] = Array.wrap(options[:if])
options[:if] << "@_on_validate == :#{options[:on]}"
options[:if] << "validation_context == :#{options[:on]}"
end
set_callback(:validate, *args, &block)
end
Expand Down Expand Up @@ -150,15 +152,20 @@ def errors
end

# Runs all the specified validations and returns true if no errors were added otherwise false.
def valid?
# Context can optionally be supplied to define which callbacks to test against (the context is
# defined on the validations using :on).
def valid?(context = nil)
current_context, self.validation_context = validation_context, context
errors.clear
_run_validate_callbacks
errors.empty?
ensure
self.validation_context = current_context
end

# Performs the opposite of <tt>valid?</tt>. Returns true if errors were added, false otherwise.
def invalid?
!valid?
def invalid?(context = nil)
!valid?(context)
end

# Hook method defining how an attribute value should be retieved. By default this is assumed
Expand Down

0 comments on commit 8248506

Please sign in to comment.