Skip to content

Commit

Permalink
Fix after_commit on: :destroy not being triggered
Browse files Browse the repository at this point in the history
  • Loading branch information
npezza93 committed May 3, 2017
1 parent c1232a3 commit fa715e3
Show file tree
Hide file tree
Showing 2 changed files with 47 additions and 0 deletions.
18 changes: 18 additions & 0 deletions lib/paranoia.rb
Original file line number Diff line number Diff line change
Expand Up @@ -193,6 +193,24 @@ def timestamp_attributes_with_current_time
timestamp_attributes_for_update_in_model.each_with_object({}) { |attr,hash| hash[attr] = current_time_from_proper_timezone }
end

def transaction_include_any_action?(actions) #:nodoc:
actions.any? do |action|
case action
when :create
transaction_record_state(:new_record)
when :destroy
transaction_include_destroy?
when :update
!(transaction_record_state(:new_record) || transaction_include_destroy?)
end
end
end


def transaction_include_destroy?
destroyed? || try(:paranoia_destroyed?)
end

# restore associated records that have been soft deleted when
# we called #destroy
def restore_associated_records(recovery_window_range = nil)
Expand Down
29 changes: 29 additions & 0 deletions test/paranoia_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -111,6 +111,16 @@ def test_destroy_behavior_for_plain_models
assert_equal 0, model.class.unscoped.count
end

def test_destroy_behavior_for_conditional_models_callbacks
model = AfterCommitDestroyModel.new
model.save
model.reset_after_commit_callback_called # clear called callback flags
refute model.after_commit_callback_called
model.destroy

assert model.after_commit_callback_called
end

# Anti-regression test for #81, which would've introduced a bug to break this test.
def test_destroy_behavior_for_plain_models_callbacks
model = CallbackModel.new
Expand Down Expand Up @@ -1359,3 +1369,22 @@ class ParanoidBelongsTo < ActiveRecord::Base
belongs_to :paranoid_has_one
end
end

class AfterCommitDestroyModel < ActiveRecord::Base
self.table_name = "callback_models"

attr_reader :after_commit_callback_called

acts_as_paranoid
after_commit :callback_triggered, on: :destroy

def reset_after_commit_callback_called
@after_commit_callback_called = false
end

private

def callback_triggered
@after_commit_callback_called = true
end
end

0 comments on commit fa715e3

Please sign in to comment.