archival_record 2.0.2 → 3.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (38) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +3 -0
  3. data/.gitlab-ci.yml +20 -0
  4. data/.rubocop.yml +7 -5
  5. data/.rubocop_todo.yml +1 -8
  6. data/Appraisals +8 -11
  7. data/CHANGELOG.md +11 -0
  8. data/Gemfile.lock +77 -43
  9. data/LICENSE +5 -2
  10. data/README.md +34 -10
  11. data/archival_record.gemspec +36 -31
  12. data/gemfiles/{rails_5.1.gemfile → rails_6.1.gemfile} +1 -2
  13. data/gemfiles/{rails_5.2.gemfile → rails_7.0.gemfile} +1 -2
  14. data/gemfiles/{rails_5.0.gemfile → rails_7.1.gemfile} +1 -2
  15. data/init.rb +2 -2
  16. data/lib/archival_record/version.rb +1 -1
  17. data/lib/archival_record.rb +5 -5
  18. data/lib/archival_record_core/archival_record.rb +29 -16
  19. data/lib/archival_record_core/archival_record_active_record_methods.rb +3 -2
  20. data/lib/archival_record_core/association_operation/base.rb +4 -2
  21. data/test/application_record_test.rb +1 -1
  22. data/test/archive_dependents_option_test.rb +54 -0
  23. data/test/basic_test.rb +5 -5
  24. data/test/deep_nesting_test.rb +1 -1
  25. data/test/fixtures/explicit_act_on_dependents_archival.rb +9 -0
  26. data/test/fixtures/ignorable_dependent.rb +10 -0
  27. data/test/fixtures/ignore_dependents_archival.rb +9 -0
  28. data/test/fixtures/nonignorable_dependent.rb +10 -0
  29. data/test/polymorphic_test.rb +2 -2
  30. data/test/relations_test.rb +1 -1
  31. data/test/schema.rb +22 -0
  32. data/test/scope_test.rb +6 -6
  33. data/test/test_helper.rb +12 -5
  34. data/test/transaction_test.rb +2 -1
  35. metadata +54 -53
  36. data/.travis.yml +0 -23
  37. /data/test/fixtures/{callback_archival_4.rb → callback_archival4.rb} +0 -0
  38. /data/test/fixtures/{callback_archival_5.rb → callback_archival5.rb} +0 -0
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 749d93406c2538c8252af9f61e801c7ff88d5d28e2f17b7c77f469958b02f1af
4
- data.tar.gz: d98a6d346829cd376b87d39d42ea11893ca4508f9ecef47bd76042ca16e9960b
3
+ metadata.gz: d4b5a4d0030a23027b25b835935225c690a2d5badb2c80e1d37a145fd583e55c
4
+ data.tar.gz: 4a2e5a720bdab5cf97297cc66d9289f1beeced5d6c632d5c969816467a9928a4
5
5
  SHA512:
6
- metadata.gz: 9efc50a111d529028ef245000cb16fd0839153633c573da55e1b4a000051d9e222d64308f64c38a50e87deca1ac5f1ff930ad1cf2fe46aaa3edc3408aaabdbaa
7
- data.tar.gz: 49a8420bbe12026628fff779c0a8592b2b9285e86ac28b18421afc52159321b77f1e01a51f0aef05610fb805d1bb4229707aa0d4d1085f57383ce93831fe9b19
6
+ metadata.gz: a989cbb3679373d79edec6e55f8393ba1c32ea8ee4cdea237b848a867208d436127cfb7465d50344c2fa45a05bb32917d2acd8282d010523c721fd3b7731285c
7
+ data.tar.gz: 4cefa4eac2f34e69c40029979760173db1c1d24852b3db8368e077fb60a78a592597d876f4ebc4875c4312f81bea55cab6b39cadce0fc05ecdee586951e678d4
data/.gitignore CHANGED
@@ -3,8 +3,11 @@
3
3
  .bundle
4
4
  bin
5
5
  vendor/bundle
6
+ .nix-bundler
6
7
  *.gem
7
8
  gemfiles/*.lock
8
9
  pkg/*
9
10
  .DS_Store
10
11
  *.sqlite3
12
+ *.sqlite3-shm
13
+ *.sqlite3-wal
data/.gitlab-ci.yml ADDED
@@ -0,0 +1,20 @@
1
+ image: "ruby:3.2"
2
+
3
+ before_script:
4
+ - apt-get update -qq && apt-get install -y -qq sqlite3 libsqlite3-dev nodejs
5
+ - ruby -v
6
+ - which ruby
7
+ - gem install bundler --no-document
8
+ - bundle install --jobs $(nproc) "${FLAGS[@]}"
9
+ - bundle install --gemfile=gemfiles/rails_6.0.gemfile
10
+ - bundle install --gemfile=gemfiles/rails_6.1.gemfile
11
+ - bundle install --gemfile=gemfiles/rails_7.0.gemfile
12
+ - bundle install --gemfile=gemfiles/rails_7.1.gemfile
13
+
14
+ rake:
15
+ script:
16
+ - bundle exec rake
17
+
18
+ appraisal:
19
+ script:
20
+ - bundle exec appraisal rake
data/.rubocop.yml CHANGED
@@ -1,10 +1,13 @@
1
1
  inherit_from: .rubocop_todo.yml
2
+ require:
3
+ - rubocop-rails
4
+ - rubocop-rake
2
5
 
3
6
  AllCops:
4
7
  Exclude:
5
8
  - vendor/**/*
6
9
  - gemfiles/**/*
7
- TargetRubyVersion: 2.4
10
+ TargetRubyVersion: 3.0
8
11
  NewCops: enable
9
12
 
10
13
 
@@ -17,9 +20,6 @@ Layout/EmptyLinesAroundClassBody:
17
20
  Layout/EmptyLinesAroundModuleBody:
18
21
  EnforcedStyle: empty_lines_except_namespace
19
22
 
20
- Layout/LineLength:
21
- Max: 140
22
-
23
23
  Layout/SpaceInsideHashLiteralBraces:
24
24
  EnforcedStyle: space
25
25
 
@@ -52,6 +52,7 @@ Style/Alias:
52
52
  Style/AsciiComments:
53
53
  Enabled: false
54
54
 
55
+ # TODO: class documentation
55
56
  Style/Documentation:
56
57
  Enabled: false
57
58
 
@@ -66,9 +67,10 @@ Style/FrozenStringLiteralComment:
66
67
 
67
68
  Style/HashSyntax:
68
69
  EnforcedStyle: ruby19
70
+ EnforcedShorthandSyntax: always
69
71
 
70
72
  Style/RaiseArgs:
71
- EnforcedStyle: compact
73
+ EnforcedStyle: exploded
72
74
 
73
75
  Style/StringLiterals:
74
76
  EnforcedStyle: double_quotes
data/.rubocop_todo.yml CHANGED
@@ -1,14 +1,7 @@
1
1
  # This configuration was generated by
