From e255e71756ab42eb075b5567d15da254303cb1f1 Mon Sep 17 00:00:00 2001 From: Rumble Huang Date: Tue, 29 Jan 2019 11:51:43 +0800 Subject: [PATCH] No need to calculate previous values of skipped attributes --- lib/paper_trail/events/base.rb | 9 +++++---- spec/paper_trail/events/base_spec.rb | 11 +++++++++++ spec/paper_trail/serializer_spec.rb | 6 +++--- 3 files changed, 19 insertions(+), 7 deletions(-) diff --git a/lib/paper_trail/events/base.rb b/lib/paper_trail/events/base.rb index 5eccb29d..1505155e 100644 --- a/lib/paper_trail/events/base.rb +++ b/lib/paper_trail/events/base.rb @@ -59,8 +59,10 @@ module PaperTrail end # @api private - def attributes_before_change(is_touch) - Hash[@record.attributes.map do |k, v| + def nonskipped_attributes_before_change(is_touch) + record_attributes = @record.attributes.except(*@record.paper_trail_options[:skip]) + + Hash[record_attributes.map do |k, v| if @record.class.column_names.include?(k) [k, attribute_in_previous_version(k, is_touch)] else @@ -217,8 +219,7 @@ module PaperTrail # # @api private def object_attrs_for_paper_trail(is_touch) - attrs = attributes_before_change(is_touch). - except(*@record.paper_trail_options[:skip]) + attrs = nonskipped_attributes_before_change(is_touch) AttributeSerializers::ObjectAttribute.new(@record.class).serialize(attrs) attrs end diff --git a/spec/paper_trail/events/base_spec.rb b/spec/paper_trail/events/base_spec.rb index 431fde01..b4f86a6b 100644 --- a/spec/paper_trail/events/base_spec.rb +++ b/spec/paper_trail/events/base_spec.rb @@ -48,6 +48,17 @@ module PaperTrail end end end + + describe "#nonskipped_attributes_before_change", versioning: true do + subject { event.send(:nonskipped_attributes_before_change, false) } + + let(:event) { PaperTrail::Events::Base.new(skipper, false) } + let(:skipper) { Skipper.create!(another_timestamp: Time.now) } + + it do + is_expected.not_to have_key("another_timestamp") + end + end end end end diff --git a/spec/paper_trail/serializer_spec.rb b/spec/paper_trail/serializer_spec.rb index 814d41d6..6ad34b1f 100644 --- a/spec/paper_trail/serializer_spec.rb +++ b/spec/paper_trail/serializer_spec.rb @@ -9,7 +9,7 @@ RSpec.describe(PaperTrail, versioning: true) do customer = Customer.create(name: "Some text.") original_attributes = PaperTrail::Events::Base. new(customer, false). - send(:attributes_before_change, false) + send(:nonskipped_attributes_before_change, false) customer.update(name: "Some more text.") expect(customer.versions.length).to(eq(2)) expect(customer.versions[0].reify).to(be_nil) @@ -34,7 +34,7 @@ RSpec.describe(PaperTrail, versioning: true) do customer = Customer.create(name: "Some text.") original_attributes = PaperTrail::Events::Base. new(customer, false). - send(:attributes_before_change, false) + send(:nonskipped_attributes_before_change, false) customer.update(name: "Some more text.") expect(customer.versions.length).to(eq(2)) expect(customer.versions[0].reify).to(be_nil) @@ -68,7 +68,7 @@ RSpec.describe(PaperTrail, versioning: true) do customer = Customer.create original_attributes = PaperTrail::Events::Base. new(customer, false). - send(:attributes_before_change, false). + send(:nonskipped_attributes_before_change, false). reject { |_k, v| v.nil? } customer.update(name: "Some more text.") expect(customer.versions.length).to(eq(2))