Skip to content

Commit 4ad085a

Browse files
committed
fix: align destroy event with polymorphic associations and update specs
1 parent 0c511ed commit 4ad085a

2 files changed

Lines changed: 28 additions & 3 deletions

File tree

lib/paper_trail/events/destroy.rb

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,9 @@ class Destroy < Base
1313
# @api private
1414
def data
1515
data = {
16-
item_id: @record.id,
17-
item_type: @record.class.base_class.name,
16+
# Keep destroy aligned with create/update so Rails resolves
17+
# `item_type` via the polymorphic association.
18+
item: @record,
1819
event: @record.paper_trail_event || "destroy",
1920
whodunnit: PaperTrail.request.whodunnit
2021
}

spec/paper_trail/events/destroy_spec.rb

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,18 @@
22

33
require "spec_helper"
44

5+
# Regression fixture for overridden polymorphic type names.
6+
module PolymorphicNameOverride
7+
class Widget < ApplicationRecord
8+
self.table_name = "widgets"
9+
has_paper_trail
10+
11+
def self.polymorphic_name
12+
"Widget"
13+
end
14+
end
15+
end
16+
517
module PaperTrail
618
module Events
719
::RSpec.describe Destroy do
@@ -12,10 +24,22 @@ module Events
1224
path_to_stardom: "Mexican radio"
1325
)
1426
data = described_class.new(carter, true).data
15-
expect(data[:item_type]).to eq("Family::Family")
27+
version = PaperTrail::Version.new(data)
28+
expect(data[:item]).to eq(carter)
29+
expect(version.item_type).to eq("Family::Family")
1630
expect(data[:item_subtype]).to eq("Family::CelebrityFamily")
1731
end
1832

33+
# Destroy versions should respect `polymorphic_name` just like create/update.
34+
it "uses polymorphic_name for destroy versions" do
35+
widget = PolymorphicNameOverride::Widget.create!(name: "Henry")
36+
widget.update!(name: "Harry")
37+
widget.destroy
38+
39+
expect(widget.versions.pluck(:event)).to eq(%w[create update destroy])
40+
expect(widget.versions.pluck(:item_type).uniq).to eq(["Widget"])
41+
end
42+
1943
context "with skipper" do
2044
let(:skipper) { Skipper.create!(another_timestamp: Time.current) }
2145
let(:data) { described_class.new(skipper, false).data }

0 commit comments

Comments
 (0)