2
2
  # `rubocop --auto-gen-config`
3
- # on 2020-08-03 13:04:37 -0400 using RuboCop version 0.82.0.
3
+ # on 2024-06-11 01:38:42 UTC using RuboCop version 1.64.1.
4
4
  # The point is for the user to remove these configuration records
5
5
  # one by one as the offenses are removed from the code base.
6
6
  # Note that changes in the inspected code, or installation of new
7
7
  # versions of RuboCop, may require this file to be generated again.
8
-
9
- # Offense count: 7
10
- # Cop supports --auto-correct.
11
- Lint/SendWithMixinArgument:
12
- Exclude:
13
- - 'init.rb'
14
- - 'lib/archival_record.rb'
data/Appraisals CHANGED
@@ -1,18 +1,15 @@
1
- appraise "rails-5.0" do
2
- gem "rails", "~> 5.0.0"
3
- gem "sqlite3", "~> 1.3.13"
1
+ appraise "rails-6.0" do
2
+ gem "rails", "~> 6.0.0"
4
3
  end
5
4
 
6
- appraise "rails-5.1" do
7
- gem "rails", "~> 5.1.0"
8
- gem "sqlite3", "~> 1.4.1"
5
+ appraise "rails-6.1" do
6
+ gem "rails", "~> 6.1.0"
9
7
  end
10
8
 
11
- appraise "rails-5.2" do
12
- gem "rails", "~> 5.2.0"
13
- gem "sqlite3", "~> 1.4.1"
9
+ appraise "rails-7.0" do
10
+ gem "rails", "~> 7.0.0"
14
11
  end
15
12
 
16
- appraise "rails-6.0" do
17
- gem "rails", "~> 6.0.0"
13
+ appraise "rails-7.1" do
14
+ gem "rails", "~> 7.1.0"
18
15
  end
data/CHANGELOG.md CHANGED
@@ -1,5 +1,16 @@
1
1
  # CHANGELOG
2
2
 
3
+ ## 3.0.0 - June 10, 2024
4
+ * **BREAKING CHANGE** Drop support for rails 5 - see `rails__4.x-and-5.x` branch for relevant code
5
+ * **BREAKING CHANGE** Drop support for Ruby 2.x
6
+ * **ADDED** new option for `archival_record` called `archive_dependents` which can control whether `dependent: :destroy` records are archived with their parent
7
+ * lots of cleanup of code, particularly the way `ApplicationRecord` gets patched
8
+ * remove travis-ci, use gitlab pipelines
9
+
10
+ ## 2.0.2 - August 4, 2020
11
+ * fixing travis
12
+ * updating git hosting link
13
+
3
14
  ## 2.0.1 - August 3, 2020
4
15
  * Add security policy
5
16
  * Update depenedent gems: archival_record (:D oops) and rubocop, and dependencies
data/Gemfile.lock CHANGED
@@ -1,60 +1,92 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- archival_record (2.0.0)
5
- activerecord (>= 5.0)
4
+ archival_record (3.0.0)
5
+ activerecord (>= 6.0)
6
6
 
7
7
  GEM
8
8
  remote: https://rubygems.org/
9
9
  specs:
10
- activemodel (6.0.3.2)
11
- activesupport (= 6.0.3.2)
12
- activerecord (6.0.3.2)
13
- activemodel (= 6.0.3.2)
14
- activesupport (= 6.0.3.2)
15
- activesupport (6.0.3.2)
10
+ activemodel (7.1.3.4)
11
+ activesupport (= 7.1.3.4)
12
+ activerecord (7.1.3.4)
13
+ activemodel (= 7.1.3.4)
14
+ activesupport (= 7.1.3.4)
15
+ timeout (>= 0.4.0)
16
+ activesupport (7.1.3.4)
17
+ base64
18
+ bigdecimal
16
19
  concurrent-ruby (~> 1.0, >= 1.0.2)
17
- i18n (>= 0.7, < 2)
18
- minitest (~> 5.1)
19
- tzinfo (~> 1.1)
20
- zeitwerk (~> 2.2, >= 2.2.2)
21
- appraisal (2.3.0)
20
+ connection_pool (>= 2.2.5)
21
+ drb
22
+ i18n (>= 1.6, < 2)
23
+ minitest (>= 5.1)
24
+ mutex_m
25
+ tzinfo (~> 2.0)
26
+ appraisal (2.5.0)
22
27
  bundler
23
28
  rake
24
29
  thor (>= 0.14.0)
25
- ast (2.4.1)
26
- concurrent-ruby (1.1.6)
27
- database_cleaner (1.8.5)
28
- i18n (1.8.5)
30
+ ast (2.4.2)
31
+ base64 (0.2.0)
32
+ bigdecimal (3.1.8)
33
+ concurrent-ruby (1.3.3)
34
+ connection_pool (2.4.1)
35
+ database_cleaner (2.0.2)
36
+ database_cleaner-active_record (>= 2, < 3)
37
+ database_cleaner-active_record (2.1.0)
38
+ activerecord (>= 5.a)
39
+ database_cleaner-core (~> 2.0.0)
40
+ database_cleaner-core (2.0.1)
41
+ drb (2.2.1)
42
+ i18n (1.14.5)
29
43
  concurrent-ruby (~> 1.0)
30
- minitest (5.14.1)
31
- parallel (1.19.2)
32
- parser (2.7.1.4)
44
+ json (2.7.2)
45
+ language_server-protocol (3.17.0.3)
46
+ mini_portile2 (2.8.7)
47
+ minitest (5.23.1)
48
+ mutex_m (0.2.0)
49
+ parallel (1.25.1)
50
+ parser (3.3.2.0)
33
51
  ast (~> 2.4.1)
34
- rainbow (3.0.0)
35
- rake (13.0.1)
36
- regexp_parser (1.7.1)
37
- rexml (3.2.4)
38
- rr (1.2.1)
39
- rubocop (0.88.0)
52
+ racc
53
+ racc (1.8.0)
54
+ rack (3.0.11)
55
+ rainbow (3.1.1)
56
+ rake (13.2.1)
57
+ regexp_parser (2.9.2)
58
+ rexml (3.2.9)
59
+ strscan
60
+ rr (3.1.0)
61
+ rubocop (1.64.1)
62
+ json (~> 2.3)
63
+ language_server-protocol (>= 3.17.0)
40
64
  parallel (~> 1.10)
41
- parser (>= 2.7.1.1)
65
+ parser (>= 3.3.0.2)
42
66
  rainbow (>= 2.2.2, < 4.0)
43
- regexp_parser (>= 1.7)
44
- rexml
45
- rubocop-ast (>= 0.1.0, < 1.0)
67
+ regexp_parser (>= 1.8, < 3.0)
68
+ rexml (>= 3.2.5, < 4.0)
69
+ rubocop-ast (>= 1.31.1, < 2.0)
46
70
  ruby-progressbar (~> 1.7)
