acts_as_paranoid 0.6.2 → 0.7.3
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 +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
|