Class: ActiveRecordWithoutCallbacks

Inherits:
Object
  • Object
show all
Defined in:
lib/active-record-without-callbacks.rb

Class Method Summary collapse

Class Method Details

.wo_callbacks(klass) ⇒ Object



2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# File 'lib/active-record-without-callbacks.rb', line 2

def self.wo_callbacks(klass)
  #List of various possible callbacks.
  takes = [:_create_callbacks, :_find_callbacks, :_initialize_callbacks, :_destroy_callbacks, :_commit_callbacks, :_rollback_callbacks, :_save_callbacks, :_touch_callbacks, :_update_callbacks, :_validate_callbacks, :_validation_callbacks]
  
  #Array containing previous values.
  saved = []
  
  #Thread.exclusive do
    takes.each do |take|
      #Store previous value for restoring later.
      saved << {
        :take => take,
        :value => klass.__send__(take)
      }
      
      #Clear all callbacks.
      klass.__send__("#{take}=", [])
      
      raise "Expected '#{take}' to be empty but it wasnt: #{klass.__send__(take)}" unless klass.__send__(take).empty?
    end
    
    begin
      return yield
    ensure
      #Restore previous callbacks.
      saved.each do |save|
        klass.__send__("#{save[:take]}=", save[:value])
      end
    end
  #end
end