47
- unicode-display_width (>= 1.4.0, < 2.0)
48
- rubocop-ast (0.3.0)
49
- parser (>= 2.7.1.4)
50
- ruby-progressbar (1.10.1)
51
- sqlite3 (1.4.2)
52
- thor (1.0.1)
53
- thread_safe (0.3.6)
54
- tzinfo (1.2.7)
55
- thread_safe (~> 0.1)
56
- unicode-display_width (1.7.0)
57
- zeitwerk (2.4.0)
71
+ unicode-display_width (>= 2.4.0, < 3.0)
72
+ rubocop-ast (1.31.3)
73
+ parser (>= 3.3.1.0)
74
+ rubocop-rails (2.25.0)
75
+ activesupport (>= 4.2.0)
76
+ rack (>= 1.1)
77
+ rubocop (>= 1.33.0, < 2.0)
78
+ rubocop-ast (>= 1.31.1, < 2.0)
79
+ rubocop-rake (0.6.0)
80
+ rubocop (~> 1.0)
81
+ ruby-progressbar (1.13.0)
82
+ sqlite3 (1.7.3)
83
+ mini_portile2 (~> 2.8.0)
84
+ strscan (3.1.0)
85
+ thor (1.3.1)
86
+ timeout (0.4.1)
87
+ tzinfo (2.0.6)
88
+ concurrent-ruby (~> 1.0)
89
+ unicode-display_width (2.5.0)
58
90
 
59
91
  PLATFORMS
60
92
  ruby
@@ -66,7 +98,9 @@ DEPENDENCIES
66
98
  rake
67
99
  rr
68
100
  rubocop
69
- sqlite3
101
+ rubocop-rails
102
+ rubocop-rake
103
+ sqlite3 (< 2)
70
104
 
71
105
  BUNDLED WITH
72
- 2.1.4
106
+ 2.5.11
data/LICENSE CHANGED
@@ -1,8 +1,11 @@
1
- Copyright for portions of project ArchivalRecord are held by Expected Behavior, 2009-2020 as part of project ActsAsArchival. All other copyright for project ArchivalRecord are held by Joel Meador, 2020.
1
+ Copyright for portions of project ArchivalRecord are held by Expected Behavior,
2
+ 2009-2020 as part of project ActsAsArchival.
3
+
4
+ All other copyright for project ArchivalRecord are held by Joel Meador, 2020.
2
5
 
3
6
  -----
4
7
 
