From 5b1a1bf5bfc520248285b036672146122dd2a815 Mon Sep 17 00:00:00 2001 From: Pratik Naik Date: Fri, 20 Mar 2009 10:32:24 +0000 Subject: Make Active Model test suite similar to Active Record --- .../lib/active_model/validations_repair_helper.rb | 48 ++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 activemodel/lib/active_model/validations_repair_helper.rb (limited to 'activemodel/lib/active_model/validations_repair_helper.rb') diff --git a/activemodel/lib/active_model/validations_repair_helper.rb b/activemodel/lib/active_model/validations_repair_helper.rb new file mode 100644 index 0000000000..99e3b2f631 --- /dev/null +++ b/activemodel/lib/active_model/validations_repair_helper.rb @@ -0,0 +1,48 @@ +module ActiveModel + module ValidationsRepairHelper + def self.included(base) + base.class_eval do + extend ClassMethods + end + end + + module Toolbox + def self.record_validations(*model_classes) + model_classes.inject({}) do |repair, klass| + repair[klass] ||= {} + [:validate, :validate_on_create, :validate_on_update].each do |callback| + the_callback = klass.instance_variable_get("@#{callback.to_s}_callbacks") + repair[klass][callback] = (the_callback.nil? ? nil : the_callback.dup) + end + repair + end + end + + def self.reset_validations(recorded) + recorded.each do |klass, repairs| + [:validate, :validate_on_create, :validate_on_update].each do |callback| + klass.instance_variable_set("@#{callback.to_s}_callbacks", repairs[callback]) + end + end + end + end + + module ClassMethods + def repair_validations(*model_classes) + setup do + @validation_repairs = Toolbox.record_validations(*model_classes) + end + teardown do + Toolbox.reset_validations(@validation_repairs) + end + end + end + + def repair_validations(*model_classes, &block) + validation_repairs = Toolbox.record_validations(*model_classes) + return block.call + ensure + Toolbox.reset_validations(validation_repairs) + end + end +end -- cgit v1.2.3