soft_deletion 0.1.0 → 0.1.1
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/Appraisals +11 -0
- data/Gemfile +8 -11
- data/Gemfile.lock +24 -7
- data/Rakefile +5 -0
- data/gemfiles/rails2.gemfile +14 -0
- data/gemfiles/rails2.gemfile.lock +35 -0
- data/gemfiles/rails3.gemfile +14 -0
- data/gemfiles/rails3.gemfile.lock +48 -0
- data/lib/soft_deletion/version.rb +1 -1
- data/lib/soft_deletion.rb +26 -5
- data/test/soft_deletion_test.rb +22 -5
- metadata +40 -22
data/Appraisals
ADDED
data/Gemfile
CHANGED
@@ -1,14 +1,11 @@
|
|
1
1
|
source :rubygems
|
2
2
|
gemspec
|
3
3
|
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
gem 'sqlite3'
|
13
|
-
gem 'mynyml-redgreen'
|
14
|
-
end
|
4
|
+
gem 'appraisal'
|
5
|
+
gem 'activerecord'
|
6
|
+
gem 'activesupport'
|
7
|
+
gem 'rake'
|
8
|
+
gem 'shoulda'
|
9
|
+
gem 'mocha'
|
10
|
+
gem 'sqlite3'
|
11
|
+
gem 'mynyml-redgreen'
|
data/Gemfile.lock
CHANGED
@@ -1,28 +1,45 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
soft_deletion (0.1.
|
4
|
+
soft_deletion (0.1.1)
|
5
5
|
|
6
6
|
GEM
|
7
7
|
remote: http://rubygems.org/
|
8
8
|
specs:
|
9
|
-
|
10
|
-
activesupport (= 2.3
|
11
|
-
|
9
|
+
activemodel (3.2.3)
|
10
|
+
activesupport (= 3.2.3)
|
11
|
+
builder (~> 3.0.0)
|
12
|
+
activerecord (3.2.3)
|
13
|
+
activemodel (= 3.2.3)
|
14
|
+
activesupport (= 3.2.3)
|
15
|
+
arel (~> 3.0.2)
|
16
|
+
tzinfo (~> 0.3.29)
|
17
|
+
activesupport (3.2.3)
|
18
|
+
i18n (~> 0.6)
|
19
|
+
multi_json (~> 1.0)
|
20
|
+
appraisal (0.4.1)
|
21
|
+
bundler
|
22
|
+
rake
|
23
|
+
arel (3.0.2)
|
24
|
+
builder (3.0.0)
|
25
|
+
i18n (0.6.0)
|
12
26
|
mocha (0.9.12)
|
27
|
+
multi_json (1.3.4)
|
13
28
|
mynyml-redgreen (0.7.1)
|
14
29
|
term-ansicolor (>= 1.0.4)
|
15
|
-
rake (0.9.2)
|
30
|
+
rake (0.9.2.2)
|
16
31
|
shoulda (2.10.3)
|
17
32
|
sqlite3 (1.3.6)
|
18
33
|
term-ansicolor (1.0.7)
|
34
|
+
tzinfo (0.3.33)
|
19
35
|
|
20
36
|
PLATFORMS
|
21
37
|
ruby
|
22
38
|
|
23
39
|
DEPENDENCIES
|
24
|
-
activerecord
|
25
|
-
activesupport
|
40
|
+
activerecord
|
41
|
+
activesupport
|
42
|
+
appraisal
|
26
43
|
mocha
|
27
44
|
mynyml-redgreen
|
28
45
|
rake
|
data/Rakefile
CHANGED
@@ -0,0 +1,14 @@
|
|
1
|
+
# This file was generated by Appraisal
|
2
|
+
|
3
|
+
source :rubygems
|
4
|
+
|
5
|
+
gem "appraisal"
|
6
|
+
gem "rake"
|
7
|
+
gem "shoulda"
|
8
|
+
gem "mocha"
|
9
|
+
gem "sqlite3"
|
10
|
+
gem "mynyml-redgreen"
|
11
|
+
gem "activerecord", "2.3.14"
|
12
|
+
gem "activesupport", "2.3.14"
|
13
|
+
|
14
|
+
gemspec :path=>"../"
|
@@ -0,0 +1,35 @@
|
|
1
|
+
PATH
|
2
|
+
remote: /Users/mgrosser/code/tools/soft_deletion
|
3
|
+
specs:
|
4
|
+
soft_deletion (0.1.0)
|
5
|
+
|
6
|
+
GEM
|
7
|
+
remote: http://rubygems.org/
|
8
|
+
specs:
|
9
|
+
activerecord (2.3.14)
|
10
|
+
activesupport (= 2.3.14)
|
11
|
+
activesupport (2.3.14)
|
12
|
+
appraisal (0.4.1)
|
13
|
+
bundler
|
14
|
+
rake
|
15
|
+
mocha (0.9.12)
|
16
|
+
mynyml-redgreen (0.7.1)
|
17
|
+
term-ansicolor (>= 1.0.4)
|
18
|
+
rake (0.9.2.2)
|
19
|
+
shoulda (2.10.3)
|
20
|
+
sqlite3 (1.3.6)
|
21
|
+
term-ansicolor (1.0.7)
|
22
|
+
|
23
|
+
PLATFORMS
|
24
|
+
ruby
|
25
|
+
|
26
|
+
DEPENDENCIES
|
27
|
+
activerecord (= 2.3.14)
|
28
|
+
activesupport (= 2.3.14)
|
29
|
+
appraisal
|
30
|
+
mocha
|
31
|
+
mynyml-redgreen
|
32
|
+
rake
|
33
|
+
shoulda
|
34
|
+
soft_deletion!
|
35
|
+
sqlite3
|
@@ -0,0 +1,14 @@
|
|
1
|
+
# This file was generated by Appraisal
|
2
|
+
|
3
|
+
source :rubygems
|
4
|
+
|
5
|
+
gem "appraisal"
|
6
|
+
gem "rake"
|
7
|
+
gem "shoulda"
|
8
|
+
gem "mocha"
|
9
|
+
gem "sqlite3"
|
10
|
+
gem "mynyml-redgreen"
|
11
|
+
gem "activerecord", "3.2.3"
|
12
|
+
gem "activesupport", "3.2.3"
|
13
|
+
|
14
|
+
gemspec :path=>"../"
|
@@ -0,0 +1,48 @@
|
|
1
|
+
PATH
|
2
|
+
remote: /Users/mgrosser/code/tools/soft_deletion
|
3
|
+
specs:
|
4
|
+
soft_deletion (0.1.0)
|
5
|
+
|
6
|
+
GEM
|
7
|
+
remote: http://rubygems.org/
|
8
|
+
specs:
|
9
|
+
activemodel (3.2.3)
|
10
|
+
activesupport (= 3.2.3)
|
11
|
+
builder (~> 3.0.0)
|
12
|
+
activerecord (3.2.3)
|
13
|
+
activemodel (= 3.2.3)
|
14
|
+
activesupport (= 3.2.3)
|
15
|
+
arel (~> 3.0.2)
|
16
|
+
tzinfo (~> 0.3.29)
|
17
|
+
activesupport (3.2.3)
|
18
|
+
i18n (~> 0.6)
|
19
|
+
multi_json (~> 1.0)
|
20
|
+
appraisal (0.4.1)
|
21
|
+
bundler
|
22
|
+
rake
|
23
|
+
arel (3.0.2)
|
24
|
+
builder (3.0.0)
|
25
|
+
i18n (0.6.0)
|
26
|
+
mocha (0.9.12)
|
27
|
+
multi_json (1.3.4)
|
28
|
+
mynyml-redgreen (0.7.1)
|
29
|
+
term-ansicolor (>= 1.0.4)
|
30
|
+
rake (0.9.2.2)
|
31
|
+
shoulda (2.10.3)
|
32
|
+
sqlite3 (1.3.6)
|
33
|
+
term-ansicolor (1.0.7)
|
34
|
+
tzinfo (0.3.33)
|
35
|
+
|
36
|
+
PLATFORMS
|
37
|
+
ruby
|
38
|
+
|
39
|
+
DEPENDENCIES
|
40
|
+
activerecord (= 3.2.3)
|
41
|
+
activesupport (= 3.2.3)
|
42
|
+
appraisal
|
43
|
+
mocha
|
44
|
+
mynyml-redgreen
|
45
|
+
rake
|
46
|
+
shoulda
|
47
|
+
soft_deletion!
|
48
|
+
sqlite3
|
data/lib/soft_deletion.rb
CHANGED
@@ -9,7 +9,18 @@ module SoftDeletion
|
|
9
9
|
end
|
10
10
|
base.extend(ClassMethods)
|
11
11
|
base.send(:default_scope, :conditions => base.soft_delete_default_scope_conditions)
|
12
|
-
|
12
|
+
|
13
|
+
# backport after_soft_delete so we can safely upgrade to rails 3
|
14
|
+
if ActiveRecord::VERSION::MAJOR > 2
|
15
|
+
base.define_callbacks :soft_delete
|
16
|
+
class << base
|
17
|
+
def after_soft_delete(callback)
|
18
|
+
set_callback :soft_delete, :after, callback
|
19
|
+
end
|
20
|
+
end
|
21
|
+
else
|
22
|
+
base.define_callbacks :after_soft_delete
|
23
|
+
end
|
13
24
|
end
|
14
25
|
|
15
26
|
module ClassMethods
|
@@ -44,10 +55,14 @@ module SoftDeletion
|
|
44
55
|
|
45
56
|
def soft_delete!
|
46
57
|
self.class.transaction do
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
58
|
+
if ActiveRecord::VERSION::MAJOR > 2
|
59
|
+
run_callbacks :soft_delete do
|
60
|
+
_soft_delete!
|
61
|
+
end
|
62
|
+
else
|
63
|
+
_soft_delete!
|
64
|
+
run_callbacks :after_soft_delete
|
65
|
+
end
|
51
66
|
end
|
52
67
|
end
|
53
68
|
|
@@ -61,6 +76,12 @@ module SoftDeletion
|
|
61
76
|
|
62
77
|
protected
|
63
78
|
|
79
|
+
def _soft_delete!
|
80
|
+
mark_as_deleted
|
81
|
+
soft_delete_dependencies.each(&:soft_delete!)
|
82
|
+
save!
|
83
|
+
end
|
84
|
+
|
64
85
|
def soft_delete_dependencies
|
65
86
|
self.class.soft_delete_dependents.map { |dependent| Dependency.new(self, dependent) }
|
66
87
|
end
|
data/test/soft_deletion_test.rb
CHANGED
@@ -22,6 +22,16 @@ ActiveRecord::Schema.define(:version => 1) do
|
|
22
22
|
end
|
23
23
|
end
|
24
24
|
|
25
|
+
class ActiveRecord::Base
|
26
|
+
def self.silent_set_table_name(name)
|
27
|
+
if ActiveRecord::VERSION::MAJOR > 2
|
28
|
+
self.table_name = name
|
29
|
+
else
|
30
|
+
set_table_name name
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
25
35
|
# setup models
|
26
36
|
class Forum < ActiveRecord::Base
|
27
37
|
include SoftDeletion
|
@@ -35,23 +45,31 @@ end
|
|
35
45
|
|
36
46
|
class NoAssociationCategory < ActiveRecord::Base
|
37
47
|
include SoftDeletion
|
38
|
-
|
48
|
+
silent_set_table_name 'categories'
|
39
49
|
end
|
40
50
|
|
41
51
|
# Independent association
|
42
52
|
class IDACategory < ActiveRecord::Base
|
43
53
|
include SoftDeletion
|
44
|
-
|
54
|
+
silent_set_table_name 'categories'
|
45
55
|
has_many :forums, :dependent => :destroy, :foreign_key => :category_id
|
46
56
|
end
|
47
57
|
|
48
58
|
# Nullified dependent association
|
49
59
|
class NDACategory < ActiveRecord::Base
|
50
60
|
include SoftDeletion
|
51
|
-
|
61
|
+
silent_set_table_name 'categories'
|
52
62
|
has_many :forums, :dependent => :destroy, :foreign_key => :category_id
|
53
63
|
end
|
54
64
|
|
65
|
+
def clear_callbacks(model, callback)
|
66
|
+
if ActiveRecord::VERSION::MAJOR > 2
|
67
|
+
model.define_callbacks callback
|
68
|
+
else
|
69
|
+
model.class_eval{ instance_variable_set "@after_#{callback}_callbacks", nil }
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
55
73
|
class SoftDeletionTest < ActiveSupport::TestCase
|
56
74
|
def assert_deleted(resource)
|
57
75
|
resource.class.with_deleted do
|
@@ -66,8 +84,7 @@ class SoftDeletionTest < ActiveSupport::TestCase
|
|
66
84
|
end
|
67
85
|
|
68
86
|
setup do
|
69
|
-
|
70
|
-
Category.class_eval{ @after_soft_delete_callbacks = nil }
|
87
|
+
clear_callbacks Category, :soft_delete
|
71
88
|
end
|
72
89
|
|
73
90
|
context ".after_soft_delete" do
|
metadata
CHANGED
@@ -1,61 +1,79 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: soft_deletion
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 25
|
5
5
|
prerelease:
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 1
|
9
|
+
- 1
|
10
|
+
version: 0.1.1
|
6
11
|
platform: ruby
|
7
|
-
authors:
|
12
|
+
authors:
|
8
13
|
- ZenDesk
|
9
14
|
autorequire:
|
10
15
|
bindir: bin
|
11
16
|
cert_chain: []
|
12
|
-
|
17
|
+
|
18
|
+
date: 2012-05-02 00:00:00 Z
|
13
19
|
dependencies: []
|
20
|
+
|
14
21
|
description:
|
15
22
|
email: michael@grosser.it
|
16
23
|
executables: []
|
24
|
+
|
17
25
|
extensions: []
|
26
|
+
|
18
27
|
extra_rdoc_files: []
|
19
|
-
|
28
|
+
|
29
|
+
files:
|
20
30
|
- .travis.yml
|
31
|
+
- Appraisals
|
21
32
|
- Gemfile
|
22
33
|
- Gemfile.lock
|
23
34
|
- Rakefile
|
24
35
|
- Readme.md
|
36
|
+
- gemfiles/rails2.gemfile
|
37
|
+
- gemfiles/rails2.gemfile.lock
|
38
|
+
- gemfiles/rails3.gemfile
|
39
|
+
- gemfiles/rails3.gemfile.lock
|
25
40
|
- lib/soft_deletion.rb
|
26
41
|
- lib/soft_deletion/dependency.rb
|
27
42
|
- lib/soft_deletion/version.rb
|
28
43
|
- soft_deletion.gemspec
|
29
44
|
- test/soft_deletion_test.rb
|
30
45
|
homepage: http://github.com/grosser/soft_deletion
|
31
|
-
licenses:
|
46
|
+
licenses:
|
32
47
|
- MIT
|
33
48
|
post_install_message:
|
34
49
|
rdoc_options: []
|
35
|
-
|
50
|
+
|
51
|
+
require_paths:
|
36
52
|
- lib
|
37
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
53
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
38
54
|
none: false
|
39
|
-
requirements:
|
40
|
-
- -
|
41
|
-
- !ruby/object:Gem::Version
|
42
|
-
|
43
|
-
segments:
|
55
|
+
requirements:
|
56
|
+
- - ">="
|
57
|
+
- !ruby/object:Gem::Version
|
58
|
+
hash: 3
|
59
|
+
segments:
|
44
60
|
- 0
|
45
|
-
|
46
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
61
|
+
version: "0"
|
62
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
47
63
|
none: false
|
48
|
-
requirements:
|
49
|
-
- -
|
50
|
-
- !ruby/object:Gem::Version
|
51
|
-
|
52
|
-
segments:
|
64
|
+
requirements:
|
65
|
+
- - ">="
|
66
|
+
- !ruby/object:Gem::Version
|
67
|
+
hash: 3
|
68
|
+
segments:
|
53
69
|
- 0
|
54
|
-
|
70
|
+
version: "0"
|
55
71
|
requirements: []
|
72
|
+
|
56
73
|
rubyforge_project:
|
57
74
|
rubygems_version: 1.8.24
|
58
75
|
signing_key:
|
59
76
|
specification_version: 3
|
60
77
|
summary: Explicit soft deletion for ActiveRecord via deleted_at and default scope.
|
61
78
|
test_files: []
|
79
|
+
|