acts_as_paranoid 0.6.0 → 0.7.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +128 -0
- data/README.md +154 -56
- data/lib/acts_as_paranoid.rb +34 -31
- data/lib/acts_as_paranoid/associations.rb +21 -17
- data/lib/acts_as_paranoid/core.rb +139 -58
- data/lib/acts_as_paranoid/relation.rb +2 -0
- data/lib/acts_as_paranoid/validations.rb +8 -69
- data/lib/acts_as_paranoid/version.rb +3 -1
- data/test/test_associations.rb +157 -38
- data/test/test_core.rb +269 -48
- data/test/test_default_scopes.rb +7 -6
- data/test/test_helper.rb +155 -62
- data/test/test_inheritance.rb +3 -1
- data/test/test_relations.rb +18 -10
- data/test/test_validations.rb +9 -7
- metadata +92 -33
- 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,14 +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
|
-
|
8
|
-
ParanoidPolygon.create! :
|
9
|
-
ParanoidPolygon.create! :
|
10
|
-
ParanoidPolygon.create! :
|
11
|
-
ParanoidPolygon.create! :sides => 8
|
9
|
+
ParanoidPolygon.create! sides: 3
|
10
|
+
ParanoidPolygon.create! sides: 3
|
11
|
+
ParanoidPolygon.create! sides: 3
|
12
|
+
ParanoidPolygon.create! sides: 8
|
12
13
|
|
13
14
|
assert_equal 3, ParanoidPolygon.count
|
14
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
|
@@ -31,7 +49,9 @@ def setup_db
|
|
31
49
|
t.string :name
|
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
|
@@ -148,7 +169,7 @@ def setup_db
|
|
148
169
|
timestamps t
|
149
170
|
end
|
150
171
|
|
151
|
-
|
172
|
+
create_table :paranoid_forests do |t|
|
152
173
|
t.string :name
|
153
174
|
t.boolean :rainforest
|
154
175
|
t.datetime :deleted_at
|
@@ -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|
|
@@ -208,21 +229,32 @@ def setup_db
|
|
208
229
|
|
209
230
|
timestamps t
|
210
231
|
end
|
232
|
+
|
233
|
+
create_table :paranoid_no_double_tap_destroys_fullies do |t|
|
234
|
+
t.datetime :deleted_at
|
235
|
+
end
|
236
|
+
|
237
|
+
create_table :paranoid_with_counter_caches do |t|
|
238
|
+
t.string :name
|
239
|
+
t.datetime :deleted_at
|
240
|
+
t.integer :paranoid_boolean_id
|
241
|
+
|
242
|
+
timestamps t
|
243
|
+
end
|
211
244
|
end
|
212
245
|
end
|
246
|
+
# rubocop:enable Metrics/AbcSize
|
247
|
+
# rubocop:enable Metrics/MethodLength
|
213
248
|
|
214
249
|
def timestamps(table)
|
215
|
-
table.column :created_at
|
216
|
-
table.column :updated_at
|
250
|
+
table.column :created_at, :timestamp, null: false
|
251
|
+
table.column :updated_at, :timestamp, null: false
|
217
252
|
end
|
218
253
|
|
219
254
|
def teardown_db
|
220
|
-
|
221
|
-
ActiveRecord::Base.connection.
|
222
|
-
else
|
223
|
-
ActiveRecord::Base.connection.data_sources
|
255
|
+
ActiveRecord::Base.connection.data_sources.each do |table|
|
256
|
+
ActiveRecord::Base.connection.drop_table(table)
|
224
257
|
end
|
225
|
-
tables.each { |table| ActiveRecord::Base.connection.drop_table(table) }
|
226
258
|
end
|
227
259
|
|
228
260
|
class ParanoidTime < ActiveRecord::Base
|
@@ -230,49 +262,106 @@ class ParanoidTime < ActiveRecord::Base
|
|
230
262
|
|
231
263
|
validates_uniqueness_of :name
|
232
264
|
|
233
|
-
has_many :paranoid_has_many_dependants, :
|
234
|
-
has_many :paranoid_booleans, :
|
235
|
-
has_many :not_paranoids, :
|
236
|
-
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
|
237
269
|
|
238
|
-
has_one :has_one_not_paranoid, :
|
270
|
+
has_one :has_one_not_paranoid, dependent: :destroy
|
239
271
|
|
240
|
-
belongs_to :not_paranoid, :
|
272
|
+
belongs_to :not_paranoid, dependent: :destroy
|
241
273
|
end
|
242
274
|
|
243
275
|
class ParanoidBoolean < ActiveRecord::Base
|
244
|
-
acts_as_paranoid :
|
276
|
+
acts_as_paranoid column_type: "boolean", column: "is_deleted"
|
245
277
|
validates_as_paranoid
|
246
278
|
validates_uniqueness_of_without_deleted :name
|
247
279
|
|
248
280
|
belongs_to :paranoid_time
|
249
|
-
has_one :paranoid_has_one_dependant, :
|
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
|
250
286
|
end
|
251
287
|
|
252
288
|
class ParanoidString < ActiveRecord::Base
|
253
|
-
acts_as_paranoid :
|
289
|
+
acts_as_paranoid column_type: "string", column: "deleted", deleted_value: "dead"
|
254
290
|
end
|
255
291
|
|
256
292
|
class NotParanoid < ActiveRecord::Base
|
257
293
|
end
|
258
294
|
|
295
|
+
class ParanoidNoDoubleTapDestroysFully < ActiveRecord::Base
|
296
|
+
acts_as_paranoid double_tap_destroys_fully: false
|
297
|
+
end
|
298
|
+
|
259
299
|
class HasOneNotParanoid < ActiveRecord::Base
|
260
|
-
belongs_to :paranoid_time, :
|
300
|
+
belongs_to :paranoid_time, with_deleted: true
|
261
301
|
end
|
262
302
|
|
263
303
|
class DoubleHasOneNotParanoid < HasOneNotParanoid
|
264
|
-
belongs_to :paranoid_time, :
|
265
|
-
|
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
|
312
|
+
end
|
313
|
+
|
314
|
+
class ParanoidWithCounterCache < ActiveRecord::Base
|
315
|
+
acts_as_paranoid
|
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
|
266
347
|
end
|
267
348
|
|
268
349
|
class ParanoidHasManyDependant < ActiveRecord::Base
|
269
350
|
acts_as_paranoid
|
270
351
|
belongs_to :paranoid_time
|
271
|
-
belongs_to :paranoid_time_with_scope,
|
272
|
-
|
273
|
-
|
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
|
274
363
|
|
275
|
-
belongs_to :paranoid_belongs_dependant, :
|
364
|
+
belongs_to :paranoid_belongs_dependant, dependent: :destroy
|
276
365
|
end
|
277
366
|
|
278
367
|
class ParanoidBelongsDependant < ActiveRecord::Base
|
@@ -290,13 +379,14 @@ end
|
|
290
379
|
class ParanoidWithCallback < ActiveRecord::Base
|
291
380
|
acts_as_paranoid
|
292
381
|
|
293
|
-
attr_accessor :called_before_destroy, :called_after_destroy,
|
294
|
-
|
382
|
+
attr_accessor :called_before_destroy, :called_after_destroy,
|
383
|
+
:called_after_commit_on_destroy, :called_before_recover,
|
384
|
+
:called_after_recover
|
295
385
|
|
296
386
|
before_destroy :call_me_before_destroy
|
297
387
|
after_destroy :call_me_after_destroy
|
298
388
|
|
299
|
-
after_commit :call_me_after_commit_on_destroy, :
|
389
|
+
after_commit :call_me_after_commit_on_destroy, on: :destroy
|
300
390
|
|
301
391
|
before_recover :call_me_before_recover
|
302
392
|
after_recover :call_me_after_recover
|
@@ -329,14 +419,14 @@ end
|
|
329
419
|
|
330
420
|
class ParanoidDestroyCompany < ActiveRecord::Base
|
331
421
|
acts_as_paranoid
|
332
|
-
validates :name, :
|
333
|
-
has_many :paranoid_products, :
|
422
|
+
validates :name, presence: true
|
423
|
+
has_many :paranoid_products, dependent: :destroy
|
334
424
|
end
|
335
425
|
|
336
426
|
class ParanoidDeleteCompany < ActiveRecord::Base
|
337
427
|
acts_as_paranoid
|
338
|
-
validates :name, :
|
339
|
-
has_many :paranoid_products, :
|
428
|
+
validates :name, presence: true
|
429
|
+
has_many :paranoid_products, dependent: :delete_all
|
340
430
|
end
|
341
431
|
|
342
432
|
class ParanoidProduct < ActiveRecord::Base
|
@@ -352,22 +442,21 @@ class SuperParanoid < ActiveRecord::Base
|
|
352
442
|
end
|
353
443
|
|
354
444
|
class HasManyInheritedSuperParanoidz < ActiveRecord::Base
|
355
|
-
has_many :super_paranoidz, :
|
445
|
+
has_many :super_paranoidz, class_name: "InheritedParanoid", dependent: :destroy
|
356
446
|
end
|
357
447
|
|
358
448
|
class InheritedParanoid < SuperParanoid
|
359
449
|
acts_as_paranoid
|
360
450
|
end
|
361
451
|
|
362
|
-
|
363
452
|
class ParanoidManyManyParentLeft < ActiveRecord::Base
|
364
453
|
has_many :paranoid_many_many_children
|
365
|
-
has_many :paranoid_many_many_parent_rights, :
|
454
|
+
has_many :paranoid_many_many_parent_rights, through: :paranoid_many_many_children
|
366
455
|
end
|
367
456
|
|
368
457
|
class ParanoidManyManyParentRight < ActiveRecord::Base
|
369
458
|
has_many :paranoid_many_many_children
|
370
|
-
has_many :paranoid_many_many_parent_lefts, :
|
459
|
+
has_many :paranoid_many_many_parent_lefts, through: :paranoid_many_many_children
|
371
460
|
end
|
372
461
|
|
373
462
|
class ParanoidManyManyChild < ActiveRecord::Base
|
@@ -378,21 +467,21 @@ end
|
|
378
467
|
|
379
468
|
class ParanoidWithScopedValidation < ActiveRecord::Base
|
380
469
|
acts_as_paranoid
|
381
|
-
validates_uniqueness_of :name, :
|
470
|
+
validates_uniqueness_of :name, scope: :category
|
382
471
|
end
|
383
472
|
|
384
473
|
class ParanoidBelongsToPolymorphic < ActiveRecord::Base
|
385
474
|
acts_as_paranoid
|
386
|
-
belongs_to :parent, :
|
475
|
+
belongs_to :parent, polymorphic: true, with_deleted: true
|
387
476
|
end
|
388
477
|
|
389
478
|
class NotParanoidHasManyAsParent < ActiveRecord::Base
|
390
|
-
has_many :paranoid_belongs_to_polymorphics, :
|
479
|
+
has_many :paranoid_belongs_to_polymorphics, as: :parent, dependent: :destroy
|
391
480
|
end
|
392
481
|
|
393
482
|
class ParanoidHasManyAsParent < ActiveRecord::Base
|
394
483
|
acts_as_paranoid
|
395
|
-
has_many :paranoid_belongs_to_polymorphics, :
|
484
|
+
has_many :paranoid_belongs_to_polymorphics, as: :parent, dependent: :destroy
|
396
485
|
end
|
397
486
|
|
398
487
|
class ParanoidBaseTest < ActiveSupport::TestCase
|
@@ -400,13 +489,13 @@ class ParanoidBaseTest < ActiveSupport::TestCase
|
|
400
489
|
setup_db
|
401
490
|
|
402
491
|
["paranoid", "really paranoid", "extremely paranoid"].each do |name|
|
403
|
-
ParanoidTime.create! :
|
404
|
-
ParanoidBoolean.create! :
|
492
|
+
ParanoidTime.create! name: name
|
493
|
+
ParanoidBoolean.create! name: name
|
405
494
|
end
|
406
495
|
|
407
|
-
ParanoidString.create! :
|
408
|
-
NotParanoid.create! :
|
409
|
-
ParanoidWithCallback.create! :
|
496
|
+
ParanoidString.create! name: "strings can be paranoid"
|
497
|
+
NotParanoid.create! name: "no paranoid goals"
|
498
|
+
ParanoidWithCallback.create! name: "paranoid with callbacks"
|
410
499
|
end
|
411
500
|
|
412
501
|
def teardown
|
@@ -440,9 +529,9 @@ class ParanoidForest < ActiveRecord::Base
|
|
440
529
|
|
441
530
|
ActiveRecord::Base.logger = Logger.new(StringIO.new)
|
442
531
|
|
443
|
-
scope :rainforest,
|
532
|
+
scope :rainforest, -> { where(rainforest: true) }
|
444
533
|
|
445
|
-
has_many :paranoid_trees, :
|
534
|
+
has_many :paranoid_trees, dependent: :destroy
|
446
535
|
end
|
447
536
|
|
448
537
|
class ParanoidTree < ActiveRecord::Base
|
@@ -453,7 +542,7 @@ end
|
|
453
542
|
|
454
543
|
class ParanoidPolygon < ActiveRecord::Base
|
455
544
|
acts_as_paranoid
|
456
|
-
default_scope { where(
|
545
|
+
default_scope { where("sides = ?", 3) }
|
457
546
|
end
|
458
547
|
|
459
548
|
class ParanoidAndroid < ActiveRecord::Base
|
@@ -463,10 +552,14 @@ end
|
|
463
552
|
class ParanoidSection < ActiveRecord::Base
|
464
553
|
acts_as_paranoid
|
465
554
|
belongs_to :paranoid_time
|
466
|
-
belongs_to :paranoid_thing, :
|
555
|
+
belongs_to :paranoid_thing, polymorphic: true, dependent: :destroy
|
467
556
|
end
|
468
557
|
|
469
558
|
class ParanoidBooleanNotNullable < ActiveRecord::Base
|
470
|
-
acts_as_paranoid column:
|
559
|
+
acts_as_paranoid column: "deleted", column_type: "boolean", allow_nulls: false
|
471
560
|
end
|
472
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
|