~michaelforrest/use-case-mapper/trunk

« back to all changes in this revision

Viewing changes to vendor/rails/activerecord/test/cases/repair_helper.rb

  • Committer: Michael Forrest
  • Date: 2010-10-15 16:28:50 UTC
  • Revision ID: michael.forrest@canonical.com-20101015162850-tj2vchanv0kr0dun
refrozeĀ gems

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
module ActiveRecord
 
2
  module Testing
 
3
    module RepairHelper
 
4
      def self.included(base)
 
5
        base.class_eval do
 
6
          extend ClassMethods
 
7
        end
 
8
      end
 
9
 
 
10
      module Toolbox
 
11
        def self.record_validations(*model_classes)
 
12
          model_classes.inject({}) do |repair, klass|
 
13
            repair[klass] ||= {}
 
14
            [:validate, :validate_on_create, :validate_on_update].each do |callback|
 
15
              the_callback = klass.instance_variable_get("@#{callback.to_s}_callbacks")
 
16
              repair[klass][callback] = (the_callback.nil? ? nil : the_callback.dup)
 
17
            end
 
18
            repair
 
19
          end
 
20
        end
 
21
 
 
22
        def self.reset_validations(recorded)
 
23
          recorded.each do |klass, repairs|
 
24
            [:validate, :validate_on_create, :validate_on_update].each do |callback|
 
25
              klass.instance_variable_set("@#{callback.to_s}_callbacks", repairs[callback])
 
26
            end
 
27
          end
 
28
        end
 
29
      end
 
30
 
 
31
      module ClassMethods
 
32
        def repair_validations(*model_classes)
 
33
          setup do
 
34
            @validation_repairs = ActiveRecord::Testing::RepairHelper::Toolbox.record_validations(*model_classes)
 
35
          end
 
36
          teardown do
 
37
            ActiveRecord::Testing::RepairHelper::Toolbox.reset_validations(@validation_repairs)
 
38
          end
 
39
        end
 
40
      end
 
41
 
 
42
      def repair_validations(*model_classes, &block)
 
43
        validation_repairs = ActiveRecord::Testing::RepairHelper::Toolbox.record_validations(*model_classes)
 
44
        return block.call
 
45
      ensure
 
46
        ActiveRecord::Testing::RepairHelper::Toolbox.reset_validations(validation_repairs)
 
47
      end
 
48
    end
 
49
  end
 
50
end