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.
Files changed (2) hide show
  1. data/lib/recurse-delete.rb +20 -6
  2. metadata +17 -6
@@ -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.map(&:name).each do |assoc|
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(parent_key => parent_ids).value_of(:id)
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
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: 2012-12-04 00:00:00.000000000 Z
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: &70334481169100 !ruby/object:Gem::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: *70334481169100
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: &70334481166600 !ruby/object:Gem::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: *70334481166600
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: []