5
- LICENSE for [ArchivalRecord](https://github.com/janxious/archival_record/)
8
+ LICENSE for [ArchivalRecord](https://gitlab.com/joelmeador/archival_record/)
6
9
 
7
10
  Copyright (c) 2020 Joel Meador
8
11
 
data/README.md CHANGED
@@ -1,8 +1,5 @@
1
1
  # ArchivalRecord
2
2
 
3
- [![Build Status](https://travis-ci.org/janxious/archival_record.svg?branch=main)](https://travis-ci.org/janxious/archival_record)
4
- [![Gem Version](https://badge.fury.io/rb/archival_record.svg)](https://badge.fury.io/rb/archival_record)
5
-
6
3
  Atomically archive object trees in your ActiveRecord models.
7
4
 
8
5
  `acts_as_paranoid` and similar plugins/gems work on a record-by-record basis and made it difficult to restore records atomically (or archive them, for that matter).
@@ -11,6 +8,8 @@ Because the `#archive!` and `#unarchive!` methods are in transactions, and every
11
8
 
12
9
  Additionally, other plugins generally change how `destroy`/`delete` work. ArchivalRecord does not, and thus one can destroy records like normal.
13
10
 
11
+ _This is a fork of [ActsAsArchival](https://github.com/expectedbehavior/acts_as_archival/)._
12
+
14
13
  ## Maintenance
15
14
 
16
15
  You might read the commit logs and think "This must be abandonware! This hasn't been updated in 2y!" But! This is a mature project that solves a specific problem in ActiveRecord. It tends to only be updated when a new major version of ActiveRecord comes out and hence the infrequent updates.
@@ -32,12 +31,12 @@ _If you're stuck on Rails 4.0x/3x/2x, check out the older tags/branches, which a
32
31
  ## Example
33
32
 
34
33
  ``` ruby
35
- class Hole < ActiveRecord::Base
34
+ class Hole < ApplicationRecord
36
35
  archival_record
37
36
  has_many :rats, dependent: :destroy
38
37
  end
39
38
 
40
- class Rat < ActiveRecord::Base
39
+ class Rat < ApplicationRecord
41
40
  archival_record
42
41
  end
43
42
  ```
@@ -112,12 +111,13 @@ Hole.archival? # => true
112
111
 
113
112
  ### Options
114
113
 
114
+ #### `readonly_when_archived`
115
115
  When defining an ArchivalRecord model, it is is possible to make it unmodifiable
116
116
  when it is archived by passing `readonly_when_archived: true` to the
117
- `archival_record` call in your model.
117
+ `archival_record` call in your model. The default value of this option is `false`.
118
118
 
119
119
  ``` ruby
120
- class CantTouchThis < ActiveRecord::Base
120
+ class CantTouchThis < ApplicationRecord
121
121
  archival_record readonly_when_archived: true
122
122
  end
123
123
 
@@ -128,12 +128,32 @@ record.save # => false
128
128
  record.errors.full_messages.first # => "Cannot modify an archived record."
129
129
  ```
130
130
 
131
+ #### `archive_dependents`
132
+ When defining an ArchivalRecord model, it is possible to deactivate archiving/unarchiving for `dependent: :destroy` relationships that are tied to ArchivalRecord models by passing `archive_dependents: false` to the `archival_record` call in your model. The default value of this option is `true`.
133
+
134
+ ``` ruby
135
+ class WillArchive < ApplicationRecord
136
+ archival_record archive_dependents: false
137
+ has_many :wont_archives, dependent: :destroy
138
+ end
139
+ class WontArchive < ApplicationRecord
140
+ archival_record
141
+ end
142
+
143
+ record = WillArchive.create
144
+ wont_archive = record.wont_archives.create
145
+ record.archive!
146
+
147
+ record.archived? # => true
148
+ wont_archive.archived? # => false
149
+ ```
150
+
131
151
  ### Callbacks
132
152
 
133
153
  ArchivalRecord models have four additional callbacks to do any necessary cleanup or other processing before and after archiving and unarchiving, and can additionally halt the archive callback chain.
134
154
 
135
155
  ``` ruby
136
- class Hole < ActiveRecord::Base
156
+ class Hole < ApplicationRecord
137
157
  archival_record
138
158
 
139
159
  # runs before #archive!
@@ -160,8 +180,12 @@ end
160
180
  ## Caveats
161
181
 
162
182
  1. This will only work on associations that are dependent destroy. It
163
- should be trival to change that or make it optional.
164
- 1. If you would like to work on this, you will need to setup sqlite on your development machine. Alternately, you can disable specific dev dependencies in the gemspec and test_helper and ask for help.
183
+ should be trivial to change that or make it optional.
184
+ 1. If you would like to work on this, you will need to setup sqlite on your development machine. Alternately, you can deactivate specific dev dependencies in the gemspec and test_helper and ask for help.
185
+
186
+ ## Compatibility with ActsAsArchival
187
+
188
+ For now, the `acts_as_archival` class method can be used, though it will print a deprecation warning. This is to allow users to transition without trouble to this library if they choose to.
165
189
 
166
190
  ## Testing
167
191
 
@@ -3,40 +3,44 @@ $LOAD_PATH.push File.expand_path("lib", __dir__)
3
3
  require "archival_record/version"
4
4
 
5
5
  Gem::Specification.new do |gem|
6
- gem.name = "archival_record"
7
- gem.summary = "Atomic archiving/unarchiving for ActiveRecord"
8
- gem.version = ArchivalRecord::VERSION
9
- gem.authors = ["Joel Meador",
10
- "Michael Kuehl",
11
- "Matthew Gordon",
12
- "Vojtech Salbaba",
13
- "David Jones",
14
- "Dave Woodward",
15
- "Miles Sterrett",
16
- "James Hill",
17
- "Maarten Claes",
18
- "Anthony Panozzo",
19
- "Aaron Milam",
20
- "Anton Rieder",
21
- "Josh Menden",
22
- "Sergey Gnuskov",
23
- "Elijah Miller"]
24
- gem.email = ["joel.meador+archival_record@gmail.com"]
25
- gem.homepage = "https://gitlab.com/joelmeador/archival_record/"
26
-
27
- gem.files = `git ls-files`.split("\n")
28
- gem.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
6
+ gem.name = "archival_record"
7
+ gem.summary = "Atomic archiving/unarchiving for ActiveRecord"
8
+ gem.version = ArchivalRecord::VERSION
9
+ gem.authors = ["Joel Meador",
10
+ "Michael Kuehl",
11
+ "Matthew Gordon",
12
+ "Vojtech Salbaba",
13
+ "David Jones",
14
+ "Dave Woodward",
15
+ "Miles Sterrett",
16
+ "James Hill",
17
+ "Maarten Claes",
18
+ "Anthony Panozzo",
19
+ "Aaron Milam",
20
+ "Anton Rieder",
21
+ "Josh Menden",
22
+ "Sergey Gnuskov",
23
+ "Elijah Miller"]
24
+ gem.email = ["joel.meador+archival_record@gmail.com"]
25
+ gem.homepage = "https://gitlab.com/joelmeador/archival_record/"
26
+ gem.licenses = ['MIT']
27
+
28
+ gem.files = `git ls-files`.split("\n")
29
29
  gem.require_paths = ["lib"]
30
- gem.required_ruby_version = ">= 2.4"
30
+ gem.required_ruby_version = ">= 3.0"
31
31
 
32
- gem.add_dependency "activerecord", ">= 5.0"
32
+ gem.add_dependency("activerecord", ">= 6.0")
33
33
 
34
- gem.add_development_dependency "appraisal"
35
- gem.add_development_dependency "database_cleaner"
36
- gem.add_development_dependency "rake"
37
- gem.add_development_dependency "rr"
38
- gem.add_development_dependency "rubocop"
39
- gem.add_development_dependency "sqlite3"
34
+ # rubocop:disable Gemspec/DevelopmentDependencies
35
+ gem.add_development_dependency("appraisal")
36
+ gem.add_development_dependency("database_cleaner")
37
+ gem.add_development_dependency("rake")
38
+ gem.add_development_dependency("rr")
39
+ gem.add_development_dependency("rubocop")
40
+ gem.add_development_dependency("rubocop-rails")
41
+ gem.add_development_dependency("rubocop-rake")
42
+ gem.add_development_dependency("sqlite3", "< 2")
43
+ # rubocop:enable Gemspec/DevelopmentDependencies
40
44
 
41
45
  gem.description =
42
46
  <<~DESCRIPTION
@@ -48,4 +52,5 @@ Gem::Specification.new do |gem|
48
52
 
49
53
  Additionally, other plugins generally change how destroy/delete work. ArchivalRecord does not, and thus one can destroy records like normal.
50
54
  DESCRIPTION
55
+ gem.metadata["rubygems_mfa_required"] = "true"
51
56
  end
@@ -2,7 +2,6 @@
2
2
 
3
3
  source "https://rubygems.org"
4
4
 
5
- gem "rails", "~> 5.1.0"
6
- gem "sqlite3", "~> 1.4.1"
5
+ gem "rails", "~> 6.1.0"
7
6
 
8
7
  gemspec path: "../"
@@ -2,7 +2,6 @@
2
2
 
3
3
  source "https://rubygems.org"
4
4
 
5
- gem "rails", "~> 5.2.0"
6
- gem "sqlite3", "~> 1.4.1"
5
+ gem "rails", "~> 7.0.0"
7
6
 
8
7
  gemspec path: "../"
@@ -2,7 +2,6 @@
2
2
 
3
3
  source "https://rubygems.org"
4
4
 
5
- gem "rails", "~> 5.0.0"
6
- gem "sqlite3", "~> 1.3.13"
5
+ gem "rails", "~> 7.1.0"
7
6
 
8
7
  gemspec path: "../"
data/init.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  # Include hook code here
2
- ActiveRecord::Base.send :include, ArchivalRecordCore::ArchivalRecordActiveRecordMethods
3
- ActiveRecord::Base.send :include, ArchivalRecordCore::ArchivalRecord
2
+ ActiveSupport.on_load(:active_record) { include ArchivalRecordCore::ArchivalRecordActiveRecordMethods }
3
+ ActiveSupport.on_load(:active_record) { include ArchivalRecordCore::ArchivalRecord }
@@ -1,5 +1,5 @@
1
1
  module ArchivalRecord
2
2
 
3
- VERSION = "2.0.2".freeze
3
+ VERSION = "3.0.0".freeze
4
4
 
5
5
  end
@@ -9,11 +9,11 @@ require "archival_record_core/archival_record_active_record_methods"
9
9
 
10
10
  # This assumes a fully Rails 5 compatible set of ActiveRecord models
11
11
  if defined?(ApplicationRecord)
12
- ApplicationRecord.send :include, ArchivalRecordCore::ArchivalRecord
13
- ApplicationRecord.send :include, ArchivalRecordCore::ArchivalRecordActiveRecordMethods
12
+ ApplicationRecord.include ArchivalRecordCore::ArchivalRecord
13
+ ApplicationRecord.include ArchivalRecordCore::ArchivalRecordActiveRecordMethods
14
14
  else
15
- ActiveRecord::Base.send :include, ArchivalRecordCore::ArchivalRecord
16
- ActiveRecord::Base.send :include, ArchivalRecordCore::ArchivalRecordActiveRecordMethods
15
+ ActiveSupport.on_load(:active_record) { include ArchivalRecordCore::ArchivalRecord }
16
+ ActiveSupport.on_load(:active_record) { include ArchivalRecordCore::ArchivalRecordActiveRecordMethods }
17
17
  end
18
18
 
19
- ActiveRecord::Relation.send :include, ArchivalRecordCore::ArchivalRecordActiveRecordMethods::ARRelationMethods
19
+ ActiveRecord::Relation.include ArchivalRecordCore::ArchivalRecordActiveRecordMethods::ARRelationMethods
@@ -3,17 +3,18 @@ module ArchivalRecordCore
3
3
 
4
4
  require "digest/md5"
5
5
 
6
- unless defined?(MissingArchivalColumnError) == "constant" && MissingArchivalColumnError.class == Class
6
+ unless defined?(MissingArchivalColumnError) == "constant" && MissingArchivalColumnError.instance_of?(Class)
7
7
  MissingArchivalColumnError = Class.new(ActiveRecord::ActiveRecordError)
8
8
  end
9
- unless defined?(CouldNotArchiveError) == "constant" && CouldNotArchiveError.class == Class
9
+ unless defined?(CouldNotArchiveError) == "constant" && CouldNotArchiveError.instance_of?(Class)
10
10
  CouldNotArchiveError = Class.new(ActiveRecord::ActiveRecordError)
11
11
  end
12
- unless defined?(CouldNotUnarchiveError) == "constant" && CouldNotUnarchiveError.class == Class
12
+ unless defined?(CouldNotUnarchiveError) == "constant" && CouldNotUnarchiveError.instance_of?(Class)
13
13
  CouldNotUnarchiveError = Class.new(ActiveRecord::ActiveRecordError)
14
14
  end
15
15
 
16
16
  def self.included(base)
17
+ super
17
18
  base.extend ActMethods
18
19
  end
19
20
 
@@ -24,6 +25,8 @@ module ArchivalRecordCore
24
25
 
25
26
  include InstanceMethods
26
27
 
28
+ setup_options(options)
29
+
27
30
  setup_validations(options)
28
31
 
29
32
  setup_scopes
@@ -33,10 +36,17 @@ module ArchivalRecordCore
33
36
 
34
37
  # Deprecated: Please use `archival_record` instead
35
38
  def acts_as_archival(options = {})
36
- ActiveSupport::Deprecation.warn("`acts_as_archival` is deprecated. Please use `archival_record` instead.")
39
+ ActiveSupport::Deprecation.new("3.0", "ArchivalRecord")
37
40
  archival_record(options)
38
41
  end
39
42
 
43
+ private def setup_options(options)
44
+ default_options = { readonly_when_archived: false, archive_dependents: true }
45
+ options.reverse_merge!(default_options)
46
+
47
+ define_method(:archive_dependents?) { options[:archive_dependents] }
48
+ end
49
+
40
50
  private def setup_validations(options)
41
51
  before_validation :raise_if_not_archival
42
52
  validate :readonly_when_archived if options[:readonly_when_archived]
@@ -73,6 +83,12 @@ module ArchivalRecordCore
73
83
  private def define_callback_dsl_method(callbackable_type, action)
74
84
  # rubocop:disable Security/Eval
75
85
  eval <<-END_CALLBACKS, binding, __FILE__, __LINE__ + 1
86
+ # unless defined?(before_archive)
87
+ # def before_archive(*args, &blk)
88
+ # set_callback(:archive, :before, *args, &blk)
89
+ # end
90
+ # end
91
+
76
92
  unless defined?(#{callbackable_type}_#{action})
77
93
  def #{callbackable_type}_#{action}(*args, &blk)
78
94
  set_callback(:#{action}, :#{callbackable_type}, *args, &blk)
@@ -99,7 +115,8 @@ module ArchivalRecordCore
99
115
  missing_columns << "archived_at" unless respond_to?(:archived_at)
100
116
  return if missing_columns.blank?
101
117
 
102
- raise MissingArchivalColumnError.new("Add '#{missing_columns.join "', '"}' column(s) to '#{self.class.name}' to make it archival")
118
+ raise(MissingArchivalColumnError,
119
+ "Add '#{missing_columns.join "', '"}' column(s) to '#{self.class.name}' to make it archival")
103
120
  end
104
121
 
105
122
  def archived?
@@ -138,24 +155,20 @@ module ArchivalRecordCore
138
155
  AssociationOperation::Unarchive.new(self, head_archive_number).execute
139
156
  end
140
157
 
141
- private def execute_archival_action(action)
158
+ private def execute_archival_action(action, &block)
159
+ execution_result = false
142
160
  self.class.transaction do
143
- # rubocop: disable Style/RescueStandardError
144
- begin
145
- success = run_callbacks(action) { yield }
146
- return !!success
147
- rescue => e
148
- handle_archival_action_exception(e)
149
- end
150
- # rubocop: enable Style/RescueStandardError
161
+ execution_result = !!run_callbacks(action, &block)
162
+ rescue StandardError => e
163
+ handle_archival_action_exception(e)
151
164
  end
152
- false
165
+ execution_result
153
166
  end
154
167
 
155
168
  private def handle_archival_action_exception(exception)
156
169
  ActiveRecord::Base.logger.try(:debug, exception.message)
157
170
  ActiveRecord::Base.logger.try(:debug, exception.backtrace)
158
- raise ActiveRecord::Rollback
171
+ raise(ActiveRecord::Rollback)
159
172
  end
160
173
 
161
174
  end
@@ -2,6 +2,7 @@ module ArchivalRecordCore
2
2
  module ArchivalRecordActiveRecordMethods
3
3
 
4
4
  def self.included(base)
5
+ super
5
6
  base.extend ARClassMethods
6
7
  base.send :include, ARInstanceMethods
7
8
  end
@@ -26,7 +27,7 @@ module ArchivalRecordCore
26
27
 
27
28
  def archive_all!
28
29
  error_message = "The #{klass} must implement 'act_on_archivals' in order to call `archive_all!`"
29
- raise NotImplementedError.new(error_message) unless archival?
30
+ raise(NotImplementedError, error_message) unless archival?
30
31
 
31
32
  head_archive_number = Digest::MD5.hexdigest("#{klass}#{Time.now.utc.to_i}")
32
33
  each { |record| record.archive!(head_archive_number) }.tap { reset }
@@ -34,7 +35,7 @@ module ArchivalRecordCore
34
35
 
35
36
  def unarchive_all!
36
37
  error_message = "The #{klass} must implement 'act_on_archivals' in order to call `unarchive_all!`"
37
- raise NotImplementedError.new(error_message) unless archival?
38
+ raise(NotImplementedError, error_message) unless archival?
38
39
 
39
40
  each(&:unarchive!).tap { reset }
40
41
  end
@@ -11,8 +11,10 @@ module ArchivalRecordCore
11
11
  end
12
12
 
13
13
  def execute
14
+ return unless model.archive_dependents?
15
+
14
16
  each_archivable_association do |association|
15
- act_on_association(association) if association_conditions_met? association
17
+ act_on_association(association) if association_conditions_met?(association)
16
18
  end
17
19
  end
18
20
 
@@ -45,7 +47,7 @@ module ArchivalRecordCore
45
47
  end
46
48
 
47
49
  def act_on_archivals(_scope)
48
- raise NotImplementedError.new("The #{self.class} hasn't implemented 'act_on_archivals(scope)'")
50
+ raise(NotImplementedError, "The #{self.class} hasn't implemented 'act_on_archivals(scope)'")
49
51
  end
50
52
 
51
53
  end
@@ -11,7 +11,7 @@ if defined?(ApplicationRecord)
11
11
  end
12
12
 
13
13
  test "unarchive unarchives archival records" do
14
- archival = ApplicationRecordRow.create!(archived_at: Time.now, archive_number: 1)
14
+ archival = ApplicationRecordRow.create!(archived_at: Time.now.utc, archive_number: 1)
15
15
  archival.unarchive!
16
16
  assert_not archival.reload.archived?
17
17
  end
@@ -0,0 +1,54 @@
1
+ require_relative "test_helper"
2
+
3
+ class ArchiveDependentsOptionTest < ActiveSupport::TestCase
4
+
5
+ test "archive_dependents option will leave dependent archival records alone when parent is archived" do
6
+ archival = IgnoreDependentsArchival.create!
7
+ child = archival.ignorable_dependents.create!
8
+
9
+ assert archival.archival?
10
+ assert child.archival?
11
+
12
+ archival.archive!
13
+
14
+ assert archival.reload.archived?
15
+ assert_not child.reload.archived?
16
+ end
17
+
18
+ test "archive_dependents option will leave dependent archival records alone when parent is unarchived" do
19
+ archival = IgnoreDependentsArchival.create!
20
+ child = archival.ignorable_dependents.create!
21
+
22
+ assert archival.archival?
23
+ assert child.archival?
24
+
25
+ # This is simulating an unlikely scenario where the option has been added after records have been
26
+ # archived as a set but we want to unarchive after adding the option.
27
+ archival.archive!
28
+ child.update!(archived_at: archival.archived_at, archive_number: archival.archive_number)
29
+
30
+ archival.unarchive!
31
+
32
+ assert_not archival.reload.archived?
33
+ assert child.reload.archived?
34
+ end
35
+
36
+ test "archive_dependents option will work normally if set to true" do
37
+ archival = ExplicitActOnDependentsArchival.create!
38
+ child = archival.nonignorable_dependents.create!
39
+
40
+ assert archival.archival?
41
+ assert child.archival?
42
+
43
+ archival.archive!
44
+
45
+ assert archival.reload.archived?
46
+ assert child.reload.archived?
47
+
48
+ archival.unarchive!
49
+
50
+ assert_not archival.reload.archived?
51
+ assert_not child.reload.archived?
52
+ end
53
+
54
+ end
data/test/basic_test.rb CHANGED
@@ -9,7 +9,7 @@ class BasicTest < ActiveSupport::TestCase
9
9
  end
10
10
 
11
11
  test "unarchive unarchives archival records" do
12
- archival = Archival.create!(archived_at: Time.now, archive_number: 1)
12
+ archival = Archival.create!(archived_at: Time.now.utc, archive_number: 1)
13
13
  archival.unarchive!
14
14
  assert_equal false, archival.reload.archived?
15
15
  end
@@ -26,23 +26,23 @@ class BasicTest < ActiveSupport::TestCase
26
26
  end
27
27
 
28
28
  test "unarchive returns true on success" do
29
- normal = Archival.create!(archived_at: Time.now, archive_number: "1")
29
+ normal = Archival.create!(archived_at: Time.now.utc, archive_number: "1")
30
30
  assert_equal true, normal.unarchive!
31
31
  end
32
32
 
33
33
  test "unarchive returns false on failure" do
34
- readonly = Archival.create!(archived_at: Time.now, archive_number: "1")
34
+ readonly = Archival.create!(archived_at: Time.now.utc, archive_number: "1")
35
35
  readonly.readonly!
36
36
  assert_equal false, readonly.unarchive!
37
37
  end
38
38
 
39
39
  test "archive sets archived_at to the time of archiving" do
40
40
  archival = Archival.create!
41
- before = DateTime.now
41
+ before = DateTime.now.utc
42
42
  sleep(0.001)
43
43
  archival.archive!
44
44
  sleep(0.001)
45
- after = DateTime.now
45
+ after = DateTime.now.utc
46
46
  assert before < archival.archived_at.to_datetime
47
47
  assert after > archival.archived_at.to_datetime
48
48
  end
@@ -18,7 +18,7 @@ class DeepNestingTest < ActiveSupport::TestCase
18
18
 
19
19
  test "unarchiving deeply nested items doesn't blow up" do
20
20
  archival_attributes = {
21
- archived_at: Time.now,
21
+ archived_at: Time.now.utc,
22
22
  archive_number: "test"
23
23
  }
24
24
  archival = Archival.create!(archival_attributes)
@@ -0,0 +1,9 @@
1
+ # archive_number - string
2
+ # archived_at - datetime
3
+ class ExplicitActOnDependentsArchival < ActiveRecord::Base
4
+
5
+ archival_record archive_dependents: true
6
+
7
+ has_many :nonignorable_dependents, dependent: :destroy
8
+
9
+ end
@@ -0,0 +1,10 @@
1
+ # ignore_dependents_archival_id - integer
2
+ # archive_number - string
3
+ # archived_at - datetime
4
+ class IgnorableDependent < ActiveRecord::Base
5
+
6
+ archival_record
7
+
8
+ belongs_to :ignore_dependents_archival
9
+
10
+ end
@@ -0,0 +1,9 @@
1
+ # archive_number - string
2
+ # archived_at - datetime
3
+ class IgnoreDependentsArchival < ActiveRecord::Base
4
+
5
+ archival_record archive_dependents: false
6
+
7
+ has_many :ignorable_dependents, dependent: :destroy
8
+
9
+ end
@@ -0,0 +1,10 @@
1
+ # explicit_act_on_dependents_archival_id - integer
2
+ # archive_number - string
3
+ # archived_at - datetime
4
+ class NonignorableDependent < ActiveRecord::Base
5
+
6
+ archival_record
7
+
8
+ belongs_to :explicit_act_on_dependents_archival
9
+
10
+ end
@@ -23,7 +23,7 @@ class PolymorphicTest < ActiveSupport::TestCase
23
23
  test "unarchive item with polymorphic association" do
24
24
  archive_attributes = {
25
25
  archive_number: "test",
26
- archived_at: Time.now
26
+ archived_at: Time.now.utc
27
27
  }
28
28
  archival = Archival.create!(archive_attributes)
29
29
  poly = archival.polys.create!(archive_attributes)
@@ -36,7 +36,7 @@ class PolymorphicTest < ActiveSupport::TestCase
36
36
  test "does not unarchive polymorphic association of different item with same id" do
37
37
  archive_attributes = {
38
38
  archive_number: "test",
39
- archived_at: Time.now
39
+ archived_at: Time.now.utc
40
40
  }
41
41
 
42
42
  archival = Archival.create!(archive_attributes)
@@ -34,7 +34,7 @@ class RelationsTest < ActiveSupport::TestCase
34
34
  assert parents.first.archivals.last.archived?
35
35
  end
36
36
 
37
- test "unarchive_all! unarchives all records in an AR Assocation" do
37
+ test "unarchive_all! unarchives all records in an AR association" do
38
38
  3.times { Archival.create! }
39
39
 
40
40
  archivals = Archival.all
data/test/schema.rb CHANGED
@@ -93,4 +93,26 @@ ActiveRecord::Schema.define(version: 1) do
93
93
  t.column :archive_number, :string
94
94
  t.column :archived_at, :datetime
95
95
  end
96
+
97
+ create_table :ignore_dependents_archivals, force: true do |t|
98
+ t.column :archive_number, :string
99
+ t.column :archived_at, :datetime
100
+ end
101
+
102
+ create_table :ignorable_dependents, force: true do |t|
103
+ t.column :ignore_dependents_archival_id, :integer
104
+ t.column :archive_number, :string
105
+ t.column :archived_at, :datetime
106
+ end
107
+
108
+ create_table :explicit_act_on_dependents_archivals, force: true do |t|
109
+ t.column :archive_number, :string
110
+ t.column :archived_at, :datetime
111
+ end
112
+
113
+ create_table :nonignorable_dependents, force: true do |t|
114
+ t.column :explicit_act_on_dependents_archival_id, :integer
115
+ t.column :archive_number, :string
116
+ t.column :archived_at, :datetime
117
+ end
96
118
  end
data/test/scope_test.rb CHANGED
@@ -52,14 +52,14 @@ class ScopeTest < ActiveSupport::TestCase
52
52
  test "table_name is set to 'legacy'" do
53
53
  archived_sql =
54
54
  if ActiveRecord.version >= Gem::Version.new("5.2.0")
55
- "SELECT \"legacy\".* FROM \"legacy\" " \
56
- 'WHERE "legacy"."archived_at" IS NOT NULL AND "legacy"."archive_number" IS NOT NULL'
55
+ 'SELECT "legacy".* FROM "legacy" ' \
56
+ 'WHERE "legacy"."archived_at" IS NOT NULL AND "legacy"."archive_number" IS NOT NULL'
57
57
  else
58
- "SELECT \"legacy\".* FROM \"legacy\" " \
59
- 'WHERE ("legacy"."archived_at" IS NOT NULL) AND ("legacy"."archive_number" IS NOT NULL)'
58
+ 'SELECT "legacy".* FROM "legacy" ' \
59
+ 'WHERE ("legacy"."archived_at" IS NOT NULL) AND ("legacy"."archive_number" IS NOT NULL)'
60
60
  end
61
- unarchived_sql = "SELECT \"legacy\".* FROM \"legacy\" " \
62
- 'WHERE "legacy"."archived_at" IS NULL AND "legacy"."archive_number" IS NULL'
61
+ unarchived_sql = 'SELECT "legacy".* FROM "legacy" ' \
62
+ 'WHERE "legacy"."archived_at" IS NULL AND "legacy"."archive_number" IS NULL'
63
63
  assert_equal archived_sql, ArchivalTableName.archived.to_sql
64
64
  assert_equal unarchived_sql, ArchivalTableName.unarchived.to_sql
65
65
  end
data/test/test_helper.rb CHANGED
@@ -1,4 +1,4 @@
1
- $LOAD_PATH.unshift(File.dirname(__FILE__) + "/../lib")
1
+ $LOAD_PATH.unshift("#{File.dirname(__FILE__)}/../lib")
2
2
 
3
3
  require "bundler/setup"
4
4
  require "minitest/autorun"
@@ -20,7 +20,7 @@ end
20
20
 
21
21
  def setup_logging
22
22
  require "logger"
23
- logfile = File.dirname(__FILE__) + "/debug.log"
23
+ logfile = "#{File.dirname(__FILE__)}/debug.log"
24
24
  ActiveRecord::Base.logger = Logger.new(logfile)
25
25
  end
26
26
 
@@ -40,8 +40,11 @@ def sqlite_config
40
40
  }
41
41
  end
42
42
 
43
+ def schema_file
44
+ "#{File.dirname(__FILE__)}/schema.rb"
45
+ end
46
+
43
47
  def create_test_tables
44
- schema_file = File.dirname(__FILE__) + "/schema.rb"
45
48
  puts "** Loading schema for SQLite"
46
49
  ActiveRecord::Base.establish_connection(sqlite_config)
47
50
  load(schema_file) if File.exist?(schema_file)
@@ -61,16 +64,20 @@ BASE_FIXTURE_CLASSES = %I[
61
64
  poly
62
65
  readonly_when_archived
63
66
  deprecated_warning_archival
67
+ ignore_dependents_archival
68
+ ignorable_dependent
69
+ explicit_act_on_dependents_archival
70
+ nonignorable_dependent
64
71
  ].freeze
65
72
 
66
73
  RAILS_4_FIXTURE_CLASSES = %I[
67
- callback_archival_4
74
+ callback_archival4
68
75
  ].freeze
69
76
 
70
77
  RAILS_5_FIXTURE_CLASSES = %I[
71
78
  application_record
72
79
  application_record_row
73
- callback_archival_5
80
+ callback_archival5
74
81
  ].freeze
75
82
 
76
83
  def require_test_classes
@@ -11,7 +11,8 @@ class TransactionTest < ActiveSupport::TestCase
11
11
  end
12
12
  archival.archive!
13
13
 
14
- assert_not archival.archived?, "If this failed, you might be trying to test on a system that doesn't support nested transactions"
14
+ failure_reason = "If this failed, you might be trying to test on a system that doesn't support nested transactions"
15
+ assert_not archival.archived?, failure_reason
15
16
  assert_not exploder.reload.archived?
16
17
  end
17
18
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: archival_record
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.2
4
+ version: 3.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Joel Meador
@@ -19,10 +19,10 @@ authors:
19
19
  - Josh Menden
20
20
  - Sergey Gnuskov
21
21
  - Elijah Miller
22
- autorequire:
22
+ autorequire:
23
23
  bindir: bin
24
24
  cert_chain: []
25
- date: 2020-08-04 00:00:00.000000000 Z
25
+ date: 1980-01-01 00:00:00.000000000 Z
26
26
  dependencies:
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: activerecord
@@ -30,14 +30,14 @@ dependencies:
30
30
  requirements:
31
31
  - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: '5.0'
33
+ version: '6.0'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
- version: '5.0'
40
+ version: '6.0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: appraisal
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -109,7 +109,21 @@ dependencies:
109
109
  - !ruby/object:Gem::Version
110
110
  version: '0'
111
111
  - !ruby/object:Gem::Dependency
112
- name: sqlite3
112
+ name: rubocop-rails
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: rubocop-rake
113
127
  requirement: !ruby/object:Gem::Requirement
114
128
  requirements:
115
129
  - - ">="
@@ -122,6 +136,20 @@ dependencies:
122
136
  - - ">="
123
137
  - !ruby/object:Gem::Version
124
138
  version: '0'
139
+ - !ruby/object:Gem::Dependency
140
+ name: sqlite3
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - "<"
144
+ - !ruby/object:Gem::Version
145
+ version: '2'
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - "<"
151
+ - !ruby/object:Gem::Version
152
+ version: '2'
125
153
  description: |
126
154
  *Atomic archiving/unarchiving for ActiveRecord*
127
155
 
@@ -137,9 +165,9 @@ extensions: []
137
165
  extra_rdoc_files: []
138
166
  files:
139
167
  - ".gitignore"
168
+ - ".gitlab-ci.yml"
140
169
  - ".rubocop.yml"
141
170
  - ".rubocop_todo.yml"
142
- - ".travis.yml"
143
171
  - Appraisals
144
172
  - CHANGELOG.md
145
173
  - Gemfile
@@ -149,10 +177,10 @@ files:
149
177
  - Rakefile
150
178
  - SECURITY.md
151
179
  - archival_record.gemspec
152
- - gemfiles/rails_5.0.gemfile
153
- - gemfiles/rails_5.1.gemfile
154
- - gemfiles/rails_5.2.gemfile
155
180
  - gemfiles/rails_6.0.gemfile
181
+ - gemfiles/rails_6.1.gemfile
182
+ - gemfiles/rails_7.0.gemfile
183
+ - gemfiles/rails_7.1.gemfile
156
184
  - init.rb
157
185
  - lib/archival_record.rb
158
186
  - lib/archival_record/version.rb
@@ -164,6 +192,7 @@ files:
164
192
  - script/setup
165
193
  - test/ambiguous_table_test.rb
166
194
  - test/application_record_test.rb
195
+ - test/archive_dependents_option_test.rb
167
196
  - test/associations_test.rb
168
197
  - test/basic_test.rb
169
198
  - test/callbacks_test.rb
@@ -177,13 +206,17 @@ files:
177
206
  - test/fixtures/archival_grandkid.rb
178
207
  - test/fixtures/archival_kid.rb
179
208
  - test/fixtures/archival_table_name.rb
180
- - test/fixtures/callback_archival_4.rb
181
- - test/fixtures/callback_archival_5.rb
209
+ - test/fixtures/callback_archival4.rb
210
+ - test/fixtures/callback_archival5.rb
182
211
  - test/fixtures/deprecated_warning_archival.rb
212
+ - test/fixtures/explicit_act_on_dependents_archival.rb
183
213
  - test/fixtures/exploder.rb
214
+ - test/fixtures/ignorable_dependent.rb
215
+ - test/fixtures/ignore_dependents_archival.rb
184
216
  - test/fixtures/independent_archival.rb
185
217
  - test/fixtures/missing_archive_number.rb
186
218
  - test/fixtures/missing_archived_at.rb
219
+ - test/fixtures/nonignorable_dependent.rb
187
220
  - test/fixtures/plain.rb
188
221
  - test/fixtures/poly.rb
189
222
  - test/fixtures/readonly_when_archived.rb
@@ -197,9 +230,11 @@ files:
197
230
  - test/through_association_test.rb
198
231
  - test/transaction_test.rb
199
232
  homepage: https://gitlab.com/joelmeador/archival_record/
200
- licenses: []
201
- metadata: {}
202
- post_install_message:
233
+ licenses:
234
+ - MIT
235
+ metadata:
236
+ rubygems_mfa_required: 'true'
237
+ post_install_message:
203
238
  rdoc_options: []
204
239
  require_paths:
205
240
  - lib
@@ -207,49 +242,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
207
242
  requirements:
208
243
  - - ">="
209
244
  - !ruby/object:Gem::Version
210
- version: '2.4'
245
+ version: '3.0'
211
246
  required_rubygems_version: !ruby/object:Gem::Requirement
212
247
  requirements:
213
248
  - - ">="
214
249
  - !ruby/object:Gem::Version
215
250
  version: '0'
216
251
  requirements: []
217
- rubygems_version: 3.1.2
218
- signing_key:
252
+ rubygems_version: 3.4.22
253
+ signing_key:
219
254
  specification_version: 4
220
255
  summary: Atomic archiving/unarchiving for ActiveRecord
221
- test_files:
222
- - test/ambiguous_table_test.rb
223
- - test/application_record_test.rb
224
- - test/associations_test.rb
225
- - test/basic_test.rb
226
- - test/callbacks_test.rb
227
- - test/column_test.rb
228
- - test/deep_nesting_test.rb
229
- - test/deprecated_warning_archival_test.rb
230
- - test/fixtures/another_polys_holder.rb
231
- - test/fixtures/application_record.rb
232
- - test/fixtures/application_record_row.rb
233
- - test/fixtures/archival.rb
234
- - test/fixtures/archival_grandkid.rb
235
- - test/fixtures/archival_kid.rb
236
- - test/fixtures/archival_table_name.rb
237
- - test/fixtures/callback_archival_4.rb
238
- - test/fixtures/callback_archival_5.rb
239
- - test/fixtures/deprecated_warning_archival.rb
240
- - test/fixtures/exploder.rb
241
- - test/fixtures/independent_archival.rb
242
- - test/fixtures/missing_archive_number.rb
243
- - test/fixtures/missing_archived_at.rb
244
- - test/fixtures/plain.rb
245
- - test/fixtures/poly.rb
246
- - test/fixtures/readonly_when_archived.rb
247
- - test/polymorphic_test.rb
248
- - test/readonly_when_archived_test.rb
249
- - test/relations_test.rb
250
- - test/responds_test.rb
251
- - test/schema.rb
252
- - test/scope_test.rb
253
- - test/test_helper.rb
254
- - test/through_association_test.rb
255
- - test/transaction_test.rb
256
+ test_files: []
data/.travis.yml DELETED
@@ -1,23 +0,0 @@
1
- language: ruby
2
- cache: bundler
3
-
4
- rvm:
5
- - 2.4
6
- - 2.5
7
- - 2.6
8
- - 2.7
9
-
10
- gemfile:
11
- - gemfiles/rails_5.0.gemfile
12
- - gemfiles/rails_5.1.gemfile
13
- - gemfiles/rails_5.2.gemfile
14
- - gemfiles/rails_6.0.gemfile
15
-
16
- before_install:
17
- - gem update --system
18
-
19
- matrix:
20
- fast_finish: true
21
- exclude:
22
- - gemfile: gemfiles/rails_6.0.gemfile
23
- rvm: 2.4