acts_as_paranoid 0.7.0 → 0.8.0
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 +4 -4
- data/CHANGELOG.md +70 -0
- data/CONTRIBUTING.md +58 -0
- data/README.md +5 -5
- data/lib/acts_as_paranoid/core.rb +80 -55
- data/lib/acts_as_paranoid/relation.rb +1 -1
- data/lib/acts_as_paranoid/version.rb +1 -1
- data/lib/acts_as_paranoid.rb +4 -4
- metadata +71 -73
- data/test/test_associations.rb +0 -358
- data/test/test_core.rb +0 -633
- data/test/test_default_scopes.rb +0 -53
- data/test/test_helper.rb +0 -541
- data/test/test_inheritance.rb +0 -16
- data/test/test_relations.rb +0 -125
- data/test/test_validations.rb +0 -45
data/test/test_helper.rb
DELETED
@@ -1,541 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require "bundler"
|
4
|
-
begin
|
5
|
-
Bundler.load
|
6
|
-
rescue Bundler::BundlerError => e
|
7
|
-
warn e.message
|
8
|
-
warn "Run `bundle install` to install missing gems"
|
9
|
-
exit e.status_code
|
10
|
-
end
|
11
|
-
|
12
|
-
require "simplecov"
|
13
|
-
SimpleCov.start do
|
14
|
-
enable_coverage :branch
|
15
|
-
end
|
16
|
-
|
17
|
-
require "acts_as_paranoid"
|
18
|
-
require "minitest/autorun"
|
19
|
-
|
20
|
-
# Silence deprecation halfway through the test
|
21
|
-
I18n.enforce_available_locales = true
|
22
|
-
|
23
|
-
ActiveRecord::Base.establish_connection(adapter: "sqlite3", database: ":memory:")
|
24
|
-
ActiveRecord::Schema.verbose = false
|
25
|
-
|
26
|
-
# rubocop:disable Metrics/AbcSize
|
27
|
-
# rubocop:disable Metrics/MethodLength
|
28
|
-
def setup_db
|
29
|
-
ActiveRecord::Schema.define(version: 1) do # rubocop:disable Metrics/BlockLength
|
30
|
-
create_table :paranoid_times do |t|
|
31
|
-
t.string :name
|
32
|
-
t.datetime :deleted_at
|
33
|
-
t.integer :paranoid_belongs_dependant_id
|
34
|
-
t.integer :not_paranoid_id
|
35
|
-
|
36
|
-
timestamps t
|
37
|
-
end
|
38
|
-
|
39
|
-
create_table :paranoid_booleans do |t|
|
40
|
-
t.string :name
|
41
|
-
t.boolean :is_deleted
|
42
|
-
t.integer :paranoid_time_id
|
43
|
-
t.integer :paranoid_with_counter_caches_count
|
44
|
-
t.integer :custom_counter_cache
|
45
|
-
timestamps t
|
46
|
-
end
|
47
|
-
|
48
|
-
create_table :paranoid_strings do |t|
|
49
|
-
t.string :name
|
50
|
-
t.string :deleted
|
51
|
-
end
|
52
|
-
|
53
|
-
create_table :not_paranoids do |t|
|
54
|
-
t.string :name
|
55
|
-
t.integer :paranoid_time_id
|
56
|
-
|
57
|
-
timestamps t
|
58
|
-
end
|
59
|
-
|
60
|
-
create_table :has_one_not_paranoids do |t|
|
61
|
-
t.string :name
|
62
|
-
t.integer :paranoid_time_id
|
63
|
-
|
64
|
-
timestamps t
|
65
|
-
end
|
66
|
-
|
67
|
-
create_table :paranoid_has_many_dependants do |t|
|
68
|
-
t.string :name
|
69
|
-
t.datetime :deleted_at
|
70
|
-
t.integer :paranoid_time_id
|
71
|
-
t.string :paranoid_time_polymorphic_with_deleted_type
|
72
|
-
t.integer :paranoid_belongs_dependant_id
|
73
|
-
|
74
|
-
timestamps t
|
75
|
-
end
|
76
|
-
|
77
|
-
create_table :paranoid_belongs_dependants do |t|
|
78
|
-
t.string :name
|
79
|
-
t.datetime :deleted_at
|
80
|
-
|
81
|
-
timestamps t
|
82
|
-
end
|
83
|
-
|
84
|
-
create_table :paranoid_has_one_dependants do |t|
|
85
|
-
t.string :name
|
86
|
-
t.datetime :deleted_at
|
87
|
-
t.integer :paranoid_boolean_id
|
88
|
-
|
89
|
-
timestamps t
|
90
|
-
end
|
91
|
-
|
92
|
-
create_table :paranoid_with_callbacks do |t|
|
93
|
-
t.string :name
|
94
|
-
t.datetime :deleted_at
|
95
|
-
|
96
|
-
timestamps t
|
97
|
-
end
|
98
|
-
|
99
|
-
create_table :paranoid_destroy_companies do |t|
|
100
|
-
t.string :name
|
101
|
-
t.datetime :deleted_at
|
102
|
-
|
103
|
-
timestamps t
|
104
|
-
end
|
105
|
-
|
106
|
-
create_table :paranoid_delete_companies do |t|
|
107
|
-
t.string :name
|
108
|
-
t.datetime :deleted_at
|
109
|
-
|
110
|
-
timestamps t
|
111
|
-
end
|
112
|
-
|
113
|
-
create_table :paranoid_products do |t|
|
114
|
-
t.integer :paranoid_destroy_company_id
|
115
|
-
t.integer :paranoid_delete_company_id
|
116
|
-
t.string :name
|
117
|
-
t.datetime :deleted_at
|
118
|
-
|
119
|
-
timestamps t
|
120
|
-
end
|
121
|
-
|
122
|
-
create_table :super_paranoids do |t|
|
123
|
-
t.string :type
|
124
|
-
t.references :has_many_inherited_super_paranoidz,
|
125
|
-
index: { name: "index__sp_id_on_has_many_isp" }
|
126
|
-
t.datetime :deleted_at
|
127
|
-
|
128
|
-
timestamps t
|
129
|
-
end
|
130
|
-
|
131
|
-
create_table :has_many_inherited_super_paranoidzs do |t|
|
132
|
-
t.references :super_paranoidz, index: { name: "index_has_many_isp_on_sp_id" }
|
133
|
-
t.datetime :deleted_at
|
134
|
-
|
135
|
-
timestamps t
|
136
|
-
end
|
137
|
-
|
138
|
-
create_table :paranoid_many_many_parent_lefts do |t|
|
139
|
-
t.string :name
|
140
|
-
timestamps t
|
141
|
-
end
|
142
|
-
|
143
|
-
create_table :paranoid_many_many_parent_rights do |t|
|
144
|
-
t.string :name
|
145
|
-
timestamps t
|
146
|
-
end
|
147
|
-
|
148
|
-
create_table :paranoid_many_many_children do |t|
|
149
|
-
t.integer :paranoid_many_many_parent_left_id
|
150
|
-
t.integer :paranoid_many_many_parent_right_id
|
151
|
-
t.datetime :deleted_at
|
152
|
-
timestamps t
|
153
|
-
end
|
154
|
-
|
155
|
-
create_table :paranoid_with_scoped_validations do |t|
|
156
|
-
t.string :name
|
157
|
-
t.string :category
|
158
|
-
t.datetime :deleted_at
|
159
|
-
timestamps t
|
160
|
-
end
|
161
|
-
|
162
|
-
create_table :paranoid_forests do |t|
|
163
|
-
t.string :name
|
164
|
-
t.boolean :rainforest
|
165
|
-
t.datetime :deleted_at
|
166
|
-
|
167
|
-
timestamps t
|
168
|
-
end
|
169
|
-
|
170
|
-
create_table :paranoid_trees do |t|
|
171
|
-
t.integer :paranoid_forest_id
|
172
|
-
t.string :name
|
173
|
-
t.datetime :deleted_at
|
174
|
-
|
175
|
-
timestamps t
|
176
|
-
end
|
177
|
-
|
178
|
-
create_table :paranoid_polygons do |t|
|
179
|
-
t.integer :sides
|
180
|
-
t.datetime :deleted_at
|
181
|
-
|
182
|
-
timestamps t
|
183
|
-
end
|
184
|
-
|
185
|
-
create_table :paranoid_androids do |t|
|
186
|
-
t.datetime :deleted_at
|
187
|
-
end
|
188
|
-
|
189
|
-
create_table :paranoid_sections do |t|
|
190
|
-
t.integer :paranoid_time_id
|
191
|
-
t.integer :paranoid_thing_id
|
192
|
-
t.string :paranoid_thing_type
|
193
|
-
t.datetime :deleted_at
|
194
|
-
end
|
195
|
-
|
196
|
-
create_table :paranoid_boolean_not_nullables do |t|
|
197
|
-
t.string :name
|
198
|
-
t.boolean :deleted, :boolean, null: false, default: false
|
199
|
-
end
|
200
|
-
|
201
|
-
create_table :paranoid_belongs_to_polymorphics do |t|
|
202
|
-
t.string :name
|
203
|
-
t.string :parent_type
|
204
|
-
t.integer :parent_id
|
205
|
-
t.datetime :deleted_at
|
206
|
-
|
207
|
-
timestamps t
|
208
|
-
end
|
209
|
-
|
210
|
-
create_table :not_paranoid_has_many_as_parents do |t|
|
211
|
-
t.string :name
|
212
|
-
|
213
|
-
timestamps t
|
214
|
-
end
|
215
|
-
|
216
|
-
create_table :paranoid_has_many_as_parents do |t|
|
217
|
-
t.string :name
|
218
|
-
t.datetime :deleted_at
|
219
|
-
|
220
|
-
timestamps t
|
221
|
-
end
|
222
|
-
|
223
|
-
create_table :paranoid_no_double_tap_destroys_fullies do |t|
|
224
|
-
t.datetime :deleted_at
|
225
|
-
end
|
226
|
-
|
227
|
-
create_table :paranoid_with_counter_caches do |t|
|
228
|
-
t.string :name
|
229
|
-
t.datetime :deleted_at
|
230
|
-
t.integer :paranoid_boolean_id
|
231
|
-
|
232
|
-
timestamps t
|
233
|
-
end
|
234
|
-
end
|
235
|
-
end
|
236
|
-
# rubocop:enable Metrics/AbcSize
|
237
|
-
# rubocop:enable Metrics/MethodLength
|
238
|
-
|
239
|
-
def timestamps(table)
|
240
|
-
table.column :created_at, :timestamp, null: false
|
241
|
-
table.column :updated_at, :timestamp, null: false
|
242
|
-
end
|
243
|
-
|
244
|
-
def teardown_db
|
245
|
-
ActiveRecord::Base.connection.data_sources.each do |table|
|
246
|
-
ActiveRecord::Base.connection.drop_table(table)
|
247
|
-
end
|
248
|
-
end
|
249
|
-
|
250
|
-
class ParanoidTime < ActiveRecord::Base
|
251
|
-
acts_as_paranoid
|
252
|
-
|
253
|
-
validates_uniqueness_of :name
|
254
|
-
|
255
|
-
has_many :paranoid_has_many_dependants, dependent: :destroy
|
256
|
-
has_many :paranoid_booleans, dependent: :destroy
|
257
|
-
has_many :not_paranoids, dependent: :delete_all
|
258
|
-
has_many :paranoid_sections, dependent: :destroy
|
259
|
-
|
260
|
-
has_one :has_one_not_paranoid, dependent: :destroy
|
261
|
-
|
262
|
-
belongs_to :not_paranoid, dependent: :destroy
|
263
|
-
end
|
264
|
-
|
265
|
-
class ParanoidBoolean < ActiveRecord::Base
|
266
|
-
acts_as_paranoid column_type: "boolean", column: "is_deleted"
|
267
|
-
validates_as_paranoid
|
268
|
-
validates_uniqueness_of_without_deleted :name
|
269
|
-
|
270
|
-
belongs_to :paranoid_time
|
271
|
-
has_one :paranoid_has_one_dependant, dependent: :destroy
|
272
|
-
has_many :paranoid_with_counter_cache, dependent: :destroy
|
273
|
-
has_many :paranoid_with_custom_counter_cache, dependent: :destroy
|
274
|
-
end
|
275
|
-
|
276
|
-
class ParanoidString < ActiveRecord::Base
|
277
|
-
acts_as_paranoid column_type: "string", column: "deleted", deleted_value: "dead"
|
278
|
-
end
|
279
|
-
|
280
|
-
class NotParanoid < ActiveRecord::Base
|
281
|
-
end
|
282
|
-
|
283
|
-
class ParanoidNoDoubleTapDestroysFully < ActiveRecord::Base
|
284
|
-
acts_as_paranoid double_tap_destroys_fully: false
|
285
|
-
end
|
286
|
-
|
287
|
-
class HasOneNotParanoid < ActiveRecord::Base
|
288
|
-
belongs_to :paranoid_time, with_deleted: true
|
289
|
-
end
|
290
|
-
|
291
|
-
class DoubleHasOneNotParanoid < HasOneNotParanoid
|
292
|
-
belongs_to :paranoid_time, with_deleted: true
|
293
|
-
begin
|
294
|
-
verbose = $VERBOSE
|
295
|
-
$VERBOSE = false
|
296
|
-
belongs_to :paranoid_time, with_deleted: true
|
297
|
-
ensure
|
298
|
-
$VERBOSE = verbose
|
299
|
-
end
|
300
|
-
end
|
301
|
-
|
302
|
-
class ParanoidWithCounterCache < ActiveRecord::Base
|
303
|
-
acts_as_paranoid
|
304
|
-
belongs_to :paranoid_boolean, counter_cache: true
|
305
|
-
end
|
306
|
-
|
307
|
-
class ParanoidWithCustomCounterCache < ActiveRecord::Base
|
308
|
-
self.table_name = "paranoid_with_counter_caches"
|
309
|
-
|
310
|
-
acts_as_paranoid
|
311
|
-
belongs_to :paranoid_boolean, counter_cache: :custom_counter_cache
|
312
|
-
end
|
313
|
-
|
314
|
-
class ParanoidWithCounterCacheOnOptionalBelognsTo < ActiveRecord::Base
|
315
|
-
self.table_name = "paranoid_with_counter_caches"
|
316
|
-
|
317
|
-
acts_as_paranoid
|
318
|
-
if ActiveRecord::VERSION::MAJOR < 5
|
319
|
-
belongs_to :paranoid_boolean, counter_cache: true, required: false
|
320
|
-
else
|
321
|
-
belongs_to :paranoid_boolean, counter_cache: true, optional: true
|
322
|
-
end
|
323
|
-
end
|
324
|
-
|
325
|
-
class ParanoidHasManyDependant < ActiveRecord::Base
|
326
|
-
acts_as_paranoid
|
327
|
-
belongs_to :paranoid_time
|
328
|
-
belongs_to :paranoid_time_with_scope,
|
329
|
-
-> { where(name: "hello").includes(:not_paranoid) },
|
330
|
-
class_name: "ParanoidTime", foreign_key: :paranoid_time_id
|
331
|
-
belongs_to :paranoid_time_with_deleted, class_name: "ParanoidTime",
|
332
|
-
foreign_key: :paranoid_time_id, with_deleted: true
|
333
|
-
belongs_to :paranoid_time_with_scope_with_deleted,
|
334
|
-
-> { where(name: "hello").includes(:not_paranoid) },
|
335
|
-
class_name: "ParanoidTime", foreign_key: :paranoid_time_id, with_deleted: true
|
336
|
-
belongs_to :paranoid_time_polymorphic_with_deleted, class_name: "ParanoidTime",
|
337
|
-
foreign_key: :paranoid_time_id,
|
338
|
-
polymorphic: true, with_deleted: true
|
339
|
-
|
340
|
-
belongs_to :paranoid_belongs_dependant, dependent: :destroy
|
341
|
-
end
|
342
|
-
|
343
|
-
class ParanoidBelongsDependant < ActiveRecord::Base
|
344
|
-
acts_as_paranoid
|
345
|
-
|
346
|
-
has_many :paranoid_has_many_dependants
|
347
|
-
end
|
348
|
-
|
349
|
-
class ParanoidHasOneDependant < ActiveRecord::Base
|
350
|
-
acts_as_paranoid
|
351
|
-
|
352
|
-
belongs_to :paranoid_boolean
|
353
|
-
end
|
354
|
-
|
355
|
-
class ParanoidWithCallback < ActiveRecord::Base
|
356
|
-
acts_as_paranoid
|
357
|
-
|
358
|
-
attr_accessor :called_before_destroy, :called_after_destroy,
|
359
|
-
:called_after_commit_on_destroy, :called_before_recover,
|
360
|
-
:called_after_recover
|
361
|
-
|
362
|
-
before_destroy :call_me_before_destroy
|
363
|
-
after_destroy :call_me_after_destroy
|
364
|
-
|
365
|
-
after_commit :call_me_after_commit_on_destroy, on: :destroy
|
366
|
-
|
367
|
-
before_recover :call_me_before_recover
|
368
|
-
after_recover :call_me_after_recover
|
369
|
-
|
370
|
-
def initialize(*attrs)
|
371
|
-
@called_before_destroy = @called_after_destroy = @called_after_commit_on_destroy = false
|
372
|
-
super(*attrs)
|
373
|
-
end
|
374
|
-
|
375
|
-
def call_me_before_destroy
|
376
|
-
@called_before_destroy = true
|
377
|
-
end
|
378
|
-
|
379
|
-
def call_me_after_destroy
|
380
|
-
@called_after_destroy = true
|
381
|
-
end
|
382
|
-
|
383
|
-
def call_me_after_commit_on_destroy
|
384
|
-
@called_after_commit_on_destroy = true
|
385
|
-
end
|
386
|
-
|
387
|
-
def call_me_before_recover
|
388
|
-
@called_before_recover = true
|
389
|
-
end
|
390
|
-
|
391
|
-
def call_me_after_recover
|
392
|
-
@called_after_recover = true
|
393
|
-
end
|
394
|
-
end
|
395
|
-
|
396
|
-
class ParanoidDestroyCompany < ActiveRecord::Base
|
397
|
-
acts_as_paranoid
|
398
|
-
validates :name, presence: true
|
399
|
-
has_many :paranoid_products, dependent: :destroy
|
400
|
-
end
|
401
|
-
|
402
|
-
class ParanoidDeleteCompany < ActiveRecord::Base
|
403
|
-
acts_as_paranoid
|
404
|
-
validates :name, presence: true
|
405
|
-
has_many :paranoid_products, dependent: :delete_all
|
406
|
-
end
|
407
|
-
|
408
|
-
class ParanoidProduct < ActiveRecord::Base
|
409
|
-
acts_as_paranoid
|
410
|
-
belongs_to :paranoid_destroy_company
|
411
|
-
belongs_to :paranoid_delete_company
|
412
|
-
validates_presence_of :name
|
413
|
-
end
|
414
|
-
|
415
|
-
class SuperParanoid < ActiveRecord::Base
|
416
|
-
acts_as_paranoid
|
417
|
-
belongs_to :has_many_inherited_super_paranoidz
|
418
|
-
end
|
419
|
-
|
420
|
-
class HasManyInheritedSuperParanoidz < ActiveRecord::Base
|
421
|
-
has_many :super_paranoidz, class_name: "InheritedParanoid", dependent: :destroy
|
422
|
-
end
|
423
|
-
|
424
|
-
class InheritedParanoid < SuperParanoid
|
425
|
-
acts_as_paranoid
|
426
|
-
end
|
427
|
-
|
428
|
-
class ParanoidManyManyParentLeft < ActiveRecord::Base
|
429
|
-
has_many :paranoid_many_many_children
|
430
|
-
has_many :paranoid_many_many_parent_rights, through: :paranoid_many_many_children
|
431
|
-
end
|
432
|
-
|
433
|
-
class ParanoidManyManyParentRight < ActiveRecord::Base
|
434
|
-
has_many :paranoid_many_many_children
|
435
|
-
has_many :paranoid_many_many_parent_lefts, through: :paranoid_many_many_children
|
436
|
-
end
|
437
|
-
|
438
|
-
class ParanoidManyManyChild < ActiveRecord::Base
|
439
|
-
acts_as_paranoid
|
440
|
-
belongs_to :paranoid_many_many_parent_left
|
441
|
-
belongs_to :paranoid_many_many_parent_right
|
442
|
-
end
|
443
|
-
|
444
|
-
class ParanoidWithScopedValidation < ActiveRecord::Base
|
445
|
-
acts_as_paranoid
|
446
|
-
validates_uniqueness_of :name, scope: :category
|
447
|
-
end
|
448
|
-
|
449
|
-
class ParanoidBelongsToPolymorphic < ActiveRecord::Base
|
450
|
-
acts_as_paranoid
|
451
|
-
belongs_to :parent, polymorphic: true, with_deleted: true
|
452
|
-
end
|
453
|
-
|
454
|
-
class NotParanoidHasManyAsParent < ActiveRecord::Base
|
455
|
-
has_many :paranoid_belongs_to_polymorphics, as: :parent, dependent: :destroy
|
456
|
-
end
|
457
|
-
|
458
|
-
class ParanoidHasManyAsParent < ActiveRecord::Base
|
459
|
-
acts_as_paranoid
|
460
|
-
has_many :paranoid_belongs_to_polymorphics, as: :parent, dependent: :destroy
|
461
|
-
end
|
462
|
-
|
463
|
-
class ParanoidBaseTest < ActiveSupport::TestCase
|
464
|
-
def setup
|
465
|
-
setup_db
|
466
|
-
|
467
|
-
["paranoid", "really paranoid", "extremely paranoid"].each do |name|
|
468
|
-
ParanoidTime.create! name: name
|
469
|
-
ParanoidBoolean.create! name: name
|
470
|
-
end
|
471
|
-
|
472
|
-
ParanoidString.create! name: "strings can be paranoid"
|
473
|
-
NotParanoid.create! name: "no paranoid goals"
|
474
|
-
ParanoidWithCallback.create! name: "paranoid with callbacks"
|
475
|
-
end
|
476
|
-
|
477
|
-
def teardown
|
478
|
-
teardown_db
|
479
|
-
end
|
480
|
-
|
481
|
-
def assert_empty(collection)
|
482
|
-
assert(collection.respond_to?(:empty?) && collection.empty?)
|
483
|
-
end
|
484
|
-
|
485
|
-
def assert_paranoid_deletion(model)
|
486
|
-
row = find_row(model)
|
487
|
-
assert_not_nil row, "#{model.class} entirely deleted"
|
488
|
-
assert_not_nil row["deleted_at"], "Deleted at not set"
|
489
|
-
end
|
490
|
-
|
491
|
-
def assert_non_paranoid_deletion(model)
|
492
|
-
row = find_row(model)
|
493
|
-
assert_nil row, "#{model.class} still exists"
|
494
|
-
end
|
495
|
-
|
496
|
-
def find_row(model)
|
497
|
-
sql = "select deleted_at from #{model.class.table_name} where id = #{model.id}"
|
498
|
-
# puts sql here if you want to debug
|
499
|
-
model.class.connection.select_one(sql)
|
500
|
-
end
|
501
|
-
end
|
502
|
-
|
503
|
-
class ParanoidForest < ActiveRecord::Base
|
504
|
-
acts_as_paranoid
|
505
|
-
|
506
|
-
ActiveRecord::Base.logger = Logger.new(StringIO.new)
|
507
|
-
|
508
|
-
scope :rainforest, -> { where(rainforest: true) }
|
509
|
-
|
510
|
-
has_many :paranoid_trees, dependent: :destroy
|
511
|
-
end
|
512
|
-
|
513
|
-
class ParanoidTree < ActiveRecord::Base
|
514
|
-
acts_as_paranoid
|
515
|
-
belongs_to :paranoid_forest
|
516
|
-
validates_presence_of :name
|
517
|
-
end
|
518
|
-
|
519
|
-
class ParanoidPolygon < ActiveRecord::Base
|
520
|
-
acts_as_paranoid
|
521
|
-
default_scope { where("sides = ?", 3) }
|
522
|
-
end
|
523
|
-
|
524
|
-
class ParanoidAndroid < ActiveRecord::Base
|
525
|
-
acts_as_paranoid
|
526
|
-
end
|
527
|
-
|
528
|
-
class ParanoidSection < ActiveRecord::Base
|
529
|
-
acts_as_paranoid
|
530
|
-
belongs_to :paranoid_time
|
531
|
-
belongs_to :paranoid_thing, polymorphic: true, dependent: :destroy
|
532
|
-
end
|
533
|
-
|
534
|
-
class ParanoidBooleanNotNullable < ActiveRecord::Base
|
535
|
-
acts_as_paranoid column: "deleted", column_type: "boolean", allow_nulls: false
|
536
|
-
end
|
537
|
-
|
538
|
-
class ParanoidWithExplicitTableNameAfterMacro < ActiveRecord::Base
|
539
|
-
acts_as_paranoid
|
540
|
-
self.table_name = "explicit_table"
|
541
|
-
end
|
data/test/test_inheritance.rb
DELETED
@@ -1,16 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require "test_helper"
|
4
|
-
|
5
|
-
class InheritanceTest < ParanoidBaseTest
|
6
|
-
def test_destroy_dependents_with_inheritance
|
7
|
-
has_many_inherited_super_paranoidz = HasManyInheritedSuperParanoidz.new
|
8
|
-
has_many_inherited_super_paranoidz.save
|
9
|
-
has_many_inherited_super_paranoidz.super_paranoidz.create
|
10
|
-
assert_nothing_raised { has_many_inherited_super_paranoidz.destroy }
|
11
|
-
end
|
12
|
-
|
13
|
-
def test_class_instance_variables_are_inherited
|
14
|
-
assert_nothing_raised { InheritedParanoid.paranoid_column }
|
15
|
-
end
|
16
|
-
end
|
data/test/test_relations.rb
DELETED
@@ -1,125 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require "test_helper"
|
4
|
-
|
5
|
-
class RelationsTest < ParanoidBaseTest
|
6
|
-
def setup
|
7
|
-
setup_db
|
8
|
-
|
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
|
12
|
-
|
13
|
-
assert_equal 3, ParanoidForest.count
|
14
|
-
assert_equal 2, ParanoidForest.rainforest.count
|
15
|
-
|
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"
|
20
|
-
|
21
|
-
assert_equal 4, ParanoidTree.count
|
22
|
-
end
|
23
|
-
|
24
|
-
def test_filtering_with_scopes
|
25
|
-
assert_equal 2, ParanoidForest.rainforest.with_deleted.count
|
26
|
-
assert_equal 2, ParanoidForest.with_deleted.rainforest.count
|
27
|
-
|
28
|
-
assert_equal 0, ParanoidForest.rainforest.only_deleted.count
|
29
|
-
assert_equal 0, ParanoidForest.only_deleted.rainforest.count
|
30
|
-
|
31
|
-
ParanoidForest.rainforest.first.destroy
|
32
|
-
assert_equal 1, ParanoidForest.rainforest.count
|
33
|
-
|
34
|
-
assert_equal 2, ParanoidForest.rainforest.with_deleted.count
|
35
|
-
assert_equal 2, ParanoidForest.with_deleted.rainforest.count
|
36
|
-
|
37
|
-
assert_equal 1, ParanoidForest.rainforest.only_deleted.count
|
38
|
-
assert_equal 1, ParanoidForest.only_deleted.rainforest.count
|
39
|
-
end
|
40
|
-
|
41
|
-
def test_associations_filtered_by_with_deleted
|
42
|
-
assert_equal 2, @paranoid_forest_1.paranoid_trees.with_deleted.count
|
43
|
-
assert_equal 2, @paranoid_forest_2.paranoid_trees.with_deleted.count
|
44
|
-
|
45
|
-
@paranoid_forest_1.paranoid_trees.first.destroy
|
46
|
-
assert_equal 1, @paranoid_forest_1.paranoid_trees.count
|
47
|
-
assert_equal 2, @paranoid_forest_1.paranoid_trees.with_deleted.count
|
48
|
-
assert_equal 4, ParanoidTree.with_deleted.count
|
49
|
-
|
50
|
-
@paranoid_forest_2.paranoid_trees.first.destroy
|
51
|
-
assert_equal 1, @paranoid_forest_2.paranoid_trees.count
|
52
|
-
assert_equal 2, @paranoid_forest_2.paranoid_trees.with_deleted.count
|
53
|
-
assert_equal 4, ParanoidTree.with_deleted.count
|
54
|
-
|
55
|
-
@paranoid_forest_1.paranoid_trees.first.destroy
|
56
|
-
assert_equal 0, @paranoid_forest_1.paranoid_trees.count
|
57
|
-
assert_equal 2, @paranoid_forest_1.paranoid_trees.with_deleted.count
|
58
|
-
assert_equal 4, ParanoidTree.with_deleted.count
|
59
|
-
end
|
60
|
-
|
61
|
-
def test_associations_filtered_by_only_deleted
|
62
|
-
assert_equal 0, @paranoid_forest_1.paranoid_trees.only_deleted.count
|
63
|
-
assert_equal 0, @paranoid_forest_2.paranoid_trees.only_deleted.count
|
64
|
-
|
65
|
-
@paranoid_forest_1.paranoid_trees.first.destroy
|
66
|
-
assert_equal 1, @paranoid_forest_1.paranoid_trees.only_deleted.count
|
67
|
-
assert_equal 1, ParanoidTree.only_deleted.count
|
68
|
-
|
69
|
-
@paranoid_forest_2.paranoid_trees.first.destroy
|
70
|
-
assert_equal 1, @paranoid_forest_2.paranoid_trees.only_deleted.count
|
71
|
-
assert_equal 2, ParanoidTree.only_deleted.count
|
72
|
-
|
73
|
-
@paranoid_forest_1.paranoid_trees.first.destroy
|
74
|
-
assert_equal 2, @paranoid_forest_1.paranoid_trees.only_deleted.count
|
75
|
-
assert_equal 3, ParanoidTree.only_deleted.count
|
76
|
-
end
|
77
|
-
|
78
|
-
def test_fake_removal_through_relation
|
79
|
-
# destroy: through a relation.
|
80
|
-
ParanoidForest.rainforest.destroy(@paranoid_forest_3.id)
|
81
|
-
assert_equal 1, ParanoidForest.rainforest.count
|
82
|
-
assert_equal 2, ParanoidForest.rainforest.with_deleted.count
|
83
|
-
assert_equal 1, ParanoidForest.rainforest.only_deleted.count
|
84
|
-
|
85
|
-
# destroy_all: through a relation
|
86
|
-
@paranoid_forest_2.paranoid_trees.order(:id).destroy_all
|
87
|
-
assert_equal 0, @paranoid_forest_2.paranoid_trees.count
|
88
|
-
assert_equal 2, @paranoid_forest_2.paranoid_trees.with_deleted.count
|
89
|
-
end
|
90
|
-
|
91
|
-
def test_real_removal_through_relation_with_destroy_bang
|
92
|
-
# Relation.destroy!: aliased to delete
|
93
|
-
ParanoidForest.rainforest.destroy!(@paranoid_forest_3)
|
94
|
-
assert_equal 1, ParanoidForest.rainforest.count
|
95
|
-
assert_equal 1, ParanoidForest.rainforest.with_deleted.count
|
96
|
-
assert_equal 0, ParanoidForest.rainforest.only_deleted.count
|
97
|
-
end
|
98
|
-
|
99
|
-
def test_two_step_real_removal_through_relation_with_destroy
|
100
|
-
# destroy: two-step through a relation
|
101
|
-
paranoid_tree = @paranoid_forest_1.paranoid_trees.first
|
102
|
-
@paranoid_forest_1.paranoid_trees.order(:id).destroy(paranoid_tree.id)
|
103
|
-
@paranoid_forest_1.paranoid_trees.only_deleted.destroy(paranoid_tree.id)
|
104
|
-
assert_equal 1, @paranoid_forest_1.paranoid_trees.count
|
105
|
-
assert_equal 1, @paranoid_forest_1.paranoid_trees.with_deleted.count
|
106
|
-
assert_equal 0, @paranoid_forest_1.paranoid_trees.only_deleted.count
|
107
|
-
end
|
108
|
-
|
109
|
-
def test_two_step_real_removal_through_relation_with_destroy_all
|
110
|
-
# destroy_all: two-step through a relation
|
111
|
-
@paranoid_forest_1.paranoid_trees.order(:id).destroy_all
|
112
|
-
@paranoid_forest_1.paranoid_trees.only_deleted.destroy_all
|
113
|
-
assert_equal 0, @paranoid_forest_1.paranoid_trees.count
|
114
|
-
assert_equal 0, @paranoid_forest_1.paranoid_trees.with_deleted.count
|
115
|
-
assert_equal 0, @paranoid_forest_1.paranoid_trees.only_deleted.count
|
116
|
-
end
|
117
|
-
|
118
|
-
def test_real_removal_through_relation_with_delete_all_bang
|
119
|
-
# delete_all!: through a relation
|
120
|
-
@paranoid_forest_2.paranoid_trees.order(:id).delete_all!
|
121
|
-
assert_equal 0, @paranoid_forest_2.paranoid_trees.count
|
122
|
-
assert_equal 0, @paranoid_forest_2.paranoid_trees.with_deleted.count
|
123
|
-
assert_equal 0, @paranoid_forest_2.paranoid_trees.only_deleted.count
|
124
|
-
end
|
125
|
-
end
|