acts_as_paranoid 0.5.0 → 0.6.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 +5 -5
- data/LICENSE +1 -1
- data/README.md +46 -19
- data/lib/acts_as_paranoid.rb +1 -1
- data/lib/acts_as_paranoid/associations.rb +10 -3
- data/lib/acts_as_paranoid/core.rb +14 -2
- data/lib/acts_as_paranoid/preloader_association.rb +3 -2
- data/lib/acts_as_paranoid/validations.rb +9 -5
- data/lib/acts_as_paranoid/version.rb +1 -1
- data/test/test_associations.rb +9 -6
- data/test/test_core.rb +15 -11
- data/test/test_default_scopes.rb +35 -35
- data/test/test_helper.rb +7 -7
- data/test/test_inheritance.rb +2 -2
- data/test/test_relations.rb +11 -11
- data/test/test_validations.rb +1 -0
- metadata +17 -18
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 45239a76ba68990d6273016fdba8c582ecd44d93475ebabf5ae6717b5c58ddcc
|
4
|
+
data.tar.gz: 330ed8379df4137f3016de1db1def095ae268b3f99a6dce075b4fea8adf4eb42
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a2f9c1437125d81959809addcdbee54003711ad8f339b2d1f78987b81aaab3766ac813563c110879f594b127ca90d59186ba84ca0079eeec5e69005b9e0dae08
|
7
|
+
data.tar.gz: 51f5f32565a0ae3f90de5f7afe517372a55c63c887c9de7ed07791f196b03e568f9cc275586c43f9e19806c5f45ef1431de4f446c819344cfebda64c0608d997
|
data/LICENSE
CHANGED
data/README.md
CHANGED
@@ -4,17 +4,40 @@
|
|
4
4
|
|
5
5
|
A Rails plugin to add soft delete.
|
6
6
|
|
7
|
-
This gem can be used to hide records instead of deleting them, making them
|
7
|
+
This gem can be used to hide records instead of deleting them, making them
|
8
|
+
recoverable later.
|
8
9
|
|
9
10
|
## Support
|
10
11
|
|
11
|
-
**This branch targets Rails 4.
|
12
|
+
**This branch targets Rails 4.2, 5.0 and 5.1, with experimental support for 5.2**
|
12
13
|
|
13
|
-
If you're working with another version, switch to the corresponding branch, or
|
14
|
+
If you're working with another version, switch to the corresponding branch, or
|
15
|
+
require an older version of the `acts_as_paranoid` gem.
|
16
|
+
|
17
|
+
### Known issues with Rails 5.2
|
18
|
+
|
19
|
+
* Using acts_as_paranoid and ActiveStorage on the same model
|
20
|
+
[leads to a SystemStackError](https://github.com/ActsAsParanoid/acts_as_paranoid/issues/103).
|
21
|
+
* You cannot directly create a model in a deleted state.
|
14
22
|
|
15
23
|
## Usage
|
16
24
|
|
17
|
-
|
25
|
+
#### Install gem:
|
26
|
+
|
27
|
+
``` ruby
|
28
|
+
gem 'acts_as_paranoid', '~> 0.6.0'
|
29
|
+
```
|
30
|
+
``` shell
|
31
|
+
bundle install
|
32
|
+
```
|
33
|
+
|
34
|
+
#### Create migration
|
35
|
+
|
36
|
+
``` shell
|
37
|
+
bin/rails generate migration AddDeletedAtToParanoiac deleted_at:datetime:index
|
38
|
+
```
|
39
|
+
|
40
|
+
#### Enable ActsAsParanoid:
|
18
41
|
|
19
42
|
```ruby
|
20
43
|
class Paranoiac < ActiveRecord::Base
|
@@ -22,14 +45,19 @@ class Paranoiac < ActiveRecord::Base
|
|
22
45
|
end
|
23
46
|
```
|
24
47
|
|
25
|
-
|
26
|
-
|
27
|
-
You can also specify the name of the column to store it's *deletion* and the type of data it holds:
|
48
|
+
The default column name and type are as follows:
|
28
49
|
|
29
50
|
- `:column => 'deleted_at'`
|
30
51
|
- `:column_type => 'time'`
|
31
52
|
|
32
|
-
|
53
|
+
### Options
|
54
|
+
|
55
|
+
If you are using a different column name and type to store a record's *deletion*, you can specify them as follows:
|
56
|
+
|
57
|
+
- `:column => 'deleted'`
|
58
|
+
- `:column_type => 'boolean'`
|
59
|
+
|
60
|
+
While *column* can be anything (as long as it exists in your database), *type* is restricted to:
|
33
61
|
|
34
62
|
- `boolean`
|
35
63
|
- `time` or
|
@@ -69,11 +97,10 @@ Paranoiac.deleted_inside_time_window(time, 2.minutes)
|
|
69
97
|
In order to really delete a record, just use:
|
70
98
|
|
71
99
|
```ruby
|
72
|
-
paranoiac.
|
100
|
+
paranoiac.destroy_fully!
|
73
101
|
Paranoiac.delete_all!(conditions)
|
74
102
|
```
|
75
|
-
|
76
|
-
You can also permanently delete a record by calling `destroy_fully!` on the object.
|
103
|
+
**NOTE:** The `.destroy!` method is still usable, but equivalent to `.destroy`. It just hides the object.
|
77
104
|
|
78
105
|
Alternatively you can permanently delete a record by calling `destroy` or `delete_all` on the object **twice**.
|
79
106
|
|
@@ -84,7 +111,7 @@ Take this example:
|
|
84
111
|
```ruby
|
85
112
|
p = Paranoiac.first
|
86
113
|
p.destroy # does NOT delete the first record, just hides it
|
87
|
-
Paranoiac.only_deleted.where(:id => p.id).destroy # deletes the first record from the database
|
114
|
+
Paranoiac.only_deleted.where(:id => p.id).first.destroy # deletes the first record from the database
|
88
115
|
```
|
89
116
|
|
90
117
|
### Recovery
|
@@ -107,7 +134,7 @@ If you would like to change this default behavior for one model, you can use the
|
|
107
134
|
|
108
135
|
```ruby
|
109
136
|
class Paranoiac < ActiveRecord::Base
|
110
|
-
|
137
|
+
acts_as_paranoid :recover_dependent_associations => false
|
111
138
|
end
|
112
139
|
```
|
113
140
|
|
@@ -121,16 +148,16 @@ This window can be changed with the `dependent_recovery_window` option:
|
|
121
148
|
|
122
149
|
```ruby
|
123
150
|
class Paranoiac < ActiveRecord::Base
|
124
|
-
|
125
|
-
|
151
|
+
acts_as_paranoid
|
152
|
+
has_many :paranoids, :dependent => :destroy
|
126
153
|
end
|
127
154
|
|
128
155
|
class Paranoid < ActiveRecord::Base
|
129
|
-
|
156
|
+
belongs_to :paranoic
|
130
157
|
|
131
|
-
|
132
|
-
|
133
|
-
|
158
|
+
# Paranoid objects will be recovered alongside Paranoic objects
|
159
|
+
# if they were deleted within 10 minutes of the Paranoic object
|
160
|
+
acts_as_paranoid :dependent_recovery_window => 10.minutes
|
134
161
|
end
|
135
162
|
```
|
136
163
|
|
data/lib/acts_as_paranoid.rb
CHANGED
@@ -19,7 +19,7 @@ module ActsAsParanoid
|
|
19
19
|
|
20
20
|
class_attribute :paranoid_configuration, :paranoid_column_reference
|
21
21
|
|
22
|
-
self.paranoid_configuration = { :column => "deleted_at", :column_type => "time", :recover_dependent_associations => true, :dependent_recovery_window => 2.minutes }
|
22
|
+
self.paranoid_configuration = { :column => "deleted_at", :column_type => "time", :recover_dependent_associations => true, :dependent_recovery_window => 2.minutes, :recovery_value => nil }
|
23
23
|
self.paranoid_configuration.merge!({ :deleted_value => "deleted" }) if options[:column_type] == "string"
|
24
24
|
self.paranoid_configuration.merge!({ :allow_nulls => true }) if options[:column_type] == "boolean"
|
25
25
|
self.paranoid_configuration.merge!(options) # user options
|
@@ -3,13 +3,19 @@ module ActsAsParanoid
|
|
3
3
|
def self.included(base)
|
4
4
|
base.extend ClassMethods
|
5
5
|
class << base
|
6
|
-
|
6
|
+
alias_method :belongs_to_without_deleted, :belongs_to
|
7
|
+
alias_method :belongs_to, :belongs_to_with_deleted
|
7
8
|
end
|
8
9
|
end
|
9
10
|
|
10
11
|
module ClassMethods
|
11
12
|
def belongs_to_with_deleted(target, scope = nil, options = {})
|
12
|
-
|
13
|
+
if scope.is_a?(Hash)
|
14
|
+
options = scope
|
15
|
+
scope = nil
|
16
|
+
end
|
17
|
+
|
18
|
+
with_deleted = options.delete(:with_deleted)
|
13
19
|
result = belongs_to_without_deleted(target, scope, options)
|
14
20
|
|
15
21
|
if with_deleted
|
@@ -27,7 +33,8 @@ module ActsAsParanoid
|
|
27
33
|
return #{target}_without_unscoped(*args) unless association.klass.paranoid?
|
28
34
|
association.klass.with_deleted.scoping { #{target}_without_unscoped(*args) }
|
29
35
|
end
|
30
|
-
|
36
|
+
alias_method :#{target}_without_unscoped, :#{target}
|
37
|
+
alias_method :#{target}, :#{target}_with_unscoped
|
31
38
|
RUBY
|
32
39
|
end
|
33
40
|
end
|
@@ -105,6 +105,13 @@ module ActsAsParanoid
|
|
105
105
|
self.send(self.class.paranoid_column)
|
106
106
|
end
|
107
107
|
|
108
|
+
# Straight from ActiveRecord 5.1!
|
109
|
+
def delete
|
110
|
+
self.class.delete(id) if persisted?
|
111
|
+
@destroyed = true
|
112
|
+
freeze
|
113
|
+
end
|
114
|
+
|
108
115
|
def destroy_fully!
|
109
116
|
with_transaction_returning_status do
|
110
117
|
run_callbacks :destroy do
|
@@ -122,7 +129,12 @@ module ActsAsParanoid
|
|
122
129
|
with_transaction_returning_status do
|
123
130
|
run_callbacks :destroy do
|
124
131
|
# Handle composite keys, otherwise we would just use `self.class.primary_key.to_sym => self.id`.
|
125
|
-
|
132
|
+
@_trigger_destroy_callback = if persisted?
|
133
|
+
self.class.delete_all(Hash[[Array(self.class.primary_key), Array(self.id)].transpose])
|
134
|
+
else
|
135
|
+
true
|
136
|
+
end
|
137
|
+
|
126
138
|
self.paranoid_value = self.class.delete_now_value
|
127
139
|
self
|
128
140
|
end
|
@@ -144,7 +156,7 @@ module ActsAsParanoid
|
|
144
156
|
run_callbacks :recover do
|
145
157
|
recover_dependent_associations(options[:recovery_window], options) if options[:recursive]
|
146
158
|
|
147
|
-
self.paranoid_value =
|
159
|
+
self.paranoid_value = self.class.paranoid_configuration[:recovery_value]
|
148
160
|
self.save
|
149
161
|
end
|
150
162
|
end
|
@@ -4,11 +4,12 @@ module ActsAsParanoid
|
|
4
4
|
base.class_eval do
|
5
5
|
def build_scope_with_deleted
|
6
6
|
scope = build_scope_without_deleted
|
7
|
-
scope = scope.with_deleted if options[:with_deleted] && klass.respond_to?(:with_deleted)
|
7
|
+
scope = scope.with_deleted if reflection.options[:with_deleted] && klass.respond_to?(:with_deleted)
|
8
8
|
scope
|
9
9
|
end
|
10
10
|
|
11
|
-
|
11
|
+
alias_method :build_scope_without_deleted, :build_scope
|
12
|
+
alias_method :build_scope, :build_scope_with_deleted
|
12
13
|
end
|
13
14
|
end
|
14
15
|
end
|
@@ -21,10 +21,7 @@ module ActsAsParanoid
|
|
21
21
|
finder_class = find_finder_class_for(record)
|
22
22
|
table = finder_class.arel_table
|
23
23
|
|
24
|
-
|
25
|
-
value = coder.type_cast_for_schema value if value && coder
|
26
|
-
|
27
|
-
relation = build_relation(finder_class, table, attribute, value)
|
24
|
+
relation = build_relation(finder_class, attribute, value)
|
28
25
|
[Array(finder_class.primary_key), Array(record.send(:id))].transpose.each do |pk_key, pk_value|
|
29
26
|
relation = relation.where(table[pk_key.to_sym].not_eq(pk_value))
|
30
27
|
end if record.persisted?
|
@@ -33,10 +30,17 @@ module ActsAsParanoid
|
|
33
30
|
relation = relation.where(table[scope_item].eq(record.public_send(scope_item)))
|
34
31
|
end
|
35
32
|
|
36
|
-
if relation.where(finder_class.paranoid_default_scope).
|
33
|
+
if relation.where(finder_class.paranoid_default_scope).exists?(relation)
|
37
34
|
record.errors.add(attribute, :taken, options.except(:case_sensitive, :scope).merge(:value => value))
|
38
35
|
end
|
39
36
|
end
|
37
|
+
|
38
|
+
protected
|
39
|
+
|
40
|
+
def build_relation(klass, attribute, value)
|
41
|
+
return super(klass, klass.arel_table, attribute, value) if ActiveRecord::VERSION::MINOR == 0
|
42
|
+
super
|
43
|
+
end
|
40
44
|
end
|
41
45
|
|
42
46
|
class V4 < ActiveRecord::Validations::UniquenessValidator
|
data/test/test_associations.rb
CHANGED
@@ -52,8 +52,8 @@ class AssociationsTest < ParanoidBaseTest
|
|
52
52
|
|
53
53
|
paranoid_time.destroy
|
54
54
|
|
55
|
-
assert_nil paranoid_has_many_dependant.paranoid_time
|
56
|
-
assert_equal paranoid_time, paranoid_has_many_dependant.paranoid_time_with_deleted
|
55
|
+
assert_nil paranoid_has_many_dependant.reload.paranoid_time
|
56
|
+
assert_equal paranoid_time, paranoid_has_many_dependant.reload.paranoid_time_with_deleted
|
57
57
|
end
|
58
58
|
|
59
59
|
def test_belongs_to_polymorphic_with_deleted
|
@@ -65,8 +65,8 @@ class AssociationsTest < ParanoidBaseTest
|
|
65
65
|
|
66
66
|
paranoid_time.destroy
|
67
67
|
|
68
|
-
assert_nil paranoid_has_many_dependant.paranoid_time
|
69
|
-
assert_equal paranoid_time, paranoid_has_many_dependant.paranoid_time_polymorphic_with_deleted
|
68
|
+
assert_nil paranoid_has_many_dependant.reload.paranoid_time
|
69
|
+
assert_equal paranoid_time, paranoid_has_many_dependant.reload.paranoid_time_polymorphic_with_deleted
|
70
70
|
end
|
71
71
|
|
72
72
|
def test_belongs_to_nil_polymorphic_with_deleted
|
@@ -78,8 +78,8 @@ class AssociationsTest < ParanoidBaseTest
|
|
78
78
|
|
79
79
|
paranoid_time.destroy
|
80
80
|
|
81
|
-
assert_nil paranoid_has_many_dependant.paranoid_time
|
82
|
-
assert_nil paranoid_has_many_dependant.paranoid_time_polymorphic_with_deleted
|
81
|
+
assert_nil paranoid_has_many_dependant.reload.paranoid_time
|
82
|
+
assert_nil paranoid_has_many_dependant.reload.paranoid_time_polymorphic_with_deleted
|
83
83
|
end
|
84
84
|
|
85
85
|
def test_belongs_to_options
|
@@ -228,6 +228,9 @@ class AssociationsTest < ParanoidBaseTest
|
|
228
228
|
end
|
229
229
|
|
230
230
|
def test_mass_assignment_of_paranoid_column_enabled
|
231
|
+
if ActiveRecord::VERSION::MAJOR > 4 && ActiveRecord::VERSION::MINOR > 1
|
232
|
+
skip 'Creation as deleted is not supported with Rails >= 5.2'
|
233
|
+
end
|
231
234
|
now = Time.now
|
232
235
|
record = ParanoidTime.create! :name => 'Foo', :deleted_at => now
|
233
236
|
assert_equal 'Foo', record.name
|
data/test/test_core.rb
CHANGED
@@ -186,15 +186,19 @@ class ParanoidTest < ParanoidBaseTest
|
|
186
186
|
def test_recursive_recovery_dependant_window
|
187
187
|
setup_recursive_tests
|
188
188
|
|
189
|
-
@paranoid_time_object.destroy
|
190
|
-
@paranoid_time_object.reload
|
191
|
-
|
192
189
|
# Stop the following from recovering:
|
193
190
|
# - ParanoidHasManyDependant and its ParanoidBelongsDependant
|
194
191
|
# - A single ParanoidBelongsDependant, but not its parent
|
195
|
-
|
196
|
-
|
197
|
-
|
192
|
+
Time.stub :now, 2.days.ago do
|
193
|
+
@paranoid_time_object.paranoid_has_many_dependants.first.destroy
|
194
|
+
end
|
195
|
+
Time.stub :now, 1.hour.ago do
|
196
|
+
@paranoid_time_object.paranoid_has_many_dependants.
|
197
|
+
last.paranoid_belongs_dependant.
|
198
|
+
destroy
|
199
|
+
end
|
200
|
+
@paranoid_time_object.destroy
|
201
|
+
@paranoid_time_object.reload
|
198
202
|
|
199
203
|
@paranoid_time_object.recover(:recursive => true)
|
200
204
|
|
@@ -211,13 +215,13 @@ class ParanoidTest < ParanoidBaseTest
|
|
211
215
|
child_1 = ParanoidAndroid.create
|
212
216
|
section_1 = ParanoidSection.create(:paranoid_thing => child_1)
|
213
217
|
|
214
|
-
child_2 =
|
218
|
+
child_2 = ParanoidPolygon.create(:sides => 3)
|
215
219
|
section_2 = ParanoidSection.create(:paranoid_thing => child_2)
|
216
220
|
|
217
221
|
assert_equal section_1.paranoid_thing, child_1
|
218
222
|
assert_equal section_1.paranoid_thing.class, ParanoidAndroid
|
219
223
|
assert_equal section_2.paranoid_thing, child_2
|
220
|
-
assert_equal section_2.paranoid_thing.class,
|
224
|
+
assert_equal section_2.paranoid_thing.class, ParanoidPolygon
|
221
225
|
|
222
226
|
parent = ParanoidTime.create(:name => "paranoid_parent")
|
223
227
|
parent.paranoid_sections << section_1
|
@@ -226,14 +230,14 @@ class ParanoidTest < ParanoidBaseTest
|
|
226
230
|
assert_equal 4, ParanoidTime.count
|
227
231
|
assert_equal 2, ParanoidSection.count
|
228
232
|
assert_equal 1, ParanoidAndroid.count
|
229
|
-
assert_equal 1,
|
233
|
+
assert_equal 1, ParanoidPolygon.count
|
230
234
|
|
231
235
|
parent.destroy
|
232
236
|
|
233
237
|
assert_equal 3, ParanoidTime.count
|
234
238
|
assert_equal 0, ParanoidSection.count
|
235
239
|
assert_equal 0, ParanoidAndroid.count
|
236
|
-
assert_equal 0,
|
240
|
+
assert_equal 0, ParanoidPolygon.count
|
237
241
|
|
238
242
|
parent.reload
|
239
243
|
parent.recover
|
@@ -241,7 +245,7 @@ class ParanoidTest < ParanoidBaseTest
|
|
241
245
|
assert_equal 4, ParanoidTime.count
|
242
246
|
assert_equal 2, ParanoidSection.count
|
243
247
|
assert_equal 1, ParanoidAndroid.count
|
244
|
-
assert_equal 1,
|
248
|
+
assert_equal 1, ParanoidPolygon.count
|
245
249
|
end
|
246
250
|
|
247
251
|
def test_non_recursive_recovery
|
data/test/test_default_scopes.rb
CHANGED
@@ -5,48 +5,48 @@ class MultipleDefaultScopesTest < ParanoidBaseTest
|
|
5
5
|
setup_db
|
6
6
|
|
7
7
|
# Naturally, the default scope for humans is male. Sexism++
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
8
|
+
ParanoidPolygon.create! :sides => 3
|
9
|
+
ParanoidPolygon.create! :sides => 3
|
10
|
+
ParanoidPolygon.create! :sides => 3
|
11
|
+
ParanoidPolygon.create! :sides => 8
|
12
12
|
|
13
|
-
assert_equal 3,
|
14
|
-
assert_equal 4,
|
13
|
+
assert_equal 3, ParanoidPolygon.count
|
14
|
+
assert_equal 4, ParanoidPolygon.unscoped.count
|
15
15
|
end
|
16
16
|
|
17
17
|
def test_fake_removal_with_multiple_default_scope
|
18
|
-
|
19
|
-
assert_equal 2,
|
20
|
-
assert_equal 3,
|
21
|
-
assert_equal 1,
|
22
|
-
assert_equal 4,
|
23
|
-
|
24
|
-
|
25
|
-
assert_equal 0,
|
26
|
-
assert_equal 3,
|
27
|
-
assert_equal 3,
|
28
|
-
assert_equal 4,
|
18
|
+
ParanoidPolygon.first.destroy
|
19
|
+
assert_equal 2, ParanoidPolygon.count
|
20
|
+
assert_equal 3, ParanoidPolygon.with_deleted.count
|
21
|
+
assert_equal 1, ParanoidPolygon.only_deleted.count
|
22
|
+
assert_equal 4, ParanoidPolygon.unscoped.count
|
23
|
+
|
24
|
+
ParanoidPolygon.destroy_all
|
25
|
+
assert_equal 0, ParanoidPolygon.count
|
26
|
+
assert_equal 3, ParanoidPolygon.with_deleted.count
|
27
|
+
assert_equal 3, ParanoidPolygon.with_deleted.count
|
28
|
+
assert_equal 4, ParanoidPolygon.unscoped.count
|
29
29
|
end
|
30
30
|
|
31
31
|
def test_real_removal_with_multiple_default_scope
|
32
32
|
# two-step
|
33
|
-
|
34
|
-
|
35
|
-
assert_equal 2,
|
36
|
-
assert_equal 2,
|
37
|
-
assert_equal 0,
|
38
|
-
assert_equal 3,
|
39
|
-
|
40
|
-
|
41
|
-
assert_equal 1,
|
42
|
-
assert_equal 1,
|
43
|
-
assert_equal 0,
|
44
|
-
assert_equal 2,
|
45
|
-
|
46
|
-
|
47
|
-
assert_equal 0,
|
48
|
-
assert_equal 0,
|
49
|
-
assert_equal 0,
|
50
|
-
assert_equal 1,
|
33
|
+
ParanoidPolygon.first.destroy
|
34
|
+
ParanoidPolygon.only_deleted.first.destroy
|
35
|
+
assert_equal 2, ParanoidPolygon.count
|
36
|
+
assert_equal 2, ParanoidPolygon.with_deleted.count
|
37
|
+
assert_equal 0, ParanoidPolygon.only_deleted.count
|
38
|
+
assert_equal 3, ParanoidPolygon.unscoped.count
|
39
|
+
|
40
|
+
ParanoidPolygon.first.destroy_fully!
|
41
|
+
assert_equal 1, ParanoidPolygon.count
|
42
|
+
assert_equal 1, ParanoidPolygon.with_deleted.count
|
43
|
+
assert_equal 0, ParanoidPolygon.only_deleted.count
|
44
|
+
assert_equal 2, ParanoidPolygon.unscoped.count
|
45
|
+
|
46
|
+
ParanoidPolygon.delete_all!
|
47
|
+
assert_equal 0, ParanoidPolygon.count
|
48
|
+
assert_equal 0, ParanoidPolygon.with_deleted.count
|
49
|
+
assert_equal 0, ParanoidPolygon.only_deleted.count
|
50
|
+
assert_equal 1, ParanoidPolygon.unscoped.count
|
51
51
|
end
|
52
52
|
end
|
data/test/test_helper.rb
CHANGED
@@ -164,8 +164,8 @@ def setup_db
|
|
164
164
|
timestamps t
|
165
165
|
end
|
166
166
|
|
167
|
-
create_table :
|
168
|
-
t.
|
167
|
+
create_table :paranoid_polygons do |t|
|
168
|
+
t.integer :sides
|
169
169
|
t.datetime :deleted_at
|
170
170
|
|
171
171
|
timestamps t
|
@@ -193,20 +193,20 @@ def setup_db
|
|
193
193
|
t.integer :parent_id
|
194
194
|
t.datetime :deleted_at
|
195
195
|
|
196
|
-
t
|
196
|
+
timestamps t
|
197
197
|
end
|
198
198
|
|
199
199
|
create_table :not_paranoid_has_many_as_parents do |t|
|
200
200
|
t.string :name
|
201
201
|
|
202
|
-
t
|
202
|
+
timestamps t
|
203
203
|
end
|
204
204
|
|
205
205
|
create_table :paranoid_has_many_as_parents do |t|
|
206
206
|
t.string :name
|
207
207
|
t.datetime :deleted_at
|
208
208
|
|
209
|
-
t
|
209
|
+
timestamps t
|
210
210
|
end
|
211
211
|
end
|
212
212
|
end
|
@@ -451,9 +451,9 @@ class ParanoidTree < ActiveRecord::Base
|
|
451
451
|
validates_presence_of :name
|
452
452
|
end
|
453
453
|
|
454
|
-
class
|
454
|
+
class ParanoidPolygon < ActiveRecord::Base
|
455
455
|
acts_as_paranoid
|
456
|
-
default_scope { where('
|
456
|
+
default_scope { where('sides = ?', 3) }
|
457
457
|
end
|
458
458
|
|
459
459
|
class ParanoidAndroid < ActiveRecord::Base
|
data/test/test_inheritance.rb
CHANGED
@@ -5,10 +5,10 @@ class InheritanceTest < ParanoidBaseTest
|
|
5
5
|
has_many_inherited_super_paranoidz = HasManyInheritedSuperParanoidz.new
|
6
6
|
has_many_inherited_super_paranoidz.save
|
7
7
|
has_many_inherited_super_paranoidz.super_paranoidz.create
|
8
|
-
assert_nothing_raised
|
8
|
+
assert_nothing_raised { has_many_inherited_super_paranoidz.destroy }
|
9
9
|
end
|
10
10
|
|
11
11
|
def test_class_instance_variables_are_inherited
|
12
|
-
assert_nothing_raised
|
12
|
+
assert_nothing_raised { InheritedParanoid.paranoid_column }
|
13
13
|
end
|
14
14
|
end
|
data/test/test_relations.rb
CHANGED
@@ -82,8 +82,8 @@ class RelationsTest < ParanoidBaseTest
|
|
82
82
|
|
83
83
|
# destroy_all: through a relation
|
84
84
|
@paranoid_forest_2.paranoid_trees.order(:id).destroy_all
|
85
|
-
assert_equal 0, @paranoid_forest_2.paranoid_trees
|
86
|
-
assert_equal 2, @paranoid_forest_2.paranoid_trees
|
85
|
+
assert_equal 0, @paranoid_forest_2.paranoid_trees.count
|
86
|
+
assert_equal 2, @paranoid_forest_2.paranoid_trees.with_deleted.count
|
87
87
|
end
|
88
88
|
|
89
89
|
def test_real_removal_through_relation
|
@@ -97,21 +97,21 @@ class RelationsTest < ParanoidBaseTest
|
|
97
97
|
paranoid_tree = @paranoid_forest_1.paranoid_trees.first
|
98
98
|
@paranoid_forest_1.paranoid_trees.order(:id).destroy(paranoid_tree.id)
|
99
99
|
@paranoid_forest_1.paranoid_trees.only_deleted.destroy(paranoid_tree.id)
|
100
|
-
assert_equal 1, @paranoid_forest_1.paranoid_trees
|
101
|
-
assert_equal 1, @paranoid_forest_1.paranoid_trees
|
102
|
-
assert_equal 0, @paranoid_forest_1.paranoid_trees
|
100
|
+
assert_equal 1, @paranoid_forest_1.paranoid_trees.count
|
101
|
+
assert_equal 1, @paranoid_forest_1.paranoid_trees.with_deleted.count
|
102
|
+
assert_equal 0, @paranoid_forest_1.paranoid_trees.only_deleted.count
|
103
103
|
|
104
104
|
# destroy_all: two-step through a relation
|
105
105
|
@paranoid_forest_1.paranoid_trees.order(:id).destroy_all
|
106
106
|
@paranoid_forest_1.paranoid_trees.only_deleted.destroy_all
|
107
|
-
assert_equal 0, @paranoid_forest_1.paranoid_trees
|
108
|
-
assert_equal 0, @paranoid_forest_1.paranoid_trees
|
109
|
-
assert_equal 0, @paranoid_forest_1.paranoid_trees
|
107
|
+
assert_equal 0, @paranoid_forest_1.paranoid_trees.count
|
108
|
+
assert_equal 0, @paranoid_forest_1.paranoid_trees.with_deleted.count
|
109
|
+
assert_equal 0, @paranoid_forest_1.paranoid_trees.only_deleted.count
|
110
110
|
|
111
111
|
# delete_all!: through a relation
|
112
112
|
@paranoid_forest_2.paranoid_trees.order(:id).delete_all!
|
113
|
-
assert_equal 0, @paranoid_forest_2.paranoid_trees
|
114
|
-
assert_equal 0, @paranoid_forest_2.paranoid_trees
|
115
|
-
assert_equal 0, @paranoid_forest_2.paranoid_trees
|
113
|
+
assert_equal 0, @paranoid_forest_2.paranoid_trees.count
|
114
|
+
assert_equal 0, @paranoid_forest_2.paranoid_trees.with_deleted.count
|
115
|
+
assert_equal 0, @paranoid_forest_2.paranoid_trees.only_deleted.count
|
116
116
|
end
|
117
117
|
end
|
data/test/test_validations.rb
CHANGED
@@ -13,6 +13,7 @@ class ValidatesUniquenessTest < ParanoidBaseTest
|
|
13
13
|
|
14
14
|
def test_should_validate_without_deleted
|
15
15
|
ParanoidBoolean.new(:name => 'paranoid').tap do |record|
|
16
|
+
refute record.valid?
|
16
17
|
ParanoidBoolean.first.destroy
|
17
18
|
assert record.valid?
|
18
19
|
ParanoidBoolean.only_deleted.first.destroy!
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: acts_as_paranoid
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Zachary Scott
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date:
|
13
|
+
date: 2018-06-07 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: activerecord
|
@@ -18,40 +18,40 @@ dependencies:
|
|
18
18
|
requirements:
|
19
19
|
- - ">="
|
20
20
|
- !ruby/object:Gem::Version
|
21
|
-
version: '4.
|
21
|
+
version: '4.2'
|
22
22
|
- - "<"
|
23
23
|
- !ruby/object:Gem::Version
|
24
|
-
version: '
|
24
|
+
version: '6.0'
|
25
25
|
type: :runtime
|
26
26
|
prerelease: false
|
27
27
|
version_requirements: !ruby/object:Gem::Requirement
|
28
28
|
requirements:
|
29
29
|
- - ">="
|
30
30
|
- !ruby/object:Gem::Version
|
31
|
-
version: '4.
|
31
|
+
version: '4.2'
|
32
32
|
- - "<"
|
33
33
|
- !ruby/object:Gem::Version
|
34
|
-
version: '
|
34
|
+
version: '6.0'
|
35
35
|
- !ruby/object:Gem::Dependency
|
36
36
|
name: activesupport
|
37
37
|
requirement: !ruby/object:Gem::Requirement
|
38
38
|
requirements:
|
39
39
|
- - ">="
|
40
40
|
- !ruby/object:Gem::Version
|
41
|
-
version: '4.
|
41
|
+
version: '4.2'
|
42
42
|
- - "<"
|
43
43
|
- !ruby/object:Gem::Version
|
44
|
-
version: '
|
44
|
+
version: '6.0'
|
45
45
|
type: :runtime
|
46
46
|
prerelease: false
|
47
47
|
version_requirements: !ruby/object:Gem::Requirement
|
48
48
|
requirements:
|
49
49
|
- - ">="
|
50
50
|
- !ruby/object:Gem::Version
|
51
|
-
version: '4.
|
51
|
+
version: '4.2'
|
52
52
|
- - "<"
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: '
|
54
|
+
version: '6.0'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: bundler
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -155,21 +155,20 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
155
155
|
requirements:
|
156
156
|
- - ">="
|
157
157
|
- !ruby/object:Gem::Version
|
158
|
-
version:
|
158
|
+
version: '0'
|
159
159
|
requirements: []
|
160
160
|
rubyforge_project:
|
161
|
-
rubygems_version: 2.
|
161
|
+
rubygems_version: 2.7.6
|
162
162
|
signing_key:
|
163
163
|
specification_version: 4
|
164
164
|
summary: Active Record plugin which allows you to hide and restore records without
|
165
165
|
actually deleting them.
|
166
166
|
test_files:
|
167
|
-
- test/test_inheritance.rb
|
168
|
-
- test/test_preloader_association.rb
|
169
|
-
- test/test_relations.rb
|
170
|
-
- test/test_core.rb
|
171
167
|
- test/test_validations.rb
|
168
|
+
- test/test_relations.rb
|
169
|
+
- test/test_inheritance.rb
|
170
|
+
- test/test_default_scopes.rb
|
172
171
|
- test/test_associations.rb
|
173
172
|
- test/test_helper.rb
|
174
|
-
- test/
|
175
|
-
|
173
|
+
- test/test_core.rb
|
174
|
+
- test/test_preloader_association.rb
|