diff --git a/lib/audited.rb b/lib/audited.rb index 096959d7..3a616ca8 100644 --- a/lib/audited.rb +++ b/lib/audited.rb @@ -15,6 +15,7 @@ class << self :ignored_attributes, :ignored_default_callbacks, :max_audits, + :keep_create_action, :store_synthesized_enums attr_writer :audit_class diff --git a/lib/audited/auditor.rb b/lib/audited/auditor.rb index c9c867ae..00359b1f 100644 --- a/lib/audited/auditor.rb +++ b/lib/audited/auditor.rb @@ -388,6 +388,9 @@ def combine_audits_if_needed if max_audits && (extra_count = audits.count - max_audits) > 0 audits_to_combine = audits.limit(extra_count + 1) + if audited_options[:keep_create_action] + audits_to_combine = audits_to_combine.where.not(action: 'create') + end combine_audits(audits_to_combine) end end @@ -515,6 +518,7 @@ def normalize_audited_options audited_options[:only] = Array.wrap(audited_options[:only]).map(&:to_s) audited_options[:except] = Array.wrap(audited_options[:except]).map(&:to_s) audited_options[:max_audits] ||= Audited.max_audits + audited_options[:keep_create_action] ||= Audited.keep_create_action end def calculate_non_audited_columns diff --git a/spec/audited/auditor_spec.rb b/spec/audited/auditor_spec.rb index cff4044b..7912b0ea 100644 --- a/spec/audited/auditor_spec.rb +++ b/spec/audited/auditor_spec.rb @@ -722,6 +722,28 @@ class CallbacksSpecified < ::ActiveRecord::Base end end + context 'when set to keep create action' do + before do + Audited.keep_create_action = true + end + + it 'should respect per model setting' do + stub_global_max_audits(4) do + expect(Models::ActiveRecord::MaxAuditsIgnoreKeepCreateActionUser.audited_options[:keep_create_action]).to be_falsey + end + end + + it 'should keep create action' do + stub_global_max_audits(2) do + user = Models::ActiveRecord::User.create!(name: "Foobar 1") + user.update(name: "Foobar 2", audit_comment: "First audit comment") + user.update(name: "Foobar 3", audit_comment: "Second audit comment") + pp user.audits + expect(user.audits.first.action).to eq('create') + end + end + end + def stub_global_max_audits(max_audits) previous_max_audits = Audited.max_audits previous_user_audited_options = Models::ActiveRecord::User.audited_options.dup diff --git a/spec/support/active_record/models.rb b/spec/support/active_record/models.rb index 34dde868..6650ee51 100644 --- a/spec/support/active_record/models.rb +++ b/spec/support/active_record/models.rb @@ -128,6 +128,11 @@ class MaxAuditsUser < ::ActiveRecord::Base audited max_audits: 5 end + class MaxAuditsIgnoreKeepCreateActionUser < ::ActiveRecord::Base + self.table_name = :users + audited max_audits: 6, keep_create_action: false + end + class Company < ::ActiveRecord::Base audited end