Resources
class Test::Unit::TestCase
self.use_transactional_fixtures = true
self.use_instantiated_fixtures = false
def disable_validation
ActiveRecord::Base.disable_validation!
yield
ActiveRecord::Base.enable_validation!
end
end
module ValidationDisabler
def self.included(base)
base.class_eval do
extend ClassMethods
alias_method_chain :valid?, :disable_check
end
end
def valid_with_disable_check?
if self.class.validation_disabled?
true
else
valid_without_disable_check?
end
end
module ClassMethods
def disable_validation!
@@disable_validation = true
end
def enable_validation!
@@disable_validation = false
end
def validation_disabled?
@@disable_validation ||= false
end
end
end
class ActiveRecord::Base
include ValidationDisabler
end
Note there is a slight problem with how I set the default value for the class variable in the screencast. The code posted here should be correct.
Ideally I would use something like class_inheritable_accessor instead of a class variable, but I was unable to get this to work. Please comment if you have a suggestion.