acts_as_paranoid 0.6.1 → 0.6.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 06cfbf17cb1f8fe737c00e223cc6b02f8ea1159d751c3e6c1bfba1fd077ca6ac
4
- data.tar.gz: b887b92760729053b6286412ee861e9677c7d418bcf28bdfdc996c4e9474ed30
3
+ metadata.gz: 6bcd9a9f5f44fbc3890442360530b48ed39f94bd8cbe4f49d245a2c27510f7fd
4
+ data.tar.gz: 47c9aceb7415a3704b69b3bcaf7c8db64d402ecc9d1ef41352a70d0a386a819c
5
5
  SHA512:
6
- metadata.gz: 699e32ad650195f1d4b34ef89e266a379ef35f450d6434d753227788fe214c3af9ebe410397799117b8b6527a240d769e768cc1a60b49f8abd663d8e1ab81ff9
7
- data.tar.gz: a5e7745201cfe1fb5689726ca93cff4fb24a594373a10c2fb7777541f9ca7dcb2681a20ddd91692eff6dae3149b80e6a962b56dc4fecd86d10b87e77f9be1221
6
+ metadata.gz: 78c376b394c50800f5f22db6a30a4dd607196a277266af7e24e04b209326e176471f916da360a1eb6e7e2c6573c506b211eccac42961a9a3ed686def7c105987
7
+ data.tar.gz: b0025f38c28cfc80fb852673f4913edf25273912ca83a768e000a15a745edfa9069d6fda490e31cc8ffe39975651d339d7ce82ac07f1065936ef6832f6b5eef1
@@ -2,10 +2,19 @@
2
2
 
3
3
  Notable changes to this project will be documented in this file.
4
4
 
5
+ ## 0.6.2
6
+
7
+ * Prevent recovery of non-deleted records
8
+ ([#133], by [Mary Beliveau][marycodes2] and [Valerie Woolard][valeriecodes])
9
+ * Allow model to set `table_name` after `acts_as_paranoid` macro
10
+ ([#131], by [Alex Wheeler][AlexWheeler]).
11
+ * Make counter cache work with a custom column name and with optional
12
+ associations ([#123], by [Ned Campion][nedcampion]).
13
+
5
14
  ## 0.6.1
6
15
 
7
- * Add support for Rails 6 ([#124], by [Daniel Rice](danielricecodes),
8
- [Josh Bryant](jbryant92), and [Romain Alexandre](RomainAlexandre))
16
+ * Add support for Rails 6 ([#124], by [Daniel Rice][danielricecodes],
17
+ [Josh Bryant][jbryant92], and [Romain Alexandre][RomainAlexandre])
9
18
  * Add support for incrementing and decrementing counter cache columns on
10
19
  associated objects ([#119], by [Dimitar Lukanov][shadydealer])
11
20
  * Add `:double_tap_destroys_fully` option, with default `true` ([#116],
@@ -23,10 +32,18 @@ Notable changes to this project will be documented in this file.
23
32
  [shadydealer]: https://github.com/shadydealer
24
33
  [danielricecodes]: https://github.com/danielricecodes
25
34
  [jbryant92]: https://github.com/jbryant92
35
+ [nedcampion]: https://github.com/nedcampion
26
36
  [RomainAlexandre]: https://github.com/RomainAlexandre
37
+ [AlexWheeler]: https://github.com/AlexWheeler
38
+ [marycodes2]: https://github.com/marycodes2
39
+ [valeriecodes]: https://github.com/valeriecodes
27
40
 
28
41
  <!-- issues & pull requests -->
29
42
 
43
+ [#133]: https://github.com/ActsAsParanoid/acts_as_paranoid/pull/133
44
+ [#131]: https://github.com/ActsAsParanoid/acts_as_paranoid/pull/131
45
+ [#124]: https://github.com/ActsAsParanoid/acts_as_paranoid/pull/124
46
+ [#123]: https://github.com/ActsAsParanoid/acts_as_paranoid/pull/123
30
47
  [#119]: https://github.com/ActsAsParanoid/acts_as_paranoid/pull/119
31
48
  [#116]: https://github.com/ActsAsParanoid/acts_as_paranoid/pull/116
32
49
  [#114]: https://github.com/ActsAsParanoid/acts_as_paranoid/pull/114
@@ -17,7 +17,7 @@ module ActsAsParanoid
17
17
  def acts_as_paranoid(options = {})
18
18
  raise ArgumentError, "Hash expected, got #{options.class.name}" if not options.is_a?(Hash) and not options.empty?
19
19
 
20
- class_attribute :paranoid_configuration, :paranoid_column_reference
20
+ class_attribute :paranoid_configuration
21
21
 
22
22
  self.paranoid_configuration = { :column => "deleted_at", :column_type => "time", :recover_dependent_associations => true, :dependent_recovery_window => 2.minutes, :recovery_value => nil, double_tap_destroys_fully: true }
23
23
  self.paranoid_configuration.merge!({ :deleted_value => "deleted" }) if options[:column_type] == "string"
@@ -26,7 +26,9 @@ module ActsAsParanoid
26
26
 
27
27
  raise ArgumentError, "'time', 'boolean' or 'string' expected for :column_type option, got #{paranoid_configuration[:column_type]}" unless ['time', 'boolean', 'string'].include? paranoid_configuration[:column_type]
28
28
 
29
- self.paranoid_column_reference = "#{self.table_name}.#{paranoid_configuration[:column]}"
29
+ def self.paranoid_column_reference
30
+ "#{self.table_name}.#{paranoid_configuration[:column]}"
31
+ end
30
32
 
31
33
  return if paranoid?
32
34
 
@@ -158,6 +158,7 @@ module ActsAsParanoid
158
158
  alias_method :destroy, :destroy!
159
159
 
160
160
  def recover(options={})
161
+ return if !self.deleted?
161
162
  options = {
162
163
  :recursive => self.class.paranoid_configuration[:recover_dependent_associations],
163
164
  :recovery_window => self.class.paranoid_configuration[:dependent_recovery_window]
@@ -248,15 +249,16 @@ module ActsAsParanoid
248
249
  return unless [:decrement_counter, :increment_counter].include? method_sym
249
250
 
250
251
  each_counter_cached_association_reflection do |assoc_reflection|
251
- associated_object = send(assoc_reflection.name)
252
- counter_cache_column = assoc_reflection.counter_cache_column
253
- associated_object.class.send(method_sym, counter_cache_column, associated_object.id)
252
+ if associated_object = send(assoc_reflection.name)
253
+ counter_cache_column = assoc_reflection.counter_cache_column
254
+ associated_object.class.send(method_sym, counter_cache_column, associated_object.id)
255
+ end
254
256
  end
255
257
  end
256
258
 
257
259
  def each_counter_cached_association_reflection
258
260
  _reflections.each do |name, reflection|
259
- yield reflection if reflection.belongs_to? && reflection.counter_cache_column == "#{self.class.name.underscore.pluralize}_count"
261
+ yield reflection if reflection.belongs_to? && reflection.counter_cache_column
260
262
  end
261
263
  end
262
264
 
@@ -1,3 +1,3 @@
1
1
  module ActsAsParanoid
2
- VERSION = "0.6.1"
2
+ VERSION = "0.6.2"
3
3
  end
@@ -312,6 +312,14 @@ class ParanoidTest < ParanoidBaseTest
312
312
  assert @paranoid_with_callback.called_after_recover
313
313
  end
314
314
 
315
+ def test_recovery_callbacks_without_destroy
316
+ @paranoid_with_callback = ParanoidWithCallback.first
317
+ @paranoid_with_callback.recover
318
+
319
+ assert_nil @paranoid_with_callback.called_before_recover
320
+ assert_nil @paranoid_with_callback.called_after_recover
321
+ end
322
+
315
323
  def test_delete_by_multiple_id_is_paranoid
316
324
  model_a = ParanoidBelongsDependant.create
317
325
  model_b = ParanoidBelongsDependant.create
@@ -455,6 +463,23 @@ class ParanoidTest < ParanoidBaseTest
455
463
  assert_equal 0, paranoid_boolean.reload.paranoid_with_counter_caches_count
456
464
  end
457
465
 
466
+ def test_decrement_custom_counters
467
+ paranoid_boolean = ParanoidBoolean.create!()
468
+ paranoid_with_custom_counter_cache = ParanoidWithCustomCounterCache.create!(paranoid_boolean: paranoid_boolean)
469
+
470
+ assert_equal 1, paranoid_boolean.custom_counter_cache
471
+
472
+ paranoid_with_custom_counter_cache.destroy
473
+
474
+ assert_equal 0, paranoid_boolean.reload.custom_counter_cache
475
+ end
476
+
477
+ def test_destroy_with_optional_belongs_to_and_counter_cache
478
+ ps = ParanoidWithCounterCacheOnOptionalBelognsTo.create!()
479
+ ps.destroy
480
+ assert_equal 1, ParanoidWithCounterCacheOnOptionalBelognsTo.only_deleted.where(:id => ps).count
481
+ end
482
+
458
483
  def test_hard_destroy_decrement_counters
459
484
  paranoid_boolean = ParanoidBoolean.create!()
460
485
  paranoid_with_counter_cache = ParanoidWithCounterCache.create!(paranoid_boolean: paranoid_boolean)
@@ -466,6 +491,17 @@ class ParanoidTest < ParanoidBaseTest
466
491
  assert_equal 0, paranoid_boolean.reload.paranoid_with_counter_caches_count
467
492
  end
468
493
 
494
+ def test_hard_destroy_decrement_custom_counters
495
+ paranoid_boolean = ParanoidBoolean.create!()
496
+ paranoid_with_custom_counter_cache = ParanoidWithCustomCounterCache.create!(paranoid_boolean: paranoid_boolean)
497
+
498
+ assert_equal 1, paranoid_boolean.custom_counter_cache
499
+
500
+ paranoid_with_custom_counter_cache.destroy_fully!
501
+
502
+ assert_equal 0, paranoid_boolean.reload.custom_counter_cache
503
+ end
504
+
469
505
  def test_increment_counters
470
506
  paranoid_boolean = ParanoidBoolean.create!()
471
507
  paranoid_with_counter_cache = ParanoidWithCounterCache.create!(paranoid_boolean: paranoid_boolean)
@@ -480,4 +516,23 @@ class ParanoidTest < ParanoidBaseTest
480
516
 
481
517
  assert_equal 1, paranoid_boolean.reload.paranoid_with_counter_caches_count
482
518
  end
519
+
520
+ def test_increment_custom_counters
521
+ paranoid_boolean = ParanoidBoolean.create!()
522
+ paranoid_with_custom_counter_cache = ParanoidWithCustomCounterCache.create!(paranoid_boolean: paranoid_boolean)
523
+
524
+ assert_equal 1, paranoid_boolean.custom_counter_cache
525
+
526
+ paranoid_with_custom_counter_cache.destroy
527
+
528
+ assert_equal 0, paranoid_boolean.reload.custom_counter_cache
529
+
530
+ paranoid_with_custom_counter_cache.recover
531
+
532
+ assert_equal 1, paranoid_boolean.reload.custom_counter_cache
533
+ end
534
+
535
+ def test_explicitly_setting_table_name_after_acts_as_paranoid_macro
536
+ assert_equal "explicit_table.deleted_at", ParanoidWithExplicitTableNameAfterMacro.paranoid_column_reference
537
+ end
483
538
  end
@@ -32,6 +32,7 @@ def setup_db
32
32
  t.boolean :is_deleted
33
33
  t.integer :paranoid_time_id
34
34
  t.integer :paranoid_with_counter_caches_count
35
+ t.integer :custom_counter_cache
35
36
  timestamps t
36
37
  end
37
38
 
@@ -260,6 +261,7 @@ class ParanoidBoolean < ActiveRecord::Base
260
261
  belongs_to :paranoid_time
261
262
  has_one :paranoid_has_one_dependant, :dependent => :destroy
262
263
  has_many :paranoid_with_counter_cache, :dependent => :destroy
264
+ has_many :paranoid_with_custom_counter_cache, :dependent => :destroy
263
265
  end
264
266
 
265
267
  class ParanoidString < ActiveRecord::Base
@@ -287,6 +289,24 @@ class ParanoidWithCounterCache < ActiveRecord::Base
287
289
  belongs_to :paranoid_boolean, :counter_cache => true
288
290
  end
289
291
 
292
+ class ParanoidWithCustomCounterCache < ActiveRecord::Base
293
+ self.table_name = "paranoid_with_counter_caches"
294
+
295
+ acts_as_paranoid
296
+ belongs_to :paranoid_boolean, counter_cache: :custom_counter_cache
297
+ end
298
+
299
+ class ParanoidWithCounterCacheOnOptionalBelognsTo < ActiveRecord::Base
300
+ self.table_name = "paranoid_with_counter_caches"
301
+
302
+ acts_as_paranoid
303
+ if ActiveRecord::VERSION::MAJOR < 5
304
+ belongs_to :paranoid_boolean, counter_cache: true, required: false
305
+ else
306
+ belongs_to :paranoid_boolean, counter_cache: true, optional: true
307
+ end
308
+ end
309
+
290
310
  class ParanoidHasManyDependant < ActiveRecord::Base
291
311
  acts_as_paranoid
292
312
  belongs_to :paranoid_time
@@ -493,3 +513,7 @@ class ParanoidBooleanNotNullable < ActiveRecord::Base
493
513
  acts_as_paranoid column: 'deleted', column_type: 'boolean', allow_nulls: false
494
514
  end
495
515
 
516
+ class ParanoidWithExplicitTableNameAfterMacro < ActiveRecord::Base
517
+ acts_as_paranoid
518
+ self.table_name = "explicit_table"
519
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: acts_as_paranoid
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.1
4
+ version: 0.6.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Zachary Scott
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2019-09-13 00:00:00.000000000 Z
13
+ date: 2019-10-22 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: activerecord