paranoia 2.6.0 → 3.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ad52996a9a12b6605d8179ad1ae5ef39cb7655d19d037884518800a02f6ff160
4
- data.tar.gz: 3c9d2c4203e203b64bf0e24db1995ddfc431c8ed742ad96319f19eea2a62bc8a
3
+ metadata.gz: 8e7ad759d079b1e2bea13d47f092005677c98dee88423a12666fc77db15e8249
4
+ data.tar.gz: f95c4af13b076d6d235d3b6d0b7057595742a8dcd177e71b0ada70cb11674f91
5
5
  SHA512:
6
- metadata.gz: ed7a78d7135fce0a513e0f5fb4c6c685c99ad788efa57e15dd9ae011d1dfce0d98bc41fd49b7688f3d706e6101b78824ada19ce3617359a085186e76acc0a2db
7
- data.tar.gz: 2a24bfb1f5d1f9b8c5e588c86bf745ed80125167dfefc6ad5a10cc3b7a66da3ee50f85b7727cda74a5f92a9a1d1b3fac0defc4296b71b1dd7f8c9e9d8496831f
6
+ metadata.gz: 9b42a61dde0a3e2c417f2d7a0c71c23ad4b1c6980fe4a0a232313625017fe5c5e24065405a28e202bb3751d34e379753ae70a908d552f6704c7b1e78fb18862a
7
+ data.tar.gz: 45fc5b4fe5c4705f29e9bd208dd18d1fcec907c79649167467dc76ae883e002da9b2db93ac41148ab7a47872a39aa3c7545c754e7627dd8b5348e519654806ee
@@ -15,45 +15,24 @@ jobs:
15
15
  strategy:
16
16
  fail-fast: false
17
17
  matrix:
18
- ruby:
19
- - 3.1
20
- - '3.0'
21
- - 2.7
22
- - 2.6
23
- - 2.5
24
- # - jruby-9.2.19.0
25
- # - jruby-9.3.1.0
26
- rails:
27
- - '~> 5.1.0'
28
- - '~> 5.2.0'
29
- - '~> 6.0.0'
30
- - '~> 6.1.0'
31
- - '~> 7.0.0'
32
- - 'edge'
18
+ rails: ["~> 7.2.0", "~> 7.1.0", "~> 7.0.0", "~> 6.1.0"]
19
+ ruby: ["3.3","3.2", "3.1", "3.0", "2.7"]
33
20
  exclude:
34
- # Rails edge is now 7.x and requires ruby 2.7
35
- - rails: 'edge'
36
- ruby: 2.6
37
- - rails: 'edge'
38
- ruby: 2.5
39
- - rails: '~> 7.0.0'
40
- ruby: 2.6
41
- - rails: '~> 7.0.0'
42
- ruby: 2.5
43
- # Legacy Rails with newer rubies
44
- - rails: '~> 5.1.0'
45
- ruby: '3.0'
46
- - rails: '~> 5.2.0'
47
- ruby: '3.0'
48
- - rails: '~> 5.1.0'
49
- ruby: 3.1
50
- - rails: '~> 5.2.0'
51
- ruby: 3.1
21
+ - rails: "~> 7.2.0"
22
+ ruby: "3.0"
23
+ - rails: "~> 7.2.0"
24
+ ruby: "2.7"
25
+ - rails: "edge"
26
+ ruby: "3.0"
27
+ - rails: "edge"
28
+ ruby: "2.7"
29
+
30
+
52
31
 
53
32
  env:
54
33
  RAILS: ${{ matrix.rails }}
55
34
  steps:
56
- - uses: actions/checkout@v2
35
+ - uses: actions/checkout@v4
57
36
  - uses: ruby/setup-ruby@v1
58
37
  with:
59
38
  ruby-version: ${{ matrix.ruby }}
data/CHANGELOG.md CHANGED
@@ -1,6 +1,43 @@
1
1
  # paranoia Changelog
2
2
 
