acts_as_paranoid 0.6.2 → 0.7.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +126 -10
- data/CONTRIBUTING.md +59 -0
- data/README.md +151 -57
- data/lib/acts_as_paranoid.rb +29 -29
- data/lib/acts_as_paranoid/associations.rb +21 -17
- data/lib/acts_as_paranoid/core.rb +151 -95
- data/lib/acts_as_paranoid/relation.rb +9 -0
- data/lib/acts_as_paranoid/validations.rb +8 -74
- data/lib/acts_as_paranoid/version.rb +3 -1
- data/test/test_associations.rb +118 -46
- data/test/test_core.rb +264 -66
- data/test/test_default_scopes.rb +20 -7
- data/test/test_dependent_recovery.rb +54 -0
- data/test/test_deprecated_behavior.rb +30 -0
- data/test/test_helper.rb +130 -95
- data/test/test_inheritance.rb +3 -1
- data/test/test_relations.rb +98 -16
- data/test/test_table_namespace.rb +40 -0
- data/test/test_validations.rb +27 -7
- metadata +78 -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,18 +1,31 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
3
|
+
require "test_helper"
|
4
|
+
|
5
|
+
class MultipleDefaultScopesTest < ActiveSupport::TestCase
|
4
6
|
def setup
|
5
|
-
|
7
|
+
ActiveRecord::Schema.define(version: 1) do
|
8
|
+
create_table :paranoid_polygons do |t|
|
9
|
+
t.integer :sides
|
10
|
+
t.datetime :deleted_at
|
11
|
+
|
12
|
+
timestamps t
|
13
|
+
end
|
14
|
+
end
|
6
15
|
|
7
|
-
ParanoidPolygon.create! :
|
8
|
-
ParanoidPolygon.create! :
|
9
|
-
ParanoidPolygon.create! :
|
10
|
-
ParanoidPolygon.create! :
|
16
|
+
ParanoidPolygon.create! sides: 3
|
17
|
+
ParanoidPolygon.create! sides: 3
|
18
|
+
ParanoidPolygon.create! sides: 3
|
19
|
+
ParanoidPolygon.create! sides: 8
|
11
20
|
|
12
21
|
assert_equal 3, ParanoidPolygon.count
|
13
22
|
assert_equal 4, ParanoidPolygon.unscoped.count
|
14
23
|
end
|
15
24
|
|
25
|
+
def teardown
|
26
|
+
teardown_db
|
27
|
+
end
|
28
|
+
|
16
29
|
def test_fake_removal_with_multiple_default_scope
|
17
30
|
ParanoidPolygon.first.destroy
|
18
31
|
assert_equal 2, ParanoidPolygon.count
|
@@ -0,0 +1,54 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "test_helper"
|
4
|
+
|
5
|
+
class DependentRecoveryTest < ActiveSupport::TestCase
|
6
|
+
class ParanoidForest < ActiveRecord::Base
|
7
|
+
acts_as_paranoid
|
8
|
+
has_many :paranoid_trees, dependent: :destroy
|
9
|
+
end
|
10
|
+
|
11
|
+
class ParanoidTree < ActiveRecord::Base
|
12
|
+
acts_as_paranoid
|
13
|
+
belongs_to :paranoid_forest, optional: false
|
14
|
+
end
|
15
|
+
|
16
|
+
def setup
|
17
|
+
ActiveRecord::Schema.define(version: 1) do
|
18
|
+
create_table :paranoid_forests do |t|
|
19
|
+
t.string :name
|
20
|
+
t.boolean :rainforest
|
21
|
+
t.datetime :deleted_at
|
22
|
+
|
23
|
+
timestamps t
|
24
|
+
end
|
25
|
+
|
26
|
+
create_table :paranoid_trees do |t|
|
27
|
+
t.integer :paranoid_forest_id
|
28
|
+
t.string :name
|
29
|
+
t.datetime :deleted_at
|
30
|
+
|
31
|
+
timestamps t
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
def teardown
|
37
|
+
teardown_db
|
38
|
+
end
|
39
|
+
|
40
|
+
def test_recover_dependent_records_with_required_belongs_to
|
41
|
+
forest = ParanoidForest.create! name: "forest"
|
42
|
+
|
43
|
+
tree = ParanoidTree.new name: "tree"
|
44
|
+
refute tree.valid?
|
45
|
+
tree.paranoid_forest = forest
|
46
|
+
assert tree.valid?
|
47
|
+
tree.save!
|
48
|
+
|
49
|
+
forest.destroy
|
50
|
+
forest.recover
|
51
|
+
|
52
|
+
assert_equal 1, ParanoidTree.count
|
53
|
+
end
|
54
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "test_helper"
|
4
|
+
|
5
|
+
class DeprecatedBehaviorTest < ActiveSupport::TestCase
|
6
|
+
class StringlyParanoid < ActiveRecord::Base
|
7
|
+
acts_as_paranoid column_type: "string", column: "foo", recovery_value: "alive"
|
8
|
+
end
|
9
|
+
|
10
|
+
def setup
|
11
|
+
ActiveRecord::Schema.define(version: 1) do
|
12
|
+
create_table :stringly_paranoids do |t|
|
13
|
+
t.string :foo
|
14
|
+
|
15
|
+
timestamps t
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def teardown
|
21
|
+
teardown_db
|
22
|
+
end
|
23
|
+
|
24
|
+
def test_recovery_value
|
25
|
+
record = StringlyParanoid.create!
|
26
|
+
record.destroy
|
27
|
+
record.recover
|
28
|
+
assert_equal "alive", record.paranoid_value
|
29
|
+
end
|
30
|
+
end
|
data/test/test_helper.rb
CHANGED
@@ -1,23 +1,45 @@
|
|
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
|
+
log_dir = File.expand_path("../log/", __dir__)
|
36
|
+
FileUtils.mkdir_p log_dir
|
37
|
+
file_path = File.join(log_dir, "test.log")
|
38
|
+
ActiveRecord::Base.logger = Logger.new(file_path)
|
39
|
+
|
40
|
+
# rubocop:disable Metrics/AbcSize
|
19
41
|
def setup_db
|
20
|
-
ActiveRecord::Schema.define(:
|
42
|
+
ActiveRecord::Schema.define(version: 1) do # rubocop:disable Metrics/BlockLength
|
21
43
|
create_table :paranoid_times do |t|
|
22
44
|
t.string :name
|
23
45
|
t.datetime :deleted_at
|
@@ -32,6 +54,7 @@ def setup_db
|
|
32
54
|
t.boolean :is_deleted
|
33
55
|
t.integer :paranoid_time_id
|
34
56
|
t.integer :paranoid_with_counter_caches_count
|
57
|
+
t.integer :paranoid_with_touch_and_counter_caches_count
|
35
58
|
t.integer :custom_counter_cache
|
36
59
|
timestamps t
|
37
60
|
end
|
@@ -112,14 +135,15 @@ def setup_db
|
|
112
135
|
|
113
136
|
create_table :super_paranoids do |t|
|
114
137
|
t.string :type
|
115
|
-
t.references :has_many_inherited_super_paranoidz,
|
138
|
+
t.references :has_many_inherited_super_paranoidz,
|
139
|
+
index: { name: "index__sp_id_on_has_many_isp" }
|
116
140
|
t.datetime :deleted_at
|
117
141
|
|
118
142
|
timestamps t
|
119
143
|
end
|
120
144
|
|
121
145
|
create_table :has_many_inherited_super_paranoidzs do |t|
|
122
|
-
t.references :super_paranoidz, index: { name:
|
146
|
+
t.references :super_paranoidz, index: { name: "index_has_many_isp_on_sp_id" }
|
123
147
|
t.datetime :deleted_at
|
124
148
|
|
125
149
|
timestamps t
|
@@ -149,24 +173,8 @@ def setup_db
|
|
149
173
|
timestamps t
|
150
174
|
end
|
151
175
|
|
152
|
-
create_table :paranoid_forests do |t|
|
153
|
-
t.string :name
|
154
|
-
t.boolean :rainforest
|
155
|
-
t.datetime :deleted_at
|
156
|
-
|
157
|
-
timestamps t
|
158
|
-
end
|
159
|
-
|
160
|
-
create_table :paranoid_trees do |t|
|
161
|
-
t.integer :paranoid_forest_id
|
162
|
-
t.string :name
|
163
|
-
t.datetime :deleted_at
|
164
|
-
|
165
|
-
timestamps t
|
166
|
-
end
|
167
|
-
|
168
176
|
create_table :paranoid_polygons do |t|
|
169
|
-
t.integer
|
177
|
+
t.integer :sides
|
170
178
|
t.datetime :deleted_at
|
171
179
|
|
172
180
|
timestamps t
|
@@ -185,7 +193,7 @@ def setup_db
|
|
185
193
|
|
186
194
|
create_table :paranoid_boolean_not_nullables do |t|
|
187
195
|
t.string :name
|
188
|
-
t.boolean :deleted, :boolean, :
|
196
|
+
t.boolean :deleted, :boolean, null: false, default: false
|
189
197
|
end
|
190
198
|
|
191
199
|
create_table :paranoid_belongs_to_polymorphics do |t|
|
@@ -221,21 +229,27 @@ def setup_db
|
|
221
229
|
|
222
230
|
timestamps t
|
223
231
|
end
|
232
|
+
|
233
|
+
create_table :paranoid_with_serialized_columns do |t|
|
234
|
+
t.string :name
|
235
|
+
t.datetime :deleted_at
|
236
|
+
t.string :colors
|
237
|
+
|
238
|
+
timestamps t
|
239
|
+
end
|
224
240
|
end
|
225
241
|
end
|
226
242
|
|
243
|
+
# rubocop:enable Metrics/AbcSize
|
227
244
|
def timestamps(table)
|
228
|
-
table.column :created_at
|
229
|
-
table.column :updated_at
|
245
|
+
table.column :created_at, :timestamp, null: false
|
246
|
+
table.column :updated_at, :timestamp, null: false
|
230
247
|
end
|
231
248
|
|
232
249
|
def teardown_db
|
233
|
-
|
234
|
-
ActiveRecord::Base.connection.
|
235
|
-
else
|
236
|
-
ActiveRecord::Base.connection.data_sources
|
250
|
+
ActiveRecord::Base.connection.data_sources.each do |table|
|
251
|
+
ActiveRecord::Base.connection.drop_table(table)
|
237
252
|
end
|
238
|
-
tables.each { |table| ActiveRecord::Base.connection.drop_table(table) }
|
239
253
|
end
|
240
254
|
|
241
255
|
class ParanoidTime < ActiveRecord::Base
|
@@ -243,50 +257,59 @@ class ParanoidTime < ActiveRecord::Base
|
|
243
257
|
|
244
258
|
validates_uniqueness_of :name
|
245
259
|
|
246
|
-
has_many :paranoid_has_many_dependants, :
|
247
|
-
has_many :paranoid_booleans, :
|
248
|
-
has_many :not_paranoids, :
|
249
|
-
has_many :paranoid_sections, :
|
260
|
+
has_many :paranoid_has_many_dependants, dependent: :destroy
|
261
|
+
has_many :paranoid_booleans, dependent: :destroy
|
262
|
+
has_many :not_paranoids, dependent: :delete_all
|
263
|
+
has_many :paranoid_sections, dependent: :destroy
|
250
264
|
|
251
|
-
has_one :has_one_not_paranoid, :
|
265
|
+
has_one :has_one_not_paranoid, dependent: :destroy
|
252
266
|
|
253
|
-
belongs_to :not_paranoid, :
|
267
|
+
belongs_to :not_paranoid, dependent: :destroy
|
254
268
|
end
|
255
269
|
|
256
270
|
class ParanoidBoolean < ActiveRecord::Base
|
257
|
-
acts_as_paranoid :
|
271
|
+
acts_as_paranoid column_type: "boolean", column: "is_deleted"
|
258
272
|
validates_as_paranoid
|
259
273
|
validates_uniqueness_of_without_deleted :name
|
260
274
|
|
261
275
|
belongs_to :paranoid_time
|
262
|
-
has_one :paranoid_has_one_dependant, :
|
263
|
-
has_many :paranoid_with_counter_cache, :
|
264
|
-
has_many :paranoid_with_custom_counter_cache, :
|
276
|
+
has_one :paranoid_has_one_dependant, dependent: :destroy
|
277
|
+
has_many :paranoid_with_counter_cache, dependent: :destroy
|
278
|
+
has_many :paranoid_with_custom_counter_cache, dependent: :destroy
|
279
|
+
has_many :paranoid_with_touch_and_counter_cache, dependent: :destroy
|
280
|
+
has_many :paranoid_with_touch, dependent: :destroy
|
265
281
|
end
|
266
282
|
|
267
283
|
class ParanoidString < ActiveRecord::Base
|
268
|
-
acts_as_paranoid :
|
284
|
+
acts_as_paranoid column_type: "string", column: "deleted", deleted_value: "dead"
|
269
285
|
end
|
270
286
|
|
271
287
|
class NotParanoid < ActiveRecord::Base
|
288
|
+
has_many :paranoid_times
|
272
289
|
end
|
273
290
|
|
274
291
|
class ParanoidNoDoubleTapDestroysFully < ActiveRecord::Base
|
275
|
-
acts_as_paranoid :
|
292
|
+
acts_as_paranoid double_tap_destroys_fully: false
|
276
293
|
end
|
277
294
|
|
278
295
|
class HasOneNotParanoid < ActiveRecord::Base
|
279
|
-
belongs_to :paranoid_time, :
|
296
|
+
belongs_to :paranoid_time, with_deleted: true
|
280
297
|
end
|
281
298
|
|
282
299
|
class DoubleHasOneNotParanoid < HasOneNotParanoid
|
283
|
-
belongs_to :paranoid_time, :
|
284
|
-
|
300
|
+
belongs_to :paranoid_time, with_deleted: true
|
301
|
+
begin
|
302
|
+
verbose = $VERBOSE
|
303
|
+
$VERBOSE = false
|
304
|
+
belongs_to :paranoid_time, with_deleted: true
|
305
|
+
ensure
|
306
|
+
$VERBOSE = verbose
|
307
|
+
end
|
285
308
|
end
|
286
309
|
|
287
310
|
class ParanoidWithCounterCache < ActiveRecord::Base
|
288
311
|
acts_as_paranoid
|
289
|
-
belongs_to :paranoid_boolean, :
|
312
|
+
belongs_to :paranoid_boolean, counter_cache: true
|
290
313
|
end
|
291
314
|
|
292
315
|
class ParanoidWithCustomCounterCache < ActiveRecord::Base
|
@@ -307,15 +330,34 @@ class ParanoidWithCounterCacheOnOptionalBelognsTo < ActiveRecord::Base
|
|
307
330
|
end
|
308
331
|
end
|
309
332
|
|
333
|
+
class ParanoidWithTouch < ActiveRecord::Base
|
334
|
+
self.table_name = "paranoid_with_counter_caches"
|
335
|
+
acts_as_paranoid
|
336
|
+
belongs_to :paranoid_boolean, touch: true
|
337
|
+
end
|
338
|
+
|
339
|
+
class ParanoidWithTouchAndCounterCache < ActiveRecord::Base
|
340
|
+
self.table_name = "paranoid_with_counter_caches"
|
341
|
+
acts_as_paranoid
|
342
|
+
belongs_to :paranoid_boolean, touch: true, counter_cache: true
|
343
|
+
end
|
344
|
+
|
310
345
|
class ParanoidHasManyDependant < ActiveRecord::Base
|
311
346
|
acts_as_paranoid
|
312
347
|
belongs_to :paranoid_time
|
313
|
-
belongs_to :paranoid_time_with_scope,
|
314
|
-
|
315
|
-
|
316
|
-
belongs_to :
|
348
|
+
belongs_to :paranoid_time_with_scope,
|
349
|
+
-> { where(name: "hello").includes(:not_paranoid) },
|
350
|
+
class_name: "ParanoidTime", foreign_key: :paranoid_time_id
|
351
|
+
belongs_to :paranoid_time_with_deleted, class_name: "ParanoidTime",
|
352
|
+
foreign_key: :paranoid_time_id, with_deleted: true
|
353
|
+
belongs_to :paranoid_time_with_scope_with_deleted,
|
354
|
+
-> { where(name: "hello").includes(:not_paranoid) },
|
355
|
+
class_name: "ParanoidTime", foreign_key: :paranoid_time_id, with_deleted: true
|
356
|
+
belongs_to :paranoid_time_polymorphic_with_deleted, class_name: "ParanoidTime",
|
357
|
+
foreign_key: :paranoid_time_id,
|
358
|
+
polymorphic: true, with_deleted: true
|
317
359
|
|
318
|
-
belongs_to :paranoid_belongs_dependant, :
|
360
|
+
belongs_to :paranoid_belongs_dependant, dependent: :destroy
|
319
361
|
end
|
320
362
|
|
321
363
|
class ParanoidBelongsDependant < ActiveRecord::Base
|
@@ -333,13 +375,14 @@ end
|
|
333
375
|
class ParanoidWithCallback < ActiveRecord::Base
|
334
376
|
acts_as_paranoid
|
335
377
|
|
336
|
-
attr_accessor :called_before_destroy, :called_after_destroy,
|
337
|
-
|
378
|
+
attr_accessor :called_before_destroy, :called_after_destroy,
|
379
|
+
:called_after_commit_on_destroy, :called_before_recover,
|
380
|
+
:called_after_recover
|
338
381
|
|
339
382
|
before_destroy :call_me_before_destroy
|
340
383
|
after_destroy :call_me_after_destroy
|
341
384
|
|
342
|
-
after_commit :call_me_after_commit_on_destroy, :
|
385
|
+
after_commit :call_me_after_commit_on_destroy, on: :destroy
|
343
386
|
|
344
387
|
before_recover :call_me_before_recover
|
345
388
|
after_recover :call_me_after_recover
|
@@ -372,14 +415,14 @@ end
|
|
372
415
|
|
373
416
|
class ParanoidDestroyCompany < ActiveRecord::Base
|
374
417
|
acts_as_paranoid
|
375
|
-
validates :name, :
|
376
|
-
has_many :paranoid_products, :
|
418
|
+
validates :name, presence: true
|
419
|
+
has_many :paranoid_products, dependent: :destroy
|
377
420
|
end
|
378
421
|
|
379
422
|
class ParanoidDeleteCompany < ActiveRecord::Base
|
380
423
|
acts_as_paranoid
|
381
|
-
validates :name, :
|
382
|
-
has_many :paranoid_products, :
|
424
|
+
validates :name, presence: true
|
425
|
+
has_many :paranoid_products, dependent: :delete_all
|
383
426
|
end
|
384
427
|
|
385
428
|
class ParanoidProduct < ActiveRecord::Base
|
@@ -395,22 +438,21 @@ class SuperParanoid < ActiveRecord::Base
|
|
395
438
|
end
|
396
439
|
|
397
440
|
class HasManyInheritedSuperParanoidz < ActiveRecord::Base
|
398
|
-
has_many :super_paranoidz, :
|
441
|
+
has_many :super_paranoidz, class_name: "InheritedParanoid", dependent: :destroy
|
399
442
|
end
|
400
443
|
|
401
444
|
class InheritedParanoid < SuperParanoid
|
402
445
|
acts_as_paranoid
|
403
446
|
end
|
404
447
|
|
405
|
-
|
406
448
|
class ParanoidManyManyParentLeft < ActiveRecord::Base
|
407
449
|
has_many :paranoid_many_many_children
|
408
|
-
has_many :paranoid_many_many_parent_rights, :
|
450
|
+
has_many :paranoid_many_many_parent_rights, through: :paranoid_many_many_children
|
409
451
|
end
|
410
452
|
|
411
453
|
class ParanoidManyManyParentRight < ActiveRecord::Base
|
412
454
|
has_many :paranoid_many_many_children
|
413
|
-
has_many :paranoid_many_many_parent_lefts, :
|
455
|
+
has_many :paranoid_many_many_parent_lefts, through: :paranoid_many_many_children
|
414
456
|
end
|
415
457
|
|
416
458
|
class ParanoidManyManyChild < ActiveRecord::Base
|
@@ -421,21 +463,21 @@ end
|
|
421
463
|
|
422
464
|
class ParanoidWithScopedValidation < ActiveRecord::Base
|
423
465
|
acts_as_paranoid
|
424
|
-
validates_uniqueness_of :name, :
|
466
|
+
validates_uniqueness_of :name, scope: :category
|
425
467
|
end
|
426
468
|
|
427
469
|
class ParanoidBelongsToPolymorphic < ActiveRecord::Base
|
428
470
|
acts_as_paranoid
|
429
|
-
belongs_to :parent, :
|
471
|
+
belongs_to :parent, polymorphic: true, with_deleted: true
|
430
472
|
end
|
431
473
|
|
432
474
|
class NotParanoidHasManyAsParent < ActiveRecord::Base
|
433
|
-
has_many :paranoid_belongs_to_polymorphics, :
|
475
|
+
has_many :paranoid_belongs_to_polymorphics, as: :parent, dependent: :destroy
|
434
476
|
end
|
435
477
|
|
436
478
|
class ParanoidHasManyAsParent < ActiveRecord::Base
|
437
479
|
acts_as_paranoid
|
438
|
-
has_many :paranoid_belongs_to_polymorphics, :
|
480
|
+
has_many :paranoid_belongs_to_polymorphics, as: :parent, dependent: :destroy
|
439
481
|
end
|
440
482
|
|
441
483
|
class ParanoidBaseTest < ActiveSupport::TestCase
|
@@ -443,13 +485,13 @@ class ParanoidBaseTest < ActiveSupport::TestCase
|
|
443
485
|
setup_db
|
444
486
|
|
445
487
|
["paranoid", "really paranoid", "extremely paranoid"].each do |name|
|
446
|
-
ParanoidTime.create! :
|
447
|
-
ParanoidBoolean.create! :
|
488
|
+
ParanoidTime.create! name: name
|
489
|
+
ParanoidBoolean.create! name: name
|
448
490
|
end
|
449
491
|
|
450
|
-
ParanoidString.create! :
|
451
|
-
NotParanoid.create! :
|
452
|
-
ParanoidWithCallback.create! :
|
492
|
+
ParanoidString.create! name: "strings can be paranoid"
|
493
|
+
NotParanoid.create! name: "no paranoid goals"
|
494
|
+
ParanoidWithCallback.create! name: "paranoid with callbacks"
|
453
495
|
end
|
454
496
|
|
455
497
|
def teardown
|
@@ -478,25 +520,9 @@ class ParanoidBaseTest < ActiveSupport::TestCase
|
|
478
520
|
end
|
479
521
|
end
|
480
522
|
|
481
|
-
class ParanoidForest < ActiveRecord::Base
|
482
|
-
acts_as_paranoid
|
483
|
-
|
484
|
-
ActiveRecord::Base.logger = Logger.new(StringIO.new)
|
485
|
-
|
486
|
-
scope :rainforest, lambda{ where(:rainforest => true) }
|
487
|
-
|
488
|
-
has_many :paranoid_trees, :dependent => :destroy
|
489
|
-
end
|
490
|
-
|
491
|
-
class ParanoidTree < ActiveRecord::Base
|
492
|
-
acts_as_paranoid
|
493
|
-
belongs_to :paranoid_forest
|
494
|
-
validates_presence_of :name
|
495
|
-
end
|
496
|
-
|
497
523
|
class ParanoidPolygon < ActiveRecord::Base
|
498
524
|
acts_as_paranoid
|
499
|
-
default_scope { where(
|
525
|
+
default_scope { where("sides = ?", 3) }
|
500
526
|
end
|
501
527
|
|
502
528
|
class ParanoidAndroid < ActiveRecord::Base
|
@@ -506,14 +532,23 @@ end
|
|
506
532
|
class ParanoidSection < ActiveRecord::Base
|
507
533
|
acts_as_paranoid
|
508
534
|
belongs_to :paranoid_time
|
509
|
-
belongs_to :paranoid_thing, :
|
535
|
+
belongs_to :paranoid_thing, polymorphic: true, dependent: :destroy
|
510
536
|
end
|
511
537
|
|
512
538
|
class ParanoidBooleanNotNullable < ActiveRecord::Base
|
513
|
-
acts_as_paranoid column:
|
539
|
+
acts_as_paranoid column: "deleted", column_type: "boolean", allow_nulls: false
|
514
540
|
end
|
515
541
|
|
516
542
|
class ParanoidWithExplicitTableNameAfterMacro < ActiveRecord::Base
|
517
543
|
acts_as_paranoid
|
518
544
|
self.table_name = "explicit_table"
|
519
545
|
end
|
546
|
+
|
547
|
+
class ParanoidWithSerializedColumn < ActiveRecord::Base
|
548
|
+
acts_as_paranoid
|
549
|
+
validates_as_paranoid
|
550
|
+
|
551
|
+
serialize :colors, Array
|
552
|
+
|
553
|
+
validates_uniqueness_of_without_deleted :colors
|
554
|
+
end
|