Module: CopyMachine::ActiveRecordExtensions::Callbacks

Defined in:
lib/copy_machine/active_record_extensions/callbacks.rb

Instance Method Summary collapse

Instance Method Details

#callback_methodsObject



21
22
23
24
25
26
27
28
29
30
# File 'lib/copy_machine/active_record_extensions/callbacks.rb', line 21

def callback_methods
  instance_methods.select do |im|
    [
      'before_save',
      'after_save',
      'before_create',
      'after_create'
    ].include?(im)
  end
end

#override_callback_methods!Object



32
33
34
35
36
37
38
39
# File 'lib/copy_machine/active_record_extensions/callbacks.rb', line 32

def override_callback_methods!
  callback_methods.each do |m|
    class_eval <<-METHOD, __FILE__, __LINE__ + 1
      def #{m}_with_override; end
      alias_method_chain #{m}, :override
    METHOD
  end
end

#remove_callbacks!Object



11
12
13
14
15
16
17
18
19
# File 'lib/copy_machine/active_record_extensions/callbacks.rb', line 11

def remove_callbacks!
  override_callback_methods!
  callback_vars = self.instance_variables.select { |var| var =~ /callbacks/ }

  callback_vars.each do |cb|
    instance_variable_set("#{cb}_temp".to_sym, instance_variable_get("#{cb}".to_sym))
    self.send(:remove_instance_variable, "#{cb}")
  end
end

#resurrect_callback_methods!Object



41
42
43
44
45
# File 'lib/copy_machine/active_record_extensions/callbacks.rb', line 41

def resurrect_callback_methods!
  callback_methods.each do |m|
    alias_method m, "#{m}_without_override"
  end
end

#resurrect_callbacks!Object



47
48
49
50
51
52
53
54
55
# File 'lib/copy_machine/active_record_extensions/callbacks.rb', line 47

def resurrect_callbacks!
  resurrect_callback_methods!
  temp_callback_vars = instance_variables.select { |var| var =~ /callbacks_temp/ }

  temp_callback_vars.each do |tcb|
    instance_variable_set("#{tcb.gsub("temp", "")}".to_sym, self.instance_variable_get("#{tcb}".to_sym))
    send(:remove_instance_variable, "#{tcb}")
  end
end

#with_disabled_callbacksObject



5
6
7
8
9
# File 'lib/copy_machine/active_record_extensions/callbacks.rb', line 5

def with_disabled_callbacks
  remove_callbacks!
  yield
  resurrect_callbacks!
end