3
- ## 2.6.0
3
+ ## 3.0.1 - January 19, 2025
4
+
5
+ - [#566](https://github.com/rubysherpas/paranoia/pull/566) Handle #delete_all
6
+ - [#559](https://github.com/rubysherpas/paranoia/pull/559) Trigger an after_commit callback when restoring a record
7
+ - [#567](https://github.com/rubysherpas/paranoia/pull/567) Fix typo in newly added readme
8
+
9
+ ## 3.0.0 - August 13, 2024
10
+
11
+ _Tagged as 3.0 as Ruby + Rails version constraints have been modernised._
12
+
13
+ - [#564](https://github.com/rubysherpas/paranoia/pull/564) Support Rails edge
14
+ - [#563](https://github.com/rubysherpas/paranoia/pull/563) Support Rails 7.2
15
+
16
+ ## 2.6.4 - July 20, 2024
17
+
18
+ * [#554](https://github.com/rubysherpas/paranoia/pull/554) Support prebuilt counter cache association list (#554)
19
+ [Joé Dupuis](https://github.com/JoeDupuis)
20
+ * [#551](https://github.com/rubysherpas/paranoia/pull/551) Fix: restore has_one with scope (#551)
21
+ [Paweł Charyło](https://github.com/zygzagZ)
22
+ * [#555](https://github.com/rubysherpas/paranoia/pull/555) 📝 Add Yard documentation for Paranoia::Query (#555)
23
+ [Clément Prod'homme](https://github.com/cprodhomme)
24
+
25
+ ## 2.6.3 - Oct 12, 2023
26
+
27
+ * [#548](https://github.com/rubysherpas/paranoia/pull/548) Add support for [Rails 7.1](https://github.com/rails/rails/releases/tag/v7.1.0) (#548)
28
+ [Indyarocks](https://github.com/indyarocks)
29
+
30
+ ## 2.6.2 - Jun 6, 2023
31
+
32
+ * [#441](https://github.com/rubysherpas/paranoia/pull/441) Recursive restore with has_many/one through assocs (#441)
33
+ [Emil Ong](https://github.com/emilong)
34
+
35
+ ## 2.6.1 - Nov 16, 2022
36
+
37
+ * [#535](https://github.com/rubysherpas/paranoia/pull/535) Allow to skip updating paranoia_destroy_attributes for records while really_destroy!
38
+ [Anton Bogdanov](https://github.com/kortirso)
39
+
40
+ ## 2.6.0 - Mar 23, 2022
4
41
 
5
42
  * [#512](https://github.com/rubysherpas/paranoia/pull/512) Quote table names; Mysql 8 has keywords that might match table names which cause an exception.
6
43
  * [#476](https://github.com/rubysherpas/paranoia/pull/476) Fix syntax error in documentation.
data/Gemfile CHANGED
@@ -5,7 +5,7 @@ sqlite = ENV['SQLITE_VERSION']
5
5
  if sqlite
6
6
  gem 'sqlite3', sqlite, platforms: [:ruby]
7
7
  else
8
- gem 'sqlite3', platforms: [:ruby]
8
+ gem 'sqlite3', '~> 1.4', platforms: [:ruby]
9
9
  end
10
10
 
11
11
  platforms :jruby do
data/README.md CHANGED
@@ -1,7 +1,7 @@
1
1
  [![Gem Version](https://badge.fury.io/rb/paranoia.svg)](https://badge.fury.io/rb/paranoia)
2
2
  [![build](https://github.com/rubysherpas/paranoia/actions/workflows/build.yml/badge.svg)](https://github.com/rubysherpas/paranoia/actions/workflows/build.yml)
3
3
 
4
- **Notice:**
4
+ **Notice:**
5
5
 
6
6
  `paranoia` has some surprising behaviour (like overriding ActiveRecord's `delete` and `destroy`) and is not recommended for new projects. See [`discard`'s README](https://github.com/jhawthorn/discard#why-not-paranoia-or-acts_as_paranoid) for more details.
7
7
 
@@ -103,6 +103,14 @@ If you really want it gone *gone*, call `really_destroy!`:
103
103
  # => client
104
104
  ```
105
105
 
106
+ If you need skip updating timestamps for deleting records, call `really_destroy!(update_destroy_attributes: false)`.
107
+ When we call `really_destroy!(update_destroy_attributes: false)` on the parent `client`, then each child `email` will also have `really_destroy!(update_destroy_attributes: false)` called.
108
+
109
+ ``` ruby
110
+ >> client.really_destroy!(update_destroy_attributes: false)
111
+ # => client
112
+ ```
113
+
106
114
  If you want to use a column other than `deleted_at`, you can pass it as an option:
107
115
 
108
116
  ``` ruby
@@ -198,6 +206,19 @@ Client.restore(id, :recursive => true, :recovery_window => 2.minutes)
198
206
  client.restore(:recursive => true, :recovery_window => 2.minutes)
199
207
  ```
200
208
 
209
+ If you want to trigger an after_commit callback when restoring a record:
210
+
211
+ ``` ruby
212
+ class Client < ActiveRecord::Base
213
+ acts_as_paranoid after_restore_commit: true
214
+
215
+ after_commit :commit_called, on: :restore
216
+ # or
217
+ after_restore_commit :commit_called
218
+ ...
219
+ end
220
+ ```
221
+
201
222
  Note that by default paranoia will not prevent that a soft destroyed object can't be associated with another object of a different model.
202
223
  A Rails validator is provided should you require this functionality:
203
224
  ``` ruby
@@ -340,6 +361,21 @@ end
340
361
  # => NoMethodError: undefined method `with_deleted' for #<Class:0x0123456>
341
362
  ```
342
363
 
364
+ #### delete_all:
365
+
366
+ The gem supports `delete_all` method, however it is disabled by default, to enable it add this in your `environment` file
367
+
368
+ ``` ruby
369
+ Paranoia.delete_all_enabled = true
370
+ ```
371
+ alternatively, you can enable/disable it for specific models as follow:
372
+
373
+ ``` ruby
374
+ class User < ActiveRecord::Base
375
+ acts_as_paranoid(delete_all_enabled: true)
376
+ end
377
+ ```
378
+
343
379
  ## Acts As Paranoid Migration
344
380
 
345
381
  You can replace the older `acts_as_paranoid` methods as follows:
@@ -1,3 +1,3 @@
1
1
  module Paranoia
2
- VERSION = '2.6.0'.freeze
2
+ VERSION = '3.0.1'.freeze
3
3
  end
data/lib/paranoia.rb CHANGED
@@ -6,15 +6,11 @@ if [ActiveRecord::VERSION::MAJOR, ActiveRecord::VERSION::MINOR] == [5, 2] ||
6
6
  end
7
7
 
8
8
  module Paranoia
9
- @@default_sentinel_value = nil
10
9
 
11
- # Change default_sentinel_value in a rails initializer
12
- def self.default_sentinel_value=(val)
13
- @@default_sentinel_value = val
14
- end
15
-
16
- def self.default_sentinel_value
17
- @@default_sentinel_value
10
+ class << self
11
+ # Change default values in a rails initializer
12
+ attr_accessor :default_sentinel_value,
13
+ :delete_all_enabled
18
14
  end
19
15
 
20
16
  def self.included(klazz)
@@ -24,6 +20,7 @@ module Paranoia
24
20
  module Query
25
21
  def paranoid? ; true ; end
26
22
 
23
+ # If you want to find all records, even those which are deleted
27
24
  def with_deleted
28
25
  if ActiveRecord::VERSION::STRING >= "4.1"
29
26
  return unscope where: paranoia_column
@@ -31,6 +28,7 @@ module Paranoia
31
28
  all.tap { |x| x.default_scoped = false }
32
29
  end
33
30
 
31
+ # If you want to find only the deleted records
34
32
  def only_deleted
35
33
  if paranoia_sentinel_value.nil?
36
34
  return with_deleted.where.not(paranoia_column => paranoia_sentinel_value)
@@ -45,6 +43,7 @@ module Paranoia
45
43
  end
46
44
  alias_method :deleted, :only_deleted
47
45
 
46
+ # If you want to restore a record
48
47
  def restore(id_or_ids, opts = {})
49
48
  ids = Array(id_or_ids).flatten
50
49
  any_object_instead_of_id = ids.any? { |id| ActiveRecord::Base === id }
@@ -55,12 +54,22 @@ module Paranoia
55
54
  end
56
55
  ids.map { |id| only_deleted.find(id).restore!(opts) }
57
56
  end
57
+
58
+ def paranoia_destroy_attributes
59
+ {
60
+ paranoia_column => current_time_from_proper_timezone
61
+ }.merge(timestamp_attributes_with_current_time)
62
+ end
63
+
64
+ def timestamp_attributes_with_current_time
65
+ timestamp_attributes_for_update_in_model.each_with_object({}) { |attr,hash| hash[attr] = current_time_from_proper_timezone }
66
+ end
58
67
  end
59
68
 
60
69
  def paranoia_destroy
61
70
  with_transaction_returning_status do
62
71
  result = run_callbacks(:destroy) do
63
- @_disable_counter_cache = deleted?
72
+ @_disable_counter_cache = paranoia_destroyed?
64
73
  result = paranoia_delete
65
74
  next result unless result && ActiveRecord::VERSION::STRING >= '4.2'
66
75
  each_counter_cached_associations do |association|
@@ -73,7 +82,7 @@ module Paranoia
73
82
  @_disable_counter_cache = false
74
83
  result
75
84
  end
76
- raise ActiveRecord::Rollback, "Not destroyed" unless self.deleted?
85
+ raise ActiveRecord::Rollback, "Not destroyed" unless paranoia_destroyed?
77
86
  result
78
87
  end || false
79
88
  end
@@ -85,7 +94,16 @@ module Paranoia
85
94
  end
86
95
 
87
96
  def trigger_transactional_callbacks?
88
- super || @_trigger_destroy_callback && paranoia_destroyed?
97
+ super || @_trigger_destroy_callback && paranoia_destroyed? ||
98
+ @_trigger_restore_callback && !paranoia_destroyed?
99
+ end
100
+
101
+ def transaction_include_any_action?(actions)
102
+ super || actions.any? do |action|
103
+ if action == :restore
104
+ paranoia_after_restore_commit && @_trigger_restore_callback
105
+ end
106
+ end
89
107
  end
90
108
 
91
109
  def paranoia_delete
@@ -112,6 +130,10 @@ module Paranoia
112
130
  if within_recovery_window?(recovery_window_range) && ((noop_if_frozen && !@attributes.frozen?) || !noop_if_frozen)
113
131
  @_disable_counter_cache = !paranoia_destroyed?
114
132
  write_attribute paranoia_column, paranoia_sentinel_value
133
+ if paranoia_after_restore_commit
134
+ @_trigger_restore_callback = true
135
+ add_to_transaction
136
+ end
115
137
  update_columns(paranoia_restore_attributes)
116
138
  each_counter_cached_associations do |association|
117
139
  if send(association.reflection.name)
@@ -125,6 +147,10 @@ module Paranoia
125
147
  end
126
148
 
127
149
  self
150
+ ensure
151
+ if paranoia_after_restore_commit
152
+ @_trigger_restore_callback = false
153
+ end
128
154
  end
129
155
  alias :restore :restore!
130
156
 
@@ -144,7 +170,7 @@ module Paranoia
144
170
  end
145
171
  alias :deleted? :paranoia_destroyed?
146
172
 
147
- def really_destroy!
173
+ def really_destroy!(update_destroy_attributes: true)
148
174
  with_transaction_returning_status do
149
175
  run_callbacks(:real_destroy) do
150
176
  @_disable_counter_cache = paranoia_destroyed?
@@ -158,12 +184,14 @@ module Paranoia
158
184
  # .paranoid? will work for both instances and classes
159
185
  next unless association_data && association_data.paranoid?
160
186
  if reflection.collection?
161
- next association_data.with_deleted.each(&:really_destroy!)
187
+ next association_data.with_deleted.find_each { |record|
188
+ record.really_destroy!(update_destroy_attributes: update_destroy_attributes)
189
+ }
162
190
  end
163
- association_data.really_destroy!
191
+ association_data.really_destroy!(update_destroy_attributes: update_destroy_attributes)
164
192
  end
165
193
  end
166
- update_columns(paranoia_destroy_attributes)
194
+ update_columns(paranoia_destroy_attributes) if update_destroy_attributes
167
195
  destroy_without_paranoia
168
196
  end
169
197
  end
@@ -171,24 +199,43 @@ module Paranoia
171
199
 
172
200
  private
173
201
 
202
+ def counter_cache_disabled?
203
+ defined?(@_disable_counter_cache) && @_disable_counter_cache
204
+ end
205
+
206
+ def counter_cached_association_names
207
+ return [] if counter_cache_disabled?
208
+ super
209
+ end
210
+
174
211
  def each_counter_cached_associations
175
- !(defined?(@_disable_counter_cache) && @_disable_counter_cache) ? super : []
212
+ return [] if counter_cache_disabled?
213
+
214
+ if defined?(super)
215
+ super
216
+ else
217
+ counter_cached_association_names.each do |name|
218
+ yield association(name)
219
+ end
220
+ end
176
221
  end
177
222
 
178
223
  def paranoia_restore_attributes
179
224
  {
180
225
  paranoia_column => paranoia_sentinel_value
181
- }.merge(timestamp_attributes_with_current_time)
226
+ }.merge(self.class.timestamp_attributes_with_current_time)
182
227
  end
183
228
 
184
- def paranoia_destroy_attributes
185
- {
186
- paranoia_column => current_time_from_proper_timezone
187
- }.merge(timestamp_attributes_with_current_time)
188
- end
229
+ delegate :paranoia_destroy_attributes, to: 'self.class'
230
+
231
+ def paranoia_find_has_one_target(association)
232
+ association_foreign_key = association.options[:through].present? ? association.klass.primary_key : association.foreign_key
233
+ association_find_conditions = { association_foreign_key => self.id }
234
+ association_find_conditions[association.type] = self.class.name if association.type
189
235
 
190
- def timestamp_attributes_with_current_time
191
- timestamp_attributes_for_update_in_model.each_with_object({}) { |attr,hash| hash[attr] = current_time_from_proper_timezone }
236
+ scope = association.klass.only_deleted.where(association_find_conditions)
237
+ scope = scope.merge(association.scope) if association.scope
238
+ scope.first
192
239
  end
193
240
 
194
241
  # restore associated records that have been soft deleted when
@@ -214,19 +261,8 @@ module Paranoia
214
261
  end
215
262
 
216
263
  if association_data.nil? && association.macro.to_s == "has_one"
217
- association_class_name = association.klass.name
218
- association_foreign_key = association.foreign_key
219
-
220
- if association.type
221
- association_polymorphic_type = association.type
222
- association_find_conditions = { association_polymorphic_type => self.class.name.to_s, association_foreign_key => self.id }
223
- else
224
- association_find_conditions = { association_foreign_key => self.id }
225
- end
226
-
227
- association_class = association_class_name.constantize
228
- if association_class.paranoid?
229
- association_class.only_deleted.where(association_find_conditions).first
264
+ if association.klass.paranoid?
265
+ paranoia_find_has_one_target(association)
230
266
  .try!(:restore, recursive: true, :recovery_window_range => recovery_window_range)
231
267
  end
232
268
  end
@@ -241,6 +277,31 @@ module Paranoia
241
277
  end
242
278
  end
243
279
 
280
+ module ActiveRecord
281
+ module Transactions
282
+ module RestoreSupport
283
+ def self.included(base)
284
+ base::ACTIONS << :restore unless base::ACTIONS.include?(:restore)
285
+ end
286
+ end
287
+
288
+ module ClassMethods
289
+ def after_restore_commit(*args, &block)
290
+ set_options_for_callbacks!(args, on: :restore)
291
+ set_callback(:commit, :after, *args, &block)
292
+ end
293
+ end
294
+ end
295
+ end
296
+
297
+ module Paranoia::Relation
298
+ def paranoia_delete_all
299
+ update_all(klass.paranoia_destroy_attributes)
300
+ end
301
+
302
+ alias_method :delete_all, :paranoia_delete_all
303
+ end
304
+
244
305
  ActiveSupport.on_load(:active_record) do
245
306
  class ActiveRecord::Base
246
307
  def self.acts_as_paranoid(options={})
@@ -255,12 +316,15 @@ ActiveSupport.on_load(:active_record) do
255
316
  alias_method :really_destroyed?, :destroyed?
256
317
  alias_method :really_delete, :delete
257
318
  alias_method :destroy_without_paranoia, :destroy
319
+ class << self; delegate :really_delete_all, to: :all end
258
320
 
259
321
  include Paranoia
260
- class_attribute :paranoia_column, :paranoia_sentinel_value
322
+ class_attribute :paranoia_column, :paranoia_sentinel_value, :paranoia_after_restore_commit,
323
+ :delete_all_enabled
261
324
 
262
325
  self.paranoia_column = (options[:column] || :deleted_at).to_s
263
326
  self.paranoia_sentinel_value = options.fetch(:sentinel_value) { Paranoia.default_sentinel_value }
327
+ self.paranoia_after_restore_commit = options.fetch(:after_restore_commit) { false }
264
328
  def self.paranoia_scope
265
329
  where(paranoia_column => paranoia_sentinel_value)
266
330
  end
@@ -276,6 +340,20 @@ ActiveSupport.on_load(:active_record) do
276
340
  after_restore {
277
341
  self.class.notify_observers(:after_restore, self) if self.class.respond_to?(:notify_observers)
278
342
  }
343
+
344
+ if paranoia_after_restore_commit
345
+ ActiveRecord::Transactions.send(:include, ActiveRecord::Transactions::RestoreSupport)
346
+ end
347
+
348
+ self.delete_all_enabled = options[:delete_all_enabled] || Paranoia.delete_all_enabled
349
+
350
+ if self.delete_all_enabled
351
+ "#{self}::ActiveRecord_Relation".constantize.class_eval do
352
+ alias_method :really_delete_all, :delete_all
353
+
354
+ include Paranoia::Relation
355
+ end
356
+ end
279
357
  end
280
358
 
281
359
  # Please do not use this method in production.
data/paranoia.gemspec CHANGED
@@ -11,7 +11,7 @@ Gem::Specification.new do |s|
11
11
  s.license = 'MIT'
12
12
  s.summary = "Paranoia is a re-implementation of acts_as_paranoid for Rails 3, 4, and 5, using much, much, much less code."
13
13
  s.description = <<-DSC
14
- Paranoia is a re-implementation of acts_as_paranoid for Rails 4, 5, 6, and 7,
14
+ Paranoia is a re-implementation of acts_as_paranoid for Rails 5, 6, and 7,
15
15
  using much, much, much less code. You would use either plugin / gem if you
16
16
  wished that when you called destroy on an Active Record object that it
17
17
  didn't actually destroy it, but just "hid" the record. Paranoia does this
@@ -22,9 +22,9 @@ Gem::Specification.new do |s|
22
22
 
23
23
  s.required_rubygems_version = ">= 1.3.6"
24
24
 
25
- s.required_ruby_version = '>= 2.5'
25
+ s.required_ruby_version = '>= 2.7'
26
26
 
27
- s.add_dependency 'activerecord', '>= 5.1', '< 7.1'
27
+ s.add_dependency 'activerecord', '>= 6', '< 8.1'
28
28
 
29
29
  s.add_development_dependency "bundler", ">= 1.0.0"
30
30
  s.add_development_dependency "rake"
metadata CHANGED
@@ -1,14 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: paranoia
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.6.0
4
+ version: 3.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - radarlistener@gmail.com
8
- autorequire:
9
8
  bindir: bin
10
9
  cert_chain: []
11
- date: 2022-03-23 00:00:00.000000000 Z
10
+ date: 2025-01-19 00:00:00.000000000 Z
12
11
  dependencies:
13
12
  - !ruby/object:Gem::Dependency
14
13
  name: activerecord
@@ -16,20 +15,20 @@ dependencies:
16
15
  requirements:
17
16
  - - ">="
18
17
  - !ruby/object:Gem::Version
19
- version: '5.1'
18
+ version: '6'
20
19
  - - "<"
21
20
  - !ruby/object:Gem::Version
22
- version: '7.1'
21
+ version: '8.1'
23
22
  type: :runtime
24
23
  prerelease: false
25
24
  version_requirements: !ruby/object:Gem::Requirement
26
25
  requirements:
27
26
  - - ">="
28
27
  - !ruby/object:Gem::Version
29
- version: '5.1'
28
+ version: '6'
30
29
  - - "<"
31
30
  - !ruby/object:Gem::Version
32
- version: '7.1'
31
+ version: '8.1'
33
32
  - !ruby/object:Gem::Dependency
34
33
  name: bundler
35
34
  requirement: !ruby/object:Gem::Requirement
@@ -59,7 +58,7 @@ dependencies:
59
58
  - !ruby/object:Gem::Version
60
59
  version: '0'
61
60
  description: |2
62
- Paranoia is a re-implementation of acts_as_paranoid for Rails 4, 5, 6, and 7,
61
+ Paranoia is a re-implementation of acts_as_paranoid for Rails 5, 6, and 7,
63
62
  using much, much, much less code. You would use either plugin / gem if you
64
63
  wished that when you called destroy on an Active Record object that it
65
64
  didn't actually destroy it, but just "hid" the record. Paranoia does this
@@ -91,7 +90,6 @@ homepage: https://github.com/rubysherpas/paranoia
91
90
  licenses:
92
91
  - MIT
93
92
  metadata: {}
94
- post_install_message:
95
93
  rdoc_options: []
96
94
  require_paths:
97
95
  - lib
@@ -99,15 +97,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
99
97
  requirements:
100
98
  - - ">="
101
99
  - !ruby/object:Gem::Version
102
- version: '2.5'
100
+ version: '2.7'
103
101
  required_rubygems_version: !ruby/object:Gem::Requirement
104
102
  requirements:
105
103
  - - ">="
106
104
  - !ruby/object:Gem::Version
107
105
  version: 1.3.6
108
106
  requirements: []
109
- rubygems_version: 3.1.6
110
- signing_key:
107
+ rubygems_version: 3.6.2
111
108
  specification_version: 4
112
109
  summary: Paranoia is a re-implementation of acts_as_paranoid for Rails 3, 4, and 5,
113
110
  using much, much, much less code.