Sha256: 03fff590d39b5893398d4aa4bedd9bab419b2923311be9c3af13186a4aa8789f
Contents?: true
Size: 1.64 KB
Versions: 1
Compression:
Stored size: 1.64 KB
Contents
# use this module to defer actions to the after-commit hook. this is useful if you want # to trigger actions in after_create, after_destroy and after_update callbacks but want # to execute them outside of the transaction (for example, to avoid deadlocks). # # Usage: # after_create :my_hook # def my_hook # execute_after_commit { puts "This is called after committing the transaction. "} # end module AfterCommitAction module ActiveRecord def self.included(base) base.after_commit :_after_commit_hook end def execute_after_commit(&block) @_execute_after_commit ||= [] @_execute_after_commit<< block end def _after_commit_hook begin until @_execute_after_commit.blank? @_execute_after_commit.shift.call end rescue => e if defined?(Exceptional) # Rails quietly swallows exceptions in after-commit actions; to avoid missing these # exceptions, we pass them to Exceptional explicitly Exceptional.context(:after_commit_entity => self.inspect) Exceptional.handle(e, "execute_after_commit") else Rails.logger.error "Error in execute_after_commit block: #{e.inspect}" end raise e end end end if defined?(Rails) # if this is a full blown rails app, use a railtie. This avoids deprecation warnings in Rails 4.2 class Railtie < Rails::Railtie initializer "active_record.include_plugins" do ActiveSupport.on_load(:active_record) do ::ActiveRecord::Base.send :include, ActiveRecord end end end else ::ActiveRecord::Base.send :include, ActiveRecord end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
after_commit_action-0.1.4 | lib/after_commit_action.rb |