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