recurse-delete 0.0.4 → 0.0.8
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/lib/recurse-delete.rb +20 -6
- metadata +17 -6
data/lib/recurse-delete.rb
CHANGED
@@ -24,6 +24,8 @@
|
|
24
24
|
require 'valium'
|
25
25
|
|
26
26
|
module RecurseDelete
|
27
|
+
extend ActiveSupport::Concern
|
28
|
+
|
27
29
|
def recurse_delete
|
28
30
|
delete_recursively self.class, self.id
|
29
31
|
end
|
@@ -32,22 +34,34 @@ module RecurseDelete
|
|
32
34
|
# delete all the parent records
|
33
35
|
parent_class.delete_all(:id => parent_ids)
|
34
36
|
|
35
|
-
# get the foreign key for the parent class
|
36
|
-
parent_key = parent_class.to_s.foreign_key
|
37
|
-
|
38
37
|
# get the assocs for the parent class
|
39
38
|
assocs = parent_class.reflect_on_all_associations.select do |assoc|
|
40
39
|
[:destroy, :destroy_all, :delete, :delete_all].include? assoc.options[:dependent]
|
41
40
|
end
|
42
|
-
assocs.
|
41
|
+
assocs.each do |assoc|
|
43
42
|
# get the dependent class
|
44
|
-
dependent_class = assoc.to_s.classify.constantize
|
43
|
+
dependent_class = assoc.name.to_s.classify.constantize
|
44
|
+
# get the foreign key
|
45
|
+
foreign_key = (assoc.options[:foreign_key] or parent_class.to_s.foreign_key)
|
45
46
|
# get all the dependent record ids
|
46
|
-
dependent_ids = dependent_class.where(
|
47
|
+
dependent_ids = dependent_class.where(foreign_key => parent_ids).value_of(:id)
|
47
48
|
# recurse
|
48
49
|
delete_recursively(dependent_class, dependent_ids)
|
49
50
|
end
|
50
51
|
end
|
52
|
+
|
53
|
+
module ClassMethods
|
54
|
+
def recurse_delete_all
|
55
|
+
delete_all
|
56
|
+
assocs = reflect_on_all_associations.select do |assoc|
|
57
|
+
[:destroy, :destroy_all, :delete, :delete_all].include? assoc.options[:dependent]
|
58
|
+
end
|
59
|
+
assocs.each do |assoc|
|
60
|
+
assoc.klass.recurse_delete_all
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
51
65
|
end
|
52
66
|
|
53
67
|
class ActiveRecord::Base
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: recurse-delete
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.8
|
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:
|
12
|
+
date: 2013-02-02 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activerecord
|
16
|
-
requirement: &
|
16
|
+
requirement: &70309449741060 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,21 @@ dependencies:
|
|
21
21
|
version: 3.2.3
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *70309449741060
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: activesupport
|
27
|
+
requirement: &70309449740180 !ruby/object:Gem::Requirement
|
28
|
+
none: false
|
29
|
+
requirements:
|
30
|
+
- - ! '>='
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: 3.2.3
|
33
|
+
type: :runtime
|
34
|
+
prerelease: false
|
35
|
+
version_requirements: *70309449740180
|
25
36
|
- !ruby/object:Gem::Dependency
|
26
37
|
name: valium
|
27
|
-
requirement: &
|
38
|
+
requirement: &70309449755320 !ruby/object:Gem::Requirement
|
28
39
|
none: false
|
29
40
|
requirements:
|
30
41
|
- - =
|
@@ -32,7 +43,7 @@ dependencies:
|
|
32
43
|
version: 0.5.0
|
33
44
|
type: :runtime
|
34
45
|
prerelease: false
|
35
|
-
version_requirements: *
|
46
|
+
version_requirements: *70309449755320
|
36
47
|
description: Recursively delete all dependent model associations without an N + 1
|
37
48
|
email: john.isaacks@programming-perils.com
|
38
49
|
executables: []
|