audited 5.2.0 → 5.3.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of audited might be problematic. Click here for more details.

checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 86131fd51439ffb0e1e16fd0b3bdd770c0cdf6de5bc8df5f234377d9ef0aeddb
4
- data.tar.gz: 4729941ef95dc9e6e542eb705ac12ff4876999c61f210a50d8ef460a02d71078
3
+ metadata.gz: a879772fc10cec2e4712d1f1407f78d98e424530bcd0124a02982d65c480a86e
4
+ data.tar.gz: 3323835790e0dec306f7cdf26cd7a64cd3439f62b65c796ccb7db9d444766548
5
5
  SHA512:
6
- metadata.gz: 27d6c2bd685eaca06093e7b8352aa942b83163a09be96fade16cc39ac46502697ca264a54f7a99a4390afe6cc07fbca0d345cb4ad35d7a11d98fa8da9aa262dd
7
- data.tar.gz: 615ffae5d0fe3a44ffde034ddd60a2074cdff6679b1a8d59b23adfa2fed557023ffd786516997627aaf3de7916c39666d85abd24b38b1562976678472bbc85a9
6
+ metadata.gz: f9b3891dbf782c3a24f04fcf552d9c2b821d38af1d4d1cece7b52990657f4a8ecfac86a98dc564b916eea60fe8788729914c58b6ce0e67fe9f55e836366cd13a
7
+ data.tar.gz: 0b2bcb8602361987a30661fad0d22bd0058639a8f238457d37d3ec1c98fd03c4f6978164d2975f159d640ae0aceab024e03268616b55eade69d7dc8210c0ac5a
@@ -1,10 +1,8 @@
1
1
  name: CI
2
2
 
3
3
  on:
4
- pull_request:
5
- push:
6
- branches:
7
- - main
4
+ - pull_request
5
+ - push
8
6
 
9
7
  jobs:
10
8
  build:
@@ -12,7 +10,7 @@ jobs:
12
10
  strategy:
13
11
  fail-fast: false
14
12
  matrix:
15
- ruby: [2.3, 2.4, 2.5, 2.6, 2.7, 3.0, 3.1]
13
+ ruby: [2.3, 2.4, 2.5, 2.6, 2.7, 3.0, 3.1, 3.2]
16
14
  appraisal:
17
15
  - rails50
18
16
  - rails51
@@ -43,6 +41,8 @@ jobs:
43
41
  ruby: 3.0
44
42
  - appraisal: rails50
45
43
  ruby: 3.1
44
+ - appraisal: rails50
45
+ ruby: 3.2
46
46
 
47
47
  # Rails 5.1 supports Ruby 2.2-2.5
48
48
  - appraisal: rails51
@@ -53,6 +53,8 @@ jobs:
53
53
  ruby: 3.0
54
54
  - appraisal: rails51
55
55
  ruby: 3.1
56
+ - appraisal: rails51
57
+ ruby: 3.2
56
58
 
57
59
  # Rails 5.2 supports Ruby 2.2-2.5
58
60
  - appraisal: rails52
@@ -63,6 +65,8 @@ jobs:
63
65
  ruby: 3.0
64
66
  - appraisal: rails52
65
67
  ruby: 3.1
68
+ - appraisal: rails52
69
+ ruby: 3.2
66
70
 
67
71
  # Rails 6.0 supports Ruby 2.5-2.7
68
72
  - appraisal: rails60
@@ -73,6 +77,8 @@ jobs:
73
77
  ruby: 3.0
74
78
  - appraisal: rails60
75
79
  ruby: 3.1
80
+ - appraisal: rails60
81
+ ruby: 3.2
76
82
 
77
83
  # Rails 6.1 supports Ruby 2.5+
78
84
  - appraisal: rails61
data/CHANGELOG.md CHANGED
@@ -1,5 +1,15 @@
1
1
  # Audited ChangeLog
2
2
 
