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_relations.rb
DELETED
@@ -1,199 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require "test_helper"
|
4
|
-
|
5
|
-
class RelationsTest < ActiveSupport::TestCase
|
6
|
-
class ParanoidForest < ActiveRecord::Base
|
7
|
-
acts_as_paranoid
|
8
|
-
|
9
|
-
scope :rainforest, -> { where(rainforest: true) }
|
10
|
-
|
11
|
-
has_many :paranoid_trees, dependent: :destroy
|
12
|
-
end
|
13
|
-
|
14
|
-
class ParanoidTree < ActiveRecord::Base
|
15
|
-
acts_as_paranoid
|
16
|
-
belongs_to :paranoid_forest
|
17
|
-
validates_presence_of :name
|
18
|
-
end
|
19
|
-
|
20
|
-
class NotParanoidBowl < ActiveRecord::Base
|
21
|
-
has_many :paranoid_chocolates, dependent: :destroy
|
22
|
-
end
|
23
|
-
|
24
|
-
class ParanoidChocolate < ActiveRecord::Base
|
25
|
-
acts_as_paranoid
|
26
|
-
belongs_to :not_paranoid_bowl
|
27
|
-
validates_presence_of :name
|
28
|
-
end
|
29
|
-
|
30
|
-
def setup
|
31
|
-
ActiveRecord::Schema.define(version: 1) do
|
32
|
-
create_table :paranoid_forests do |t|
|
33
|
-
t.string :name
|
34
|
-
t.boolean :rainforest
|
35
|
-
t.datetime :deleted_at
|
36
|
-
|
37
|
-
timestamps t
|
38
|
-
end
|
39
|
-
|
40
|
-
create_table :paranoid_trees do |t|
|
41
|
-
t.integer :paranoid_forest_id
|
42
|
-
t.string :name
|
43
|
-
t.datetime :deleted_at
|
44
|
-
|
45
|
-
timestamps t
|
46
|
-
end
|
47
|
-
|
48
|
-
create_table :not_paranoid_bowls do |t|
|
49
|
-
t.string :name
|
50
|
-
|
51
|
-
timestamps t
|
52
|
-
end
|
53
|
-
|
54
|
-
create_table :paranoid_chocolates do |t|
|
55
|
-
t.integer :not_paranoid_bowl_id
|
56
|
-
t.string :name
|
57
|
-
t.datetime :deleted_at
|
58
|
-
|
59
|
-
timestamps t
|
60
|
-
end
|
61
|
-
end
|
62
|
-
|
63
|
-
@paranoid_forest_1 = ParanoidForest.create! name: "ParanoidForest #1"
|
64
|
-
@paranoid_forest_2 = ParanoidForest.create! name: "ParanoidForest #2", rainforest: true
|
65
|
-
@paranoid_forest_3 = ParanoidForest.create! name: "ParanoidForest #3", rainforest: true
|
66
|
-
|
67
|
-
assert_equal 3, ParanoidForest.count
|
68
|
-
assert_equal 2, ParanoidForest.rainforest.count
|
69
|
-
|
70
|
-
@paranoid_forest_1.paranoid_trees.create! name: "ParanoidTree #1"
|
71
|
-
@paranoid_forest_1.paranoid_trees.create! name: "ParanoidTree #2"
|
72
|
-
@paranoid_forest_2.paranoid_trees.create! name: "ParanoidTree #3"
|
73
|
-
@paranoid_forest_2.paranoid_trees.create! name: "ParanoidTree #4"
|
74
|
-
|
75
|
-
assert_equal 4, ParanoidTree.count
|
76
|
-
end
|
77
|
-
|
78
|
-
def teardown
|
79
|
-
teardown_db
|
80
|
-
end
|
81
|
-
|
82
|
-
def test_filtering_with_scopes
|
83
|
-
assert_equal 2, ParanoidForest.rainforest.with_deleted.count
|
84
|
-
assert_equal 2, ParanoidForest.with_deleted.rainforest.count
|
85
|
-
|
86
|
-
assert_equal 0, ParanoidForest.rainforest.only_deleted.count
|
87
|
-
assert_equal 0, ParanoidForest.only_deleted.rainforest.count
|
88
|
-
|
89
|
-
ParanoidForest.rainforest.first.destroy
|
90
|
-
assert_equal 1, ParanoidForest.rainforest.count
|
91
|
-
|
92
|
-
assert_equal 2, ParanoidForest.rainforest.with_deleted.count
|
93
|
-
assert_equal 2, ParanoidForest.with_deleted.rainforest.count
|
94
|
-
|
95
|
-
assert_equal 1, ParanoidForest.rainforest.only_deleted.count
|
96
|
-
assert_equal 1, ParanoidForest.only_deleted.rainforest.count
|
97
|
-
end
|
98
|
-
|
99
|
-
def test_associations_filtered_by_with_deleted
|
100
|
-
assert_equal 2, @paranoid_forest_1.paranoid_trees.with_deleted.count
|
101
|
-
assert_equal 2, @paranoid_forest_2.paranoid_trees.with_deleted.count
|
102
|
-
|
103
|
-
@paranoid_forest_1.paranoid_trees.first.destroy
|
104
|
-
assert_equal 1, @paranoid_forest_1.paranoid_trees.count
|
105
|
-
assert_equal 2, @paranoid_forest_1.paranoid_trees.with_deleted.count
|
106
|
-
assert_equal 4, ParanoidTree.with_deleted.count
|
107
|
-
|
108
|
-
@paranoid_forest_2.paranoid_trees.first.destroy
|
109
|
-
assert_equal 1, @paranoid_forest_2.paranoid_trees.count
|
110
|
-
assert_equal 2, @paranoid_forest_2.paranoid_trees.with_deleted.count
|
111
|
-
assert_equal 4, ParanoidTree.with_deleted.count
|
112
|
-
|
113
|
-
@paranoid_forest_1.paranoid_trees.first.destroy
|
114
|
-
assert_equal 0, @paranoid_forest_1.paranoid_trees.count
|
115
|
-
assert_equal 2, @paranoid_forest_1.paranoid_trees.with_deleted.count
|
116
|
-
assert_equal 4, ParanoidTree.with_deleted.count
|
117
|
-
end
|
118
|
-
|
119
|
-
def test_associations_filtered_by_only_deleted
|
120
|
-
assert_equal 0, @paranoid_forest_1.paranoid_trees.only_deleted.count
|
121
|
-
assert_equal 0, @paranoid_forest_2.paranoid_trees.only_deleted.count
|
122
|
-
|
123
|
-
@paranoid_forest_1.paranoid_trees.first.destroy
|
124
|
-
assert_equal 1, @paranoid_forest_1.paranoid_trees.only_deleted.count
|
125
|
-
assert_equal 1, ParanoidTree.only_deleted.count
|
126
|
-
|
127
|
-
@paranoid_forest_2.paranoid_trees.first.destroy
|
128
|
-
assert_equal 1, @paranoid_forest_2.paranoid_trees.only_deleted.count
|
129
|
-
assert_equal 2, ParanoidTree.only_deleted.count
|
130
|
-
|
131
|
-
@paranoid_forest_1.paranoid_trees.first.destroy
|
132
|
-
assert_equal 2, @paranoid_forest_1.paranoid_trees.only_deleted.count
|
133
|
-
assert_equal 3, ParanoidTree.only_deleted.count
|
134
|
-
end
|
135
|
-
|
136
|
-
def test_fake_removal_through_relation
|
137
|
-
# destroy: through a relation.
|
138
|
-
ParanoidForest.rainforest.destroy(@paranoid_forest_3.id)
|
139
|
-
assert_equal 1, ParanoidForest.rainforest.count
|
140
|
-
assert_equal 2, ParanoidForest.rainforest.with_deleted.count
|
141
|
-
assert_equal 1, ParanoidForest.rainforest.only_deleted.count
|
142
|
-
|
143
|
-
# destroy_all: through a relation
|
144
|
-
@paranoid_forest_2.paranoid_trees.destroy_all
|
145
|
-
assert_equal 0, @paranoid_forest_2.paranoid_trees.count
|
146
|
-
assert_equal 2, @paranoid_forest_2.paranoid_trees.with_deleted.count
|
147
|
-
end
|
148
|
-
|
149
|
-
def test_fake_removal_through_has_many_relation_of_non_paranoid_model
|
150
|
-
not_paranoid = NotParanoidBowl.create! name: "NotParanoid #1"
|
151
|
-
not_paranoid.paranoid_chocolates.create! name: "ParanoidChocolate #1"
|
152
|
-
not_paranoid.paranoid_chocolates.create! name: "ParanoidChocolate #2"
|
153
|
-
|
154
|
-
not_paranoid.paranoid_chocolates.destroy_all
|
155
|
-
assert_equal 0, not_paranoid.paranoid_chocolates.count
|
156
|
-
assert_equal 2, not_paranoid.paranoid_chocolates.with_deleted.count
|
157
|
-
end
|
158
|
-
|
159
|
-
def test_real_removal_through_relation_with_destroy_fully
|
160
|
-
ParanoidForest.rainforest.destroy_fully!(@paranoid_forest_3)
|
161
|
-
assert_equal 1, ParanoidForest.rainforest.count
|
162
|
-
assert_equal 1, ParanoidForest.rainforest.with_deleted.count
|
163
|
-
assert_equal 0, ParanoidForest.rainforest.only_deleted.count
|
164
|
-
end
|
165
|
-
|
166
|
-
def test_real_removal_through_relation_with_deprecated_destroy!
|
167
|
-
ParanoidForest.rainforest.destroy!(@paranoid_forest_3)
|
168
|
-
assert_equal 1, ParanoidForest.rainforest.count
|
169
|
-
assert_equal 1, ParanoidForest.rainforest.with_deleted.count
|
170
|
-
assert_equal 0, ParanoidForest.rainforest.only_deleted.count
|
171
|
-
end
|
172
|
-
|
173
|
-
def test_two_step_real_removal_through_relation_with_destroy
|
174
|
-
# destroy: two-step through a relation
|
175
|
-
paranoid_tree = @paranoid_forest_1.paranoid_trees.first
|
176
|
-
@paranoid_forest_1.paranoid_trees.destroy(paranoid_tree.id)
|
177
|
-
@paranoid_forest_1.paranoid_trees.only_deleted.destroy(paranoid_tree.id)
|
178
|
-
assert_equal 1, @paranoid_forest_1.paranoid_trees.count
|
179
|
-
assert_equal 1, @paranoid_forest_1.paranoid_trees.with_deleted.count
|
180
|
-
assert_equal 0, @paranoid_forest_1.paranoid_trees.only_deleted.count
|
181
|
-
end
|
182
|
-
|
183
|
-
def test_two_step_real_removal_through_relation_with_destroy_all
|
184
|
-
# destroy_all: two-step through a relation
|
185
|
-
@paranoid_forest_1.paranoid_trees.destroy_all
|
186
|
-
@paranoid_forest_1.paranoid_trees.only_deleted.destroy_all
|
187
|
-
assert_equal 0, @paranoid_forest_1.paranoid_trees.count
|
188
|
-
assert_equal 0, @paranoid_forest_1.paranoid_trees.with_deleted.count
|
189
|
-
assert_equal 0, @paranoid_forest_1.paranoid_trees.only_deleted.count
|
190
|
-
end
|
191
|
-
|
192
|
-
def test_real_removal_through_relation_with_delete_all_bang
|
193
|
-
# delete_all!: through a relation
|
194
|
-
@paranoid_forest_2.paranoid_trees.delete_all!
|
195
|
-
assert_equal 0, @paranoid_forest_2.paranoid_trees.count
|
196
|
-
assert_equal 0, @paranoid_forest_2.paranoid_trees.with_deleted.count
|
197
|
-
assert_equal 0, @paranoid_forest_2.paranoid_trees.only_deleted.count
|
198
|
-
end
|
199
|
-
end
|
@@ -1,40 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require "test_helper"
|
4
|
-
|
5
|
-
class TableNamespaceTest < ActiveSupport::TestCase
|
6
|
-
module Paranoid
|
7
|
-
class Blob < ActiveRecord::Base
|
8
|
-
acts_as_paranoid
|
9
|
-
|
10
|
-
validates_presence_of :name
|
11
|
-
|
12
|
-
def self.table_name_prefix
|
13
|
-
"paranoid_"
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|
18
|
-
def setup
|
19
|
-
ActiveRecord::Schema.define(version: 1) do
|
20
|
-
create_table :paranoid_blobs do |t|
|
21
|
-
t.string :name
|
22
|
-
t.datetime :deleted_at
|
23
|
-
|
24
|
-
timestamps t
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
def teardown
|
30
|
-
teardown_db
|
31
|
-
end
|
32
|
-
|
33
|
-
def test_correct_table_name
|
34
|
-
assert_equal "paranoid_blobs", Paranoid::Blob.table_name
|
35
|
-
|
36
|
-
b = Paranoid::Blob.new(name: "hello!")
|
37
|
-
b.save!
|
38
|
-
assert_equal b, Paranoid::Blob.first
|
39
|
-
end
|
40
|
-
end
|
data/test/test_validations.rb
DELETED
@@ -1,63 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require "test_helper"
|
4
|
-
|
5
|
-
class ValidatesUniquenessTest < ParanoidBaseTest
|
6
|
-
def test_should_include_deleted_by_default
|
7
|
-
ParanoidTime.new(name: "paranoid").tap do |record|
|
8
|
-
assert !record.valid?
|
9
|
-
ParanoidTime.first.destroy
|
10
|
-
assert !record.valid?
|
11
|
-
ParanoidTime.only_deleted.first.destroy!
|
12
|
-
assert record.valid?
|
13
|
-
end
|
14
|
-
end
|
15
|
-
|
16
|
-
def test_should_validate_without_deleted
|
17
|
-
ParanoidBoolean.new(name: "paranoid").tap do |record|
|
18
|
-
refute record.valid?
|
19
|
-
ParanoidBoolean.first.destroy
|
20
|
-
assert record.valid?
|
21
|
-
ParanoidBoolean.only_deleted.first.destroy!
|
22
|
-
assert record.valid?
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
def test_validate_serialized_attribute_without_deleted
|
27
|
-
ParanoidWithSerializedColumn.create!(name: "ParanoidWithSerializedColumn #1",
|
28
|
-
colors: %w[Cyan Maroon])
|
29
|
-
record = ParanoidWithSerializedColumn.new(name: "ParanoidWithSerializedColumn #2")
|
30
|
-
record.colors = %w[Cyan Maroon]
|
31
|
-
refute record.valid?
|
32
|
-
|
33
|
-
record.colors = %w[Beige Turquoise]
|
34
|
-
assert record.valid?
|
35
|
-
end
|
36
|
-
|
37
|
-
def test_updated_serialized_attribute_validated_without_deleted
|
38
|
-
record = ParanoidWithSerializedColumn.create!(name: "ParanoidWithSerializedColumn #1",
|
39
|
-
colors: %w[Cyan Maroon])
|
40
|
-
record.update!(colors: %w[Beige Turquoise])
|
41
|
-
assert record.valid?
|
42
|
-
end
|
43
|
-
|
44
|
-
def test_models_with_scoped_validations_can_be_multiply_deleted
|
45
|
-
model_a = ParanoidWithScopedValidation.create(name: "Model A", category: "Category A")
|
46
|
-
model_b = ParanoidWithScopedValidation.create(name: "Model B", category: "Category B")
|
47
|
-
|
48
|
-
ParanoidWithScopedValidation.delete([model_a.id, model_b.id])
|
49
|
-
|
50
|
-
assert_paranoid_deletion(model_a)
|
51
|
-
assert_paranoid_deletion(model_b)
|
52
|
-
end
|
53
|
-
|
54
|
-
def test_models_with_scoped_validations_can_be_multiply_destroyed
|
55
|
-
model_a = ParanoidWithScopedValidation.create(name: "Model A", category: "Category A")
|
56
|
-
model_b = ParanoidWithScopedValidation.create(name: "Model B", category: "Category B")
|
57
|
-
|
58
|
-
ParanoidWithScopedValidation.destroy([model_a.id, model_b.id])
|
59
|
-
|
60
|
-
assert_paranoid_deletion(model_a)
|
61
|
-
assert_paranoid_deletion(model_b)
|
62
|
-
end
|
63
|
-
end
|