rails3_acts_as_paranoid 0.0.9 → 0.1.4
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.
data/README.markdown
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
A simple plugin which hides records instead of deleting them, being able to recover them.
|
4
4
|
|
5
|
-
This branch targets Rails 3.
|
5
|
+
This branch targets Rails 3.1.X. If you're working with another version, switch to the corresponding branch.
|
6
6
|
|
7
7
|
## Credits
|
8
8
|
|
@@ -1,6 +1,58 @@
|
|
1
1
|
require 'active_record'
|
2
2
|
require 'validations/uniqueness_without_deleted'
|
3
3
|
|
4
|
+
|
5
|
+
module ActiveRecord
|
6
|
+
class Relation
|
7
|
+
def paranoid?
|
8
|
+
klass.try(:paranoid?) ? true : false
|
9
|
+
end
|
10
|
+
|
11
|
+
def paranoid_deletion_attributes
|
12
|
+
{ klass.paranoid_column => klass.delete_now_value }
|
13
|
+
end
|
14
|
+
|
15
|
+
alias_method :destroy!, :destroy
|
16
|
+
def destroy(id)
|
17
|
+
if paranoid?
|
18
|
+
update_all(paranoid_deletion_attributes, {:id => id})
|
19
|
+
else
|
20
|
+
destroy!(id)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
alias_method :really_delete_all!, :delete_all
|
25
|
+
|
26
|
+
def delete_all!(conditions = nil)
|
27
|
+
if conditions
|
28
|
+
# This idea comes out of Rails 3.1 ActiveRecord::Record.delete_all
|
29
|
+
where(conditions).delete_all!
|
30
|
+
else
|
31
|
+
really_delete_all!
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def delete_all(conditions = nil)
|
36
|
+
if paranoid?
|
37
|
+
update_all(paranoid_deletion_attributes, conditions)
|
38
|
+
else
|
39
|
+
delete_all!(conditions)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def arel=(a)
|
44
|
+
@arel = a
|
45
|
+
end
|
46
|
+
|
47
|
+
def with_deleted
|
48
|
+
wd = self.clone
|
49
|
+
wd.default_scoped = false
|
50
|
+
wd.arel = self.build_arel
|
51
|
+
wd
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
4
56
|
module ActsAsParanoid
|
5
57
|
|
6
58
|
def paranoid?
|
@@ -25,16 +77,7 @@ module ActsAsParanoid
|
|
25
77
|
self.paranoid_column_reference = "#{self.table_name}.#{paranoid_configuration[:column]}"
|
26
78
|
|
27
79
|
return if paranoid?
|
28
|
-
|
29
|
-
ActiveRecord::Relation.class_eval do
|
30
|
-
alias_method :delete_all!, :delete_all
|
31
|
-
alias_method :destroy!, :destroy
|
32
|
-
end
|
33
80
|
|
34
|
-
ActiveRecord::Reflection::AssociationReflection.class_eval do
|
35
|
-
alias_method :foreign_key, :primary_key_name unless respond_to?(:foreign_key)
|
36
|
-
end
|
37
|
-
|
38
81
|
# Magic!
|
39
82
|
default_scope where("#{paranoid_column_reference} IS ?", nil)
|
40
83
|
|
@@ -72,6 +115,18 @@ module ActsAsParanoid
|
|
72
115
|
def only_deleted
|
73
116
|
self.unscoped.where("#{paranoid_column_reference} IS NOT ?", nil)
|
74
117
|
end
|
118
|
+
|
119
|
+
def deletion_conditions(id_or_array)
|
120
|
+
["id in (?)", [id_or_array].flatten]
|
121
|
+
end
|
122
|
+
|
123
|
+
def delete!(id_or_array)
|
124
|
+
delete_all!(deletion_conditions(id_or_array))
|
125
|
+
end
|
126
|
+
|
127
|
+
def delete(id_or_array)
|
128
|
+
delete_all(deletion_conditions(id_or_array))
|
129
|
+
end
|
75
130
|
|
76
131
|
def delete_all!(conditions = nil)
|
77
132
|
self.unscoped.delete_all!(conditions)
|
@@ -133,6 +188,27 @@ module ActsAsParanoid
|
|
133
188
|
end
|
134
189
|
end
|
135
190
|
|
191
|
+
def delete!
|
192
|
+
with_transaction_returning_status do
|
193
|
+
act_on_dependent_destroy_associations
|
194
|
+
self.class.delete_all!(self.class.primary_key.to_sym => self.id)
|
195
|
+
self.paranoid_value = self.class.delete_now_value
|
196
|
+
freeze
|
197
|
+
end
|
198
|
+
end
|
199
|
+
|
200
|
+
def delete
|
201
|
+
if paranoid_value.nil?
|
202
|
+
with_transaction_returning_status do
|
203
|
+
self.class.delete_all(self.class.primary_key.to_sym => self.id)
|
204
|
+
self.paranoid_value = self.class.delete_now_value
|
205
|
+
self
|
206
|
+
end
|
207
|
+
else
|
208
|
+
delete!
|
209
|
+
end
|
210
|
+
end
|
211
|
+
|
136
212
|
def recover(options={})
|
137
213
|
options = {
|
138
214
|
:recursive => self.class.paranoid_configuration[:recover_dependent_associations],
|
@@ -196,6 +272,7 @@ module ActsAsParanoid
|
|
196
272
|
|
197
273
|
end
|
198
274
|
|
275
|
+
|
199
276
|
# Extend ActiveRecord's functionality
|
200
277
|
ActiveRecord::Base.send :extend, ActsAsParanoid
|
201
278
|
|
@@ -9,7 +9,8 @@ module ParanoidValidations
|
|
9
9
|
value = YAML.dump value
|
10
10
|
end
|
11
11
|
|
12
|
-
|
12
|
+
table = Arel::Table.new(record.class.table_name)
|
13
|
+
sql, params = build_relation(finder_class, table, attribute, value)
|
13
14
|
|
14
15
|
# This is the only changed line from the base class version - it does finder_class.unscoped
|
15
16
|
relation = finder_class.where(sql, *params)
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rails3_acts_as_paranoid
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.1.4
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -13,16 +13,16 @@ date: 2012-03-06 00:00:00.000000000Z
|
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activerecord
|
16
|
-
requirement: &
|
16
|
+
requirement: &70234162146040 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ~>
|
20
20
|
- !ruby/object:Gem::Version
|
21
|
-
version: '3.
|
21
|
+
version: '3.1'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
25
|
-
description: Active Record (~>3.
|
24
|
+
version_requirements: *70234162146040
|
25
|
+
description: Active Record (~>3.1) plugin which allows you to hide and restore records
|
26
26
|
without actually deleting them. Check its GitHub page for more in-depth information.
|
27
27
|
email:
|
28
28
|
- goncalossilva@gmail.com
|
@@ -34,7 +34,7 @@ files:
|
|
34
34
|
- lib/validations/uniqueness_without_deleted.rb
|
35
35
|
- LICENSE
|
36
36
|
- README.markdown
|
37
|
-
homepage:
|
37
|
+
homepage: https://github.com/softcraft-development/rails3_acts_as_paranoid
|
38
38
|
licenses: []
|
39
39
|
post_install_message:
|
40
40
|
rdoc_options: []
|
@@ -48,7 +48,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
48
48
|
version: '0'
|
49
49
|
segments:
|
50
50
|
- 0
|
51
|
-
hash: -
|
51
|
+
hash: -2074595129237887781
|
52
52
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
53
53
|
none: false
|
54
54
|
requirements:
|
@@ -60,6 +60,6 @@ rubyforge_project: rails3_acts_as_paranoid
|
|
60
60
|
rubygems_version: 1.8.10
|
61
61
|
signing_key:
|
62
62
|
specification_version: 3
|
63
|
-
summary: Active Record (~>3.
|
63
|
+
summary: Active Record (~>3.1) plugin which allows you to hide and restore records
|
64
64
|
without actually deleting them.
|
65
65
|
test_files: []
|