rails3_acts_as_paranoid 0.2.4 → 0.2.5
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 +1 -1
- data/lib/acts_as_paranoid/associations.rb +11 -9
- data/lib/acts_as_paranoid/core.rb +31 -9
- data/lib/acts_as_paranoid/validations.rb +3 -1
- metadata +7 -6
data/README.markdown
CHANGED
@@ -33,7 +33,7 @@ The values shown are the defaults. While *column* can be anything (as long as it
|
|
33
33
|
- `time` or
|
34
34
|
- `string`
|
35
35
|
|
36
|
-
If your column type is a `string`, you can also specify which value to use when marking an object as deleted by passing `:deleted_value` (default is "deleted").
|
36
|
+
If your column type is a `string`, you can also specify which value to use when marking an object as deleted by passing `:deleted_value` (default is "deleted"). Any records with a non-matching value in this column will be treated normally (ie: not deleted).
|
37
37
|
|
38
38
|
### Filtering
|
39
39
|
|
@@ -14,15 +14,17 @@ module ActsAsParanoid
|
|
14
14
|
|
15
15
|
if with_deleted
|
16
16
|
result.options[:with_deleted] = with_deleted
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
17
|
+
unless method_defined? "#{target}_with_unscoped"
|
18
|
+
class_eval <<-RUBY, __FILE__, __LINE__
|
19
|
+
def #{target}_with_unscoped(*args)
|
20
|
+
association = association(:#{target})
|
21
|
+
return nil if association.options[:polymorphic] && association.klass.nil?
|
22
|
+
return #{target}_without_unscoped(*args) unless association.klass.paranoid?
|
23
|
+
association.klass.with_deleted.scoping { #{target}_without_unscoped(*args) }
|
24
|
+
end
|
25
|
+
alias_method_chain :#{target}, :unscoped
|
26
|
+
RUBY
|
27
|
+
end
|
26
28
|
end
|
27
29
|
|
28
30
|
result
|
@@ -22,7 +22,11 @@ module ActsAsParanoid
|
|
22
22
|
end
|
23
23
|
|
24
24
|
def only_deleted
|
25
|
-
|
25
|
+
if string_type_with_deleted_value?
|
26
|
+
without_paranoid_default_scope.where("#{paranoid_column_reference} IS ?", paranoid_configuration[:deleted_value])
|
27
|
+
else
|
28
|
+
without_paranoid_default_scope.where("#{paranoid_column_reference} IS NOT ?", nil)
|
29
|
+
end
|
26
30
|
end
|
27
31
|
|
28
32
|
def delete_all!(conditions = nil)
|
@@ -34,7 +38,17 @@ module ActsAsParanoid
|
|
34
38
|
end
|
35
39
|
|
36
40
|
def paranoid_default_scope_sql
|
37
|
-
|
41
|
+
if string_type_with_deleted_value?
|
42
|
+
self.scoped.table[paranoid_column].eq(nil).
|
43
|
+
or(self.scoped.table[paranoid_column].not_eq(paranoid_configuration[:deleted_value])).
|
44
|
+
to_sql
|
45
|
+
else
|
46
|
+
self.scoped.table[paranoid_column].eq(nil).to_sql
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
def string_type_with_deleted_value?
|
51
|
+
paranoid_column_type == :string && !paranoid_configuration[:deleted_value].nil?
|
38
52
|
end
|
39
53
|
|
40
54
|
def paranoid_column
|
@@ -67,6 +81,10 @@ module ActsAsParanoid
|
|
67
81
|
end
|
68
82
|
end
|
69
83
|
|
84
|
+
def persisted?
|
85
|
+
!(new_record? || @destroyed)
|
86
|
+
end
|
87
|
+
|
70
88
|
def paranoid_value
|
71
89
|
self.send(self.class.paranoid_column)
|
72
90
|
end
|
@@ -75,7 +93,8 @@ module ActsAsParanoid
|
|
75
93
|
with_transaction_returning_status do
|
76
94
|
run_callbacks :destroy do
|
77
95
|
destroy_dependent_associations!
|
78
|
-
self.class.
|
96
|
+
# Handle composite keys, otherwise we would just use `self.class.primary_key.to_sym => self.id`.
|
97
|
+
self.class.delete_all!(Hash[[Array(self.class.primary_key), Array(self.id)].transpose])
|
79
98
|
self.paranoid_value = self.class.delete_now_value
|
80
99
|
freeze
|
81
100
|
end
|
@@ -83,10 +102,11 @@ module ActsAsParanoid
|
|
83
102
|
end
|
84
103
|
|
85
104
|
def destroy
|
86
|
-
if
|
105
|
+
if !deleted?
|
87
106
|
with_transaction_returning_status do
|
88
107
|
run_callbacks :destroy do
|
89
|
-
self.class.
|
108
|
+
# Handle composite keys, otherwise we would just use `self.class.primary_key.to_sym => self.id`.
|
109
|
+
self.class.delete_all(Hash[[Array(self.class.primary_key), Array(self.id)].transpose])
|
90
110
|
self.paranoid_value = self.class.delete_now_value
|
91
111
|
self
|
92
112
|
end
|
@@ -117,7 +137,7 @@ module ActsAsParanoid
|
|
117
137
|
next unless reflection.klass.paranoid?
|
118
138
|
|
119
139
|
scope = reflection.klass.only_deleted
|
120
|
-
|
140
|
+
|
121
141
|
# Merge in the association's scope
|
122
142
|
scope = scope.merge(association(reflection.name).association_scope)
|
123
143
|
|
@@ -132,13 +152,13 @@ module ActsAsParanoid
|
|
132
152
|
end
|
133
153
|
end
|
134
154
|
end
|
135
|
-
|
155
|
+
|
136
156
|
def destroy_dependent_associations!
|
137
157
|
self.class.dependent_associations.each do |reflection|
|
138
158
|
next unless reflection.klass.paranoid?
|
139
159
|
|
140
160
|
scope = reflection.klass.only_deleted
|
141
|
-
|
161
|
+
|
142
162
|
# Merge in the association's scope
|
143
163
|
scope = scope.merge(association(reflection.name).association_scope)
|
144
164
|
|
@@ -149,8 +169,10 @@ module ActsAsParanoid
|
|
149
169
|
end
|
150
170
|
|
151
171
|
def deleted?
|
152
|
-
!paranoid_value.nil?
|
172
|
+
!(paranoid_value.nil? ||
|
173
|
+
(self.class.string_type_with_deleted_value? && paranoid_value != self.class.delete_now_value))
|
153
174
|
end
|
175
|
+
|
154
176
|
alias_method :destroyed?, :deleted?
|
155
177
|
|
156
178
|
private
|
@@ -18,7 +18,9 @@ module ActsAsParanoid
|
|
18
18
|
end
|
19
19
|
|
20
20
|
relation = build_relation(finder_class, table, attribute, value)
|
21
|
-
|
21
|
+
[Array(finder_class.primary_key), Array(record.send(:id))].transpose.each do |pk_key, pk_value|
|
22
|
+
relation = relation.and(table[pk_key.to_sym].not_eq(pk_value))
|
23
|
+
end if record.persisted?
|
22
24
|
|
23
25
|
Array.wrap(options[:scope]).each do |scope_item|
|
24
26
|
scope_value = record.send(scope_item)
|
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.2.
|
4
|
+
version: 0.2.5
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-12-09 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activerecord
|
16
|
-
requirement: &
|
16
|
+
requirement: &70338444648540 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ~>
|
@@ -21,7 +21,7 @@ dependencies:
|
|
21
21
|
version: '3.2'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *70338444648540
|
25
25
|
description: Active Record (~>3.2) 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:
|
@@ -39,7 +39,8 @@ files:
|
|
39
39
|
- README.markdown
|
40
40
|
homepage: https://github.com/goncalossilva/rails3_acts_as_paranoid
|
41
41
|
licenses: []
|
42
|
-
post_install_message:
|
42
|
+
post_install_message: ! "\n=======================================\n\n This gem has
|
43
|
+
moved!\n\n To stay up to date, run:\n\n $ gem install 'acts_as_paranoid'\"\n\n=======================================\n\n"
|
43
44
|
rdoc_options: []
|
44
45
|
require_paths:
|
45
46
|
- lib
|
@@ -51,7 +52,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
51
52
|
version: '0'
|
52
53
|
segments:
|
53
54
|
- 0
|
54
|
-
hash:
|
55
|
+
hash: 375772570073154179
|
55
56
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
56
57
|
none: false
|
57
58
|
requirements:
|