Create a gist now

Instantly share code, notes, and snippets.

Embed
What would you like to do?
require 'active_support/basic_object'
ActiveRecord::Base.class_eval do
class WithoutCallbacks < ActiveSupport::BasicObject
def initialize(target, types)
@target = target
@types = types
end
def respond_to?(method, include_private = false)
@target.respond_to?(method, include_private)
end
def method_missing(method, *args, &block)
@target.skip_callbacks(*@types) do
@target.send(method, *args, &block)
end
end
end
class << self
def without_callbacks(*types)
WithoutCallbacks.new(self, types)
end
def skip_callbacks(*types)
types = [:save, :create, :update, :destroy, :touch] if types.empty?
deactivate_callbacks(types)
yield.tap do
activate_callbacks(types)
end
end
def deactivate_callbacks(types)
types.each do |type|
name = :"_run_#{type}_callbacks"
alias_method(:"_deactivated_#{name}", name)
define_method(name) { |&block| block.call }
end
end
def activate_callbacks(types)
types.each do |type|
name = :"_run_#{type}_callbacks"
alias_method(name, :"_deactivated_#{name}")
undef_method(:"_deactivated_#{name}")
end
end
end
end
@chamnap

This comment has been minimized.

Show comment
Hide comment
@chamnap

chamnap Apr 30, 2014

How about rails 4?

chamnap commented Apr 30, 2014

How about rails 4?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment