class Copyable::ModelHooks

Attributes

all_callbacks_disabled[R]

Public Class Methods

disable!(klass) click to toggle source

Disabling callbacks automatically disables any registered observers, since observers use the callback mechanism internally.

# File lib/copyable/model_hooks.rb, line 7
def self.disable!(klass)
  disable_all_callbacks(klass)
end
reenable!(klass) click to toggle source
# File lib/copyable/model_hooks.rb, line 11
def self.reenable!(klass)
  reenable_all_callbacks(klass)
end

Private Class Methods

disable_all_callbacks(klass) click to toggle source
# File lib/copyable/model_hooks.rb, line 17
def self.disable_all_callbacks(klass)
  klass.class_eval do
    return if self.method_defined? :old_save! # Don't do this more than once

    @all_callbacks_disabled = true
    class << self
      attr_reader :all_callbacks_disabled
    end

    alias_method :old_save!, :save!

    # Hold my beer while we bypass all the Rails callbacks
    # in favor of some raw SQL
    def save!
      Copyable::Saver.save!(self)
    end
  end
end
reenable_all_callbacks(klass) click to toggle source
# File lib/copyable/model_hooks.rb, line 36
def self.reenable_all_callbacks(klass)
  klass.class_eval do
    return unless self.method_defined? :old_save! # Don't do this more than once
    @all_callbacks_disabled = false
    class << self
      attr_reader :all_callbacks_disabled
    end

    alias_method :save!, :old_save!
    remove_method :old_save!
  end
end

Private Instance Methods

save!() click to toggle source

Hold my beer while we bypass all the Rails callbacks in favor of some raw SQL

# File lib/copyable/model_hooks.rb, line 30
def save!
  Copyable::Saver.save!(self)
end