3
+ ## 5.3.0 (2023-02-14)
4
+
5
+ - Audit touch calls - @mcyoung
6
+ [#657](https://github.com/collectiveidea/audited/pull/657)
7
+ - Allow using with Padrino and other non-Rails projects - @nicduke38degrees
8
+ [#655](https://github.com/collectiveidea/audited/pull/655)
9
+ - Testing updates - @jdufresne
10
+ [#652](https://github.com/collectiveidea/audited/pull/652)
11
+ [#653](https://github.com/collectiveidea/audited/pull/653)
12
+
3
13
  ## 5.2.0 (2023-01-23)
4
14
 
5
15
  Improved
data/README.md CHANGED
@@ -24,6 +24,7 @@ Audited supports and is [tested against](https://github.com/collectiveidea/audit
24
24
  * 2.7
25
25
  * 3.0
26
26
  * 3.1
27
+ * 3.2
27
28
 
28
29
  Audited may work just fine with a Ruby version not listed above, but we can't guarantee that it will. If you'd like to maintain a Ruby that isn't listed, please let us know with a [pull request](https://github.com/collectiveidea/audited/pulls).
29
30
 
data/lib/audited/audit.rb CHANGED
@@ -174,7 +174,7 @@ module Audited
174
174
  if action == "create"
175
175
  self.version = 1
176
176
  else
177
- collection = (Rails::VERSION::MAJOR >= 6) ? self.class.unscoped : self.class
177
+ collection = (ActiveRecord::VERSION::MAJOR >= 6) ? self.class.unscoped : self.class
178
178
  max = collection.auditable_finder(auditable_id, auditable_type).maximum(:version) || 0
179
179
  self.version = max + 1
180
180
  end
@@ -84,6 +84,7 @@ module Audited
84
84
 
85
85
  after_create :audit_create if audited_options[:on].include?(:create)
86
86
  before_update :audit_update if audited_options[:on].include?(:update)
87
+ after_touch :audit_touch if audited_options[:on].include?(:touch) && ::ActiveRecord::VERSION::MAJOR >= 6
87
88
  before_destroy :audit_destroy if audited_options[:on].include?(:destroy)
88
89
 
89
90
  # Define and set after_audit and around_audit callbacks. This might be useful if you want
@@ -230,8 +231,15 @@ module Audited
230
231
 
231
232
  private
232
233
 
233
- def audited_changes
234
- all_changes = respond_to?(:changes_to_save) ? changes_to_save : changes
234
+ def audited_changes(for_touch: false)
235
+ all_changes = if for_touch
236
+ previous_changes
237
+ elsif respond_to?(:changes_to_save)
238
+ changes_to_save
239
+ else
240
+ changes
241
+ end
242
+
235
243
  filtered_changes = \
236
244
  if audited_options[:only].present?
237
245
  all_changes.slice(*self.class.audited_columns)
@@ -324,6 +332,13 @@ module Audited
324
332
  end
325
333
  end
326
334
 
335
+ def audit_touch
336
+ unless (changes = audited_changes(for_touch: true)).empty?
337
+ write_audit(action: "update", audited_changes: changes,
338
+ comment: audit_comment)
339
+ end
340
+ end
341
+
327
342
  def audit_destroy
328
343
  unless new_record?
329
344
  write_audit(action: "destroy", audited_changes: audited_attributes,
@@ -474,7 +489,7 @@ module Audited
474
489
 
475
490
  def normalize_audited_options
476
491
  audited_options[:on] = Array.wrap(audited_options[:on])
477
- audited_options[:on] = [:create, :update, :destroy] if audited_options[:on].empty?
492
+ audited_options[:on] = [:create, :update, :touch, :destroy] if audited_options[:on].empty?
478
493
  audited_options[:only] = Array.wrap(audited_options[:only]).map(&:to_s)
479
494
  audited_options[:except] = Array.wrap(audited_options[:except]).map(&:to_s)
480
495
  max_audits = audited_options[:max_audits] || Audited.max_audits
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Audited
4
- VERSION = "5.2.0"
4
+ VERSION = "5.3.0"
5
5
  end
@@ -1,6 +1,9 @@
1
1
  require "spec_helper"
2
2
 
3
- SingleCov.covered! uncovered: 9 # not testing proxy_respond_to? hack / 2 methods / deprecation of `version`
3
+ # not testing proxy_respond_to? hack / 2 methods / deprecation of `version`
4
+ # also, an additional 3 around `after_touch` for Versions before 6.
5
+ uncovered = ActiveRecord::VERSION::MAJOR < 6 ? 12 : 9
6
+ SingleCov.covered! uncovered: uncovered
4
7
 
5
8
  class ConditionalPrivateCompany < ::ActiveRecord::Base
6
9
  self.table_name = "companies"
@@ -414,6 +417,42 @@ describe Audited::Auditor do
414
417
  end
415
418
  end
416
419
 
420
+ if ::ActiveRecord::VERSION::MAJOR >= 6
421
+ describe "on touch" do
422
+ before do
423
+ @user = create_user(name: "Brandon", status: :active, audit_comment: "Touch")
424
+ end
425
+
426
+ it "should save an audit" do
427
+ expect { @user.touch(:suspended_at) }.to change(Audited::Audit, :count).by(1)
428
+ end
429
+
430
+ it "should set the action to 'update'" do
431
+ @user.touch(:suspended_at)
432
+ expect(@user.audits.last.action).to eq("update")
433
+ expect(Audited::Audit.updates.order(:id).last).to eq(@user.audits.last)
434
+ expect(@user.audits.updates.last).to eq(@user.audits.last)
435
+ end
436
+
437
+ it "should store the changed attributes" do
438
+ @user.touch(:suspended_at)
439
+ expect(@user.audits.last.audited_changes["suspended_at"][0]).to be_nil
440
+ expect(Time.parse(@user.audits.last.audited_changes["suspended_at"][1].to_s)).to be_within(1.second).of(Time.current)
441
+ end
442
+
443
+ it "should store audit comment" do
444
+ expect(@user.audits.last.comment).to eq("Touch")
445
+ end
446
+
447
+ it "should not save an audit if only specified on create/destroy" do
448
+ on_create_destroy = Models::ActiveRecord::OnCreateDestroyUser.create(name: "Bart")
449
+ expect {
450
+ on_create_destroy.touch(:suspended_at)
451
+ }.to_not change(Audited::Audit, :count)
452
+ end
453
+ end
454
+ end
455
+
417
456
  describe "on destroy" do
418
457
  before do
419
458
  @user = create_user(status: :active)
@@ -146,6 +146,11 @@ module Models
146
146
  audited on: [:create, :destroy]
147
147
  end
148
148
 
149
+ class OnCreateDestroyUser < ::ActiveRecord::Base
150
+ self.table_name = "users"
151
+ audited on: [:create, :destroy]
152
+ end
153
+
149
154
  class OnCreateDestroyExceptName < ::ActiveRecord::Base
150
155
  self.table_name = "companies"
151
156
  audited except: :name, on: [:create, :destroy]
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: audited
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.2.0
4
+ version: 5.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brandon Keepers
@@ -13,7 +13,7 @@ authors:
13
13
  autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
- date: 2023-01-23 00:00:00.000000000 Z
16
+ date: 2023-02-14 00:00:00.000000000 Z
17
17
  dependencies:
18
18
  - !ruby/object:Gem::Dependency
19
19
  name: activerecord