acts_as_paranoid 0.6.1 → 0.7.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +113 -8
- data/CONTRIBUTING.md +59 -0
- data/README.md +151 -57
- data/lib/acts_as_paranoid.rb +37 -30
- data/lib/acts_as_paranoid/associations.rb +21 -17
- data/lib/acts_as_paranoid/core.rb +112 -75
- data/lib/acts_as_paranoid/relation.rb +2 -0
- data/lib/acts_as_paranoid/validations.rb +8 -74
- data/lib/acts_as_paranoid/version.rb +3 -1
- data/test/test_associations.rb +119 -43
- data/test/test_core.rb +253 -57
- data/test/test_default_scopes.rb +7 -5
- data/test/test_helper.rb +134 -64
- data/test/test_inheritance.rb +3 -1
- data/test/test_relations.rb +18 -10
- data/test/test_validations.rb +9 -7
- metadata +72 -32
- data/lib/acts_as_paranoid/preloader_association.rb +0 -16
- data/test/test_preloader_association.rb +0 -27
data/test/test_default_scopes.rb
CHANGED
@@ -1,13 +1,15 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "test_helper"
|
2
4
|
|
3
5
|
class MultipleDefaultScopesTest < ParanoidBaseTest
|
4
6
|
def setup
|
5
7
|
setup_db
|
6
8
|
|
7
|
-
ParanoidPolygon.create! :
|
8
|
-
ParanoidPolygon.create! :
|
9
|
-
ParanoidPolygon.create! :
|
10
|
-
ParanoidPolygon.create! :
|
9
|
+
ParanoidPolygon.create! sides: 3
|
10
|
+
ParanoidPolygon.create! sides: 3
|
11
|
+
ParanoidPolygon.create! sides: 3
|
12
|
+
ParanoidPolygon.create! sides: 8
|
11
13
|
|
12
14
|
assert_equal 3, ParanoidPolygon.count
|
13
15
|
assert_equal 4, ParanoidPolygon.unscoped.count
|
data/test/test_helper.rb
CHANGED
@@ -1,23 +1,41 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "bundler"
|
2
4
|
begin
|
3
|
-
Bundler.
|
5
|
+
Bundler.load
|
4
6
|
rescue Bundler::BundlerError => e
|
5
|
-
|
6
|
-
|
7
|
+
warn e.message
|
8
|
+
warn "Run `bundle install` to install missing gems"
|
7
9
|
exit e.status_code
|
8
10
|
end
|
9
11
|
|
10
|
-
|
11
|
-
|
12
|
+
if RUBY_ENGINE == "jruby"
|
13
|
+
# Workaround for issue in I18n/JRuby combo.
|
14
|
+
# See https://github.com/jruby/jruby/issues/6547 and
|
15
|
+
# https://github.com/ruby-i18n/i18n/issues/555
|
16
|
+
require "i18n/backend"
|
17
|
+
require "i18n/backend/simple"
|
18
|
+
end
|
19
|
+
|
20
|
+
require "simplecov"
|
21
|
+
SimpleCov.start do
|
22
|
+
enable_coverage :branch
|
23
|
+
end
|
24
|
+
|
25
|
+
require "acts_as_paranoid"
|
26
|
+
require "minitest/autorun"
|
27
|
+
require "minitest/focus"
|
12
28
|
|
13
29
|
# Silence deprecation halfway through the test
|
14
30
|
I18n.enforce_available_locales = true
|
15
31
|
|
16
|
-
ActiveRecord::Base.establish_connection(:
|
32
|
+
ActiveRecord::Base.establish_connection(adapter: "sqlite3", database: ":memory:")
|
17
33
|
ActiveRecord::Schema.verbose = false
|
18
34
|
|
35
|
+
# rubocop:disable Metrics/AbcSize
|
36
|
+
# rubocop:disable Metrics/MethodLength
|
19
37
|
def setup_db
|
20
|
-
ActiveRecord::Schema.define(:
|
38
|
+
ActiveRecord::Schema.define(version: 1) do # rubocop:disable Metrics/BlockLength
|
21
39
|
create_table :paranoid_times do |t|
|
22
40
|
t.string :name
|
23
41
|
t.datetime :deleted_at
|
@@ -32,6 +50,8 @@ def setup_db
|
|
32
50
|
t.boolean :is_deleted
|
33
51
|
t.integer :paranoid_time_id
|
34
52
|
t.integer :paranoid_with_counter_caches_count
|
53
|
+
t.integer :paranoid_with_touch_and_counter_caches_count
|
54
|
+
t.integer :custom_counter_cache
|
35
55
|
timestamps t
|
36
56
|
end
|
37
57
|
|
@@ -111,14 +131,15 @@ def setup_db
|
|
111
131
|
|
112
132
|
create_table :super_paranoids do |t|
|
113
133
|
t.string :type
|
114
|
-
t.references :has_many_inherited_super_paranoidz,
|
134
|
+
t.references :has_many_inherited_super_paranoidz,
|
135
|
+
index: { name: "index__sp_id_on_has_many_isp" }
|
115
136
|
t.datetime :deleted_at
|
116
137
|
|
117
138
|
timestamps t
|
118
139
|
end
|
119
140
|
|
120
141
|
create_table :has_many_inherited_super_paranoidzs do |t|
|
121
|
-
t.references :super_paranoidz, index: { name:
|
142
|
+
t.references :super_paranoidz, index: { name: "index_has_many_isp_on_sp_id" }
|
122
143
|
t.datetime :deleted_at
|
123
144
|
|
124
145
|
timestamps t
|
@@ -165,7 +186,7 @@ def setup_db
|
|
165
186
|
end
|
166
187
|
|
167
188
|
create_table :paranoid_polygons do |t|
|
168
|
-
t.integer
|
189
|
+
t.integer :sides
|
169
190
|
t.datetime :deleted_at
|
170
191
|
|
171
192
|
timestamps t
|
@@ -184,7 +205,7 @@ def setup_db
|
|
184
205
|
|
185
206
|
create_table :paranoid_boolean_not_nullables do |t|
|
186
207
|
t.string :name
|
187
|
-
t.boolean :deleted, :boolean, :
|
208
|
+
t.boolean :deleted, :boolean, null: false, default: false
|
188
209
|
end
|
189
210
|
|
190
211
|
create_table :paranoid_belongs_to_polymorphics do |t|
|
@@ -222,19 +243,18 @@ def setup_db
|
|
222
243
|
end
|
223
244
|
end
|
224
245
|
end
|
246
|
+
# rubocop:enable Metrics/AbcSize
|
247
|
+
# rubocop:enable Metrics/MethodLength
|
225
248
|
|
226
249
|
def timestamps(table)
|
227
|
-
table.column :created_at
|
228
|
-
table.column :updated_at
|
250
|
+
table.column :created_at, :timestamp, null: false
|
251
|
+
table.column :updated_at, :timestamp, null: false
|
229
252
|
end
|
230
253
|
|
231
254
|
def teardown_db
|
232
|
-
|
233
|
-
ActiveRecord::Base.connection.
|
234
|
-
else
|
235
|
-
ActiveRecord::Base.connection.data_sources
|
255
|
+
ActiveRecord::Base.connection.data_sources.each do |table|
|
256
|
+
ActiveRecord::Base.connection.drop_table(table)
|
236
257
|
end
|
237
|
-
tables.each { |table| ActiveRecord::Base.connection.drop_table(table) }
|
238
258
|
end
|
239
259
|
|
240
260
|
class ParanoidTime < ActiveRecord::Base
|
@@ -242,60 +262,106 @@ class ParanoidTime < ActiveRecord::Base
|
|
242
262
|
|
243
263
|
validates_uniqueness_of :name
|
244
264
|
|
245
|
-
has_many :paranoid_has_many_dependants, :
|
246
|
-
has_many :paranoid_booleans, :
|
247
|
-
has_many :not_paranoids, :
|
248
|
-
has_many :paranoid_sections, :
|
265
|
+
has_many :paranoid_has_many_dependants, dependent: :destroy
|
266
|
+
has_many :paranoid_booleans, dependent: :destroy
|
267
|
+
has_many :not_paranoids, dependent: :delete_all
|
268
|
+
has_many :paranoid_sections, dependent: :destroy
|
249
269
|
|
250
|
-
has_one :has_one_not_paranoid, :
|
270
|
+
has_one :has_one_not_paranoid, dependent: :destroy
|
251
271
|
|
252
|
-
belongs_to :not_paranoid, :
|
272
|
+
belongs_to :not_paranoid, dependent: :destroy
|
253
273
|
end
|
254
274
|
|
255
275
|
class ParanoidBoolean < ActiveRecord::Base
|
256
|
-
acts_as_paranoid :
|
276
|
+
acts_as_paranoid column_type: "boolean", column: "is_deleted"
|
257
277
|
validates_as_paranoid
|
258
278
|
validates_uniqueness_of_without_deleted :name
|
259
279
|
|
260
280
|
belongs_to :paranoid_time
|
261
|
-
has_one :paranoid_has_one_dependant, :
|
262
|
-
has_many :paranoid_with_counter_cache, :
|
281
|
+
has_one :paranoid_has_one_dependant, dependent: :destroy
|
282
|
+
has_many :paranoid_with_counter_cache, dependent: :destroy
|
283
|
+
has_many :paranoid_with_custom_counter_cache, dependent: :destroy
|
284
|
+
has_many :paranoid_with_touch_and_counter_cache, dependent: :destroy
|
285
|
+
has_many :paranoid_with_touch, dependent: :destroy
|
263
286
|
end
|
264
287
|
|
265
288
|
class ParanoidString < ActiveRecord::Base
|
266
|
-
acts_as_paranoid :
|
289
|
+
acts_as_paranoid column_type: "string", column: "deleted", deleted_value: "dead"
|
267
290
|
end
|
268
291
|
|
269
292
|
class NotParanoid < ActiveRecord::Base
|
270
293
|
end
|
271
294
|
|
272
295
|
class ParanoidNoDoubleTapDestroysFully < ActiveRecord::Base
|
273
|
-
acts_as_paranoid :
|
296
|
+
acts_as_paranoid double_tap_destroys_fully: false
|
274
297
|
end
|
275
298
|
|
276
299
|
class HasOneNotParanoid < ActiveRecord::Base
|
277
|
-
belongs_to :paranoid_time, :
|
300
|
+
belongs_to :paranoid_time, with_deleted: true
|
278
301
|
end
|
279
302
|
|
280
303
|
class DoubleHasOneNotParanoid < HasOneNotParanoid
|
281
|
-
belongs_to :paranoid_time, :
|
282
|
-
|
304
|
+
belongs_to :paranoid_time, with_deleted: true
|
305
|
+
begin
|
306
|
+
verbose = $VERBOSE
|
307
|
+
$VERBOSE = false
|
308
|
+
belongs_to :paranoid_time, with_deleted: true
|
309
|
+
ensure
|
310
|
+
$VERBOSE = verbose
|
311
|
+
end
|
283
312
|
end
|
284
313
|
|
285
314
|
class ParanoidWithCounterCache < ActiveRecord::Base
|
286
315
|
acts_as_paranoid
|
287
|
-
belongs_to :paranoid_boolean, :
|
316
|
+
belongs_to :paranoid_boolean, counter_cache: true
|
317
|
+
end
|
318
|
+
|
319
|
+
class ParanoidWithCustomCounterCache < ActiveRecord::Base
|
320
|
+
self.table_name = "paranoid_with_counter_caches"
|
321
|
+
|
322
|
+
acts_as_paranoid
|
323
|
+
belongs_to :paranoid_boolean, counter_cache: :custom_counter_cache
|
324
|
+
end
|
325
|
+
|
326
|
+
class ParanoidWithCounterCacheOnOptionalBelognsTo < ActiveRecord::Base
|
327
|
+
self.table_name = "paranoid_with_counter_caches"
|
328
|
+
|
329
|
+
acts_as_paranoid
|
330
|
+
if ActiveRecord::VERSION::MAJOR < 5
|
331
|
+
belongs_to :paranoid_boolean, counter_cache: true, required: false
|
332
|
+
else
|
333
|
+
belongs_to :paranoid_boolean, counter_cache: true, optional: true
|
334
|
+
end
|
335
|
+
end
|
336
|
+
|
337
|
+
class ParanoidWithTouch < ActiveRecord::Base
|
338
|
+
self.table_name = "paranoid_with_counter_caches"
|
339
|
+
acts_as_paranoid
|
340
|
+
belongs_to :paranoid_boolean, touch: true
|
341
|
+
end
|
342
|
+
|
343
|
+
class ParanoidWithTouchAndCounterCache < ActiveRecord::Base
|
344
|
+
self.table_name = "paranoid_with_counter_caches"
|
345
|
+
acts_as_paranoid
|
346
|
+
belongs_to :paranoid_boolean, touch: true, counter_cache: true
|
288
347
|
end
|
289
348
|
|
290
349
|
class ParanoidHasManyDependant < ActiveRecord::Base
|
291
350
|
acts_as_paranoid
|
292
351
|
belongs_to :paranoid_time
|
293
|
-
belongs_to :paranoid_time_with_scope,
|
294
|
-
|
295
|
-
|
296
|
-
belongs_to :
|
352
|
+
belongs_to :paranoid_time_with_scope,
|
353
|
+
-> { where(name: "hello").includes(:not_paranoid) },
|
354
|
+
class_name: "ParanoidTime", foreign_key: :paranoid_time_id
|
355
|
+
belongs_to :paranoid_time_with_deleted, class_name: "ParanoidTime",
|
356
|
+
foreign_key: :paranoid_time_id, with_deleted: true
|
357
|
+
belongs_to :paranoid_time_with_scope_with_deleted,
|
358
|
+
-> { where(name: "hello").includes(:not_paranoid) },
|
359
|
+
class_name: "ParanoidTime", foreign_key: :paranoid_time_id, with_deleted: true
|
360
|
+
belongs_to :paranoid_time_polymorphic_with_deleted, class_name: "ParanoidTime",
|
361
|
+
foreign_key: :paranoid_time_id,
|
362
|
+
polymorphic: true, with_deleted: true
|
297
363
|
|
298
|
-
belongs_to :paranoid_belongs_dependant, :
|
364
|
+
belongs_to :paranoid_belongs_dependant, dependent: :destroy
|
299
365
|
end
|
300
366
|
|
301
367
|
class ParanoidBelongsDependant < ActiveRecord::Base
|
@@ -313,13 +379,14 @@ end
|
|
313
379
|
class ParanoidWithCallback < ActiveRecord::Base
|
314
380
|
acts_as_paranoid
|
315
381
|
|
316
|
-
attr_accessor :called_before_destroy, :called_after_destroy,
|
317
|
-
|
382
|
+
attr_accessor :called_before_destroy, :called_after_destroy,
|
383
|
+
:called_after_commit_on_destroy, :called_before_recover,
|
384
|
+
:called_after_recover
|
318
385
|
|
319
386
|
before_destroy :call_me_before_destroy
|
320
387
|
after_destroy :call_me_after_destroy
|
321
388
|
|
322
|
-
after_commit :call_me_after_commit_on_destroy, :
|
389
|
+
after_commit :call_me_after_commit_on_destroy, on: :destroy
|
323
390
|
|
324
391
|
before_recover :call_me_before_recover
|
325
392
|
after_recover :call_me_after_recover
|
@@ -352,14 +419,14 @@ end
|
|
352
419
|
|
353
420
|
class ParanoidDestroyCompany < ActiveRecord::Base
|
354
421
|
acts_as_paranoid
|
355
|
-
validates :name, :
|
356
|
-
has_many :paranoid_products, :
|
422
|
+
validates :name, presence: true
|
423
|
+
has_many :paranoid_products, dependent: :destroy
|
357
424
|
end
|
358
425
|
|
359
426
|
class ParanoidDeleteCompany < ActiveRecord::Base
|
360
427
|
acts_as_paranoid
|
361
|
-
validates :name, :
|
362
|
-
has_many :paranoid_products, :
|
428
|
+
validates :name, presence: true
|
429
|
+
has_many :paranoid_products, dependent: :delete_all
|
363
430
|
end
|
364
431
|
|
365
432
|
class ParanoidProduct < ActiveRecord::Base
|
@@ -375,22 +442,21 @@ class SuperParanoid < ActiveRecord::Base
|
|
375
442
|
end
|
376
443
|
|
377
444
|
class HasManyInheritedSuperParanoidz < ActiveRecord::Base
|
378
|
-
has_many :super_paranoidz, :
|
445
|
+
has_many :super_paranoidz, class_name: "InheritedParanoid", dependent: :destroy
|
379
446
|
end
|
380
447
|
|
381
448
|
class InheritedParanoid < SuperParanoid
|
382
449
|
acts_as_paranoid
|
383
450
|
end
|
384
451
|
|
385
|
-
|
386
452
|
class ParanoidManyManyParentLeft < ActiveRecord::Base
|
387
453
|
has_many :paranoid_many_many_children
|
388
|
-
has_many :paranoid_many_many_parent_rights, :
|
454
|
+
has_many :paranoid_many_many_parent_rights, through: :paranoid_many_many_children
|
389
455
|
end
|
390
456
|
|
391
457
|
class ParanoidManyManyParentRight < ActiveRecord::Base
|
392
458
|
has_many :paranoid_many_many_children
|
393
|
-
has_many :paranoid_many_many_parent_lefts, :
|
459
|
+
has_many :paranoid_many_many_parent_lefts, through: :paranoid_many_many_children
|
394
460
|
end
|
395
461
|
|
396
462
|
class ParanoidManyManyChild < ActiveRecord::Base
|
@@ -401,21 +467,21 @@ end
|
|
401
467
|
|
402
468
|
class ParanoidWithScopedValidation < ActiveRecord::Base
|
403
469
|
acts_as_paranoid
|
404
|
-
validates_uniqueness_of :name, :
|
470
|
+
validates_uniqueness_of :name, scope: :category
|
405
471
|
end
|
406
472
|
|
407
473
|
class ParanoidBelongsToPolymorphic < ActiveRecord::Base
|
408
474
|
acts_as_paranoid
|
409
|
-
belongs_to :parent, :
|
475
|
+
belongs_to :parent, polymorphic: true, with_deleted: true
|
410
476
|
end
|
411
477
|
|
412
478
|
class NotParanoidHasManyAsParent < ActiveRecord::Base
|
413
|
-
has_many :paranoid_belongs_to_polymorphics, :
|
479
|
+
has_many :paranoid_belongs_to_polymorphics, as: :parent, dependent: :destroy
|
414
480
|
end
|
415
481
|
|
416
482
|
class ParanoidHasManyAsParent < ActiveRecord::Base
|
417
483
|
acts_as_paranoid
|
418
|
-
has_many :paranoid_belongs_to_polymorphics, :
|
484
|
+
has_many :paranoid_belongs_to_polymorphics, as: :parent, dependent: :destroy
|
419
485
|
end
|
420
486
|
|
421
487
|
class ParanoidBaseTest < ActiveSupport::TestCase
|
@@ -423,13 +489,13 @@ class ParanoidBaseTest < ActiveSupport::TestCase
|
|
423
489
|
setup_db
|
424
490
|
|
425
491
|
["paranoid", "really paranoid", "extremely paranoid"].each do |name|
|
426
|
-
ParanoidTime.create! :
|
427
|
-
ParanoidBoolean.create! :
|
492
|
+
ParanoidTime.create! name: name
|
493
|
+
ParanoidBoolean.create! name: name
|
428
494
|
end
|
429
495
|
|
430
|
-
ParanoidString.create! :
|
431
|
-
NotParanoid.create! :
|
432
|
-
ParanoidWithCallback.create! :
|
496
|
+
ParanoidString.create! name: "strings can be paranoid"
|
497
|
+
NotParanoid.create! name: "no paranoid goals"
|
498
|
+
ParanoidWithCallback.create! name: "paranoid with callbacks"
|
433
499
|
end
|
434
500
|
|
435
501
|
def teardown
|
@@ -463,9 +529,9 @@ class ParanoidForest < ActiveRecord::Base
|
|
463
529
|
|
464
530
|
ActiveRecord::Base.logger = Logger.new(StringIO.new)
|
465
531
|
|
466
|
-
scope :rainforest,
|
532
|
+
scope :rainforest, -> { where(rainforest: true) }
|
467
533
|
|
468
|
-
has_many :paranoid_trees, :
|
534
|
+
has_many :paranoid_trees, dependent: :destroy
|
469
535
|
end
|
470
536
|
|
471
537
|
class ParanoidTree < ActiveRecord::Base
|
@@ -476,7 +542,7 @@ end
|
|
476
542
|
|
477
543
|
class ParanoidPolygon < ActiveRecord::Base
|
478
544
|
acts_as_paranoid
|
479
|
-
default_scope { where(
|
545
|
+
default_scope { where("sides = ?", 3) }
|
480
546
|
end
|
481
547
|
|
482
548
|
class ParanoidAndroid < ActiveRecord::Base
|
@@ -486,10 +552,14 @@ end
|
|
486
552
|
class ParanoidSection < ActiveRecord::Base
|
487
553
|
acts_as_paranoid
|
488
554
|
belongs_to :paranoid_time
|
489
|
-
belongs_to :paranoid_thing, :
|
555
|
+
belongs_to :paranoid_thing, polymorphic: true, dependent: :destroy
|
490
556
|
end
|
491
557
|
|
492
558
|
class ParanoidBooleanNotNullable < ActiveRecord::Base
|
493
|
-
acts_as_paranoid column:
|
559
|
+
acts_as_paranoid column: "deleted", column_type: "boolean", allow_nulls: false
|
494
560
|
end
|
495
561
|
|
562
|
+
class ParanoidWithExplicitTableNameAfterMacro < ActiveRecord::Base
|
563
|
+
acts_as_paranoid
|
564
|
+
self.table_name = "explicit_table"
|
565
|
+
end
|
data/test/test_inheritance.rb
CHANGED
data/test/test_relations.rb
CHANGED
@@ -1,20 +1,22 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "test_helper"
|
2
4
|
|
3
5
|
class RelationsTest < ParanoidBaseTest
|
4
6
|
def setup
|
5
7
|
setup_db
|
6
8
|
|
7
|
-
@paranoid_forest_1 = ParanoidForest.create! :
|
8
|
-
@paranoid_forest_2 = ParanoidForest.create! :
|
9
|
-
@paranoid_forest_3 = ParanoidForest.create! :
|
9
|
+
@paranoid_forest_1 = ParanoidForest.create! name: "ParanoidForest #1"
|
10
|
+
@paranoid_forest_2 = ParanoidForest.create! name: "ParanoidForest #2", rainforest: true
|
11
|
+
@paranoid_forest_3 = ParanoidForest.create! name: "ParanoidForest #3", rainforest: true
|
10
12
|
|
11
13
|
assert_equal 3, ParanoidForest.count
|
12
14
|
assert_equal 2, ParanoidForest.rainforest.count
|
13
15
|
|
14
|
-
@paranoid_forest_1.paranoid_trees.create! :
|
15
|
-
@paranoid_forest_1.paranoid_trees.create! :
|
16
|
-
@paranoid_forest_2.paranoid_trees.create! :
|
17
|
-
@paranoid_forest_2.paranoid_trees.create! :
|
16
|
+
@paranoid_forest_1.paranoid_trees.create! name: "ParanoidTree #1"
|
17
|
+
@paranoid_forest_1.paranoid_trees.create! name: "ParanoidTree #2"
|
18
|
+
@paranoid_forest_2.paranoid_trees.create! name: "ParanoidTree #3"
|
19
|
+
@paranoid_forest_2.paranoid_trees.create! name: "ParanoidTree #4"
|
18
20
|
|
19
21
|
assert_equal 4, ParanoidTree.count
|
20
22
|
end
|
@@ -86,13 +88,15 @@ class RelationsTest < ParanoidBaseTest
|
|
86
88
|
assert_equal 2, @paranoid_forest_2.paranoid_trees.with_deleted.count
|
87
89
|
end
|
88
90
|
|
89
|
-
def
|
90
|
-
# destroy!: aliased to delete
|
91
|
+
def test_real_removal_through_relation_with_destroy_bang
|
92
|
+
# Relation.destroy!: aliased to delete
|
91
93
|
ParanoidForest.rainforest.destroy!(@paranoid_forest_3)
|
92
94
|
assert_equal 1, ParanoidForest.rainforest.count
|
93
95
|
assert_equal 1, ParanoidForest.rainforest.with_deleted.count
|
94
96
|
assert_equal 0, ParanoidForest.rainforest.only_deleted.count
|
97
|
+
end
|
95
98
|
|
99
|
+
def test_two_step_real_removal_through_relation_with_destroy
|
96
100
|
# destroy: two-step through a relation
|
97
101
|
paranoid_tree = @paranoid_forest_1.paranoid_trees.first
|
98
102
|
@paranoid_forest_1.paranoid_trees.order(:id).destroy(paranoid_tree.id)
|
@@ -100,14 +104,18 @@ class RelationsTest < ParanoidBaseTest
|
|
100
104
|
assert_equal 1, @paranoid_forest_1.paranoid_trees.count
|
101
105
|
assert_equal 1, @paranoid_forest_1.paranoid_trees.with_deleted.count
|
102
106
|
assert_equal 0, @paranoid_forest_1.paranoid_trees.only_deleted.count
|
107
|
+
end
|
103
108
|
|
109
|
+
def test_two_step_real_removal_through_relation_with_destroy_all
|
104
110
|
# destroy_all: two-step through a relation
|
105
111
|
@paranoid_forest_1.paranoid_trees.order(:id).destroy_all
|
106
112
|
@paranoid_forest_1.paranoid_trees.only_deleted.destroy_all
|
107
113
|
assert_equal 0, @paranoid_forest_1.paranoid_trees.count
|
108
114
|
assert_equal 0, @paranoid_forest_1.paranoid_trees.with_deleted.count
|
109
115
|
assert_equal 0, @paranoid_forest_1.paranoid_trees.only_deleted.count
|
116
|
+
end
|
110
117
|
|
118
|
+
def test_real_removal_through_relation_with_delete_all_bang
|
111
119
|
# delete_all!: through a relation
|
112
120
|
@paranoid_forest_2.paranoid_trees.order(:id).delete_all!
|
113
121
|
assert_equal 0, @paranoid_forest_2.paranoid_trees.count
|