Sha256: 14118fa0d2c8fd1b21f78975ab76ac3f2ed9961fb63ef28291ddc62377e75c0c

Contents?: true

Size: 960 Bytes

Versions: 3

Compression:

Stored size: 960 Bytes

Contents

module Copyable
  class ModelHooks

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

    def self.disable!(klass)
      disable_all_callbacks(klass)
    end

    def self.reenable!(klass)
      reenable_all_callbacks(klass)
    end

  private

    def self.disable_all_callbacks(klass)
      klass.class_eval do
        alias_method :__disabled__run_callbacks, :run_callbacks
        # We are violently duck-punching ActiveRecord because ActiveRecord
        # gives us no way to turn off callbacks.  My apologies to the
        # squeamish.
        def run_callbacks(kind, *args, &block)
          if block_given?
            yield
          else
            true
          end
        end
      end
    end

    def self.reenable_all_callbacks(klass)
      klass.class_eval do
        alias_method :run_callbacks, :__disabled__run_callbacks
      end
    end

  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
copyable-0.1.0 lib/copyable/model_hooks.rb
copyable-0.0.2 lib/copyable/model_hooks.rb
copyable-0.0.1 lib/copyable/model_hooks.rb