soft_deletion 0.1.8 → 0.1.9
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/Gemfile +1 -1
- data/Gemfile.lock +3 -5
- data/gemfiles/rails2.gemfile +1 -1
- data/gemfiles/rails2.gemfile.lock +3 -5
- data/gemfiles/rails3.gemfile +1 -1
- data/gemfiles/rails3.gemfile.lock +3 -5
- data/lib/soft_deletion.rb +2 -4
- data/lib/soft_deletion/version.rb +1 -1
- data/test/soft_deletion_test.rb +16 -102
- data/test/test_helper.rb +122 -0
- metadata +5 -4
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
soft_deletion (0.1.
|
4
|
+
soft_deletion (0.1.9)
|
5
5
|
|
6
6
|
GEM
|
7
7
|
remote: http://rubygems.org/
|
@@ -25,12 +25,10 @@ GEM
|
|
25
25
|
i18n (0.6.0)
|
26
26
|
mocha (0.9.12)
|
27
27
|
multi_json (1.3.4)
|
28
|
-
mynyml-redgreen (0.7.1)
|
29
|
-
term-ansicolor (>= 1.0.4)
|
30
28
|
rake (0.9.2.2)
|
31
29
|
shoulda (2.10.3)
|
32
30
|
sqlite3 (1.3.6)
|
33
|
-
|
31
|
+
test-unit (2.2.0)
|
34
32
|
tzinfo (0.3.33)
|
35
33
|
|
36
34
|
PLATFORMS
|
@@ -41,8 +39,8 @@ DEPENDENCIES
|
|
41
39
|
activesupport
|
42
40
|
appraisal
|
43
41
|
mocha
|
44
|
-
mynyml-redgreen
|
45
42
|
rake
|
46
43
|
shoulda
|
47
44
|
soft_deletion!
|
48
45
|
sqlite3
|
46
|
+
test-unit (= 2.2)
|
data/gemfiles/rails2.gemfile
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: /Users/mgrosser/code/tools/soft_deletion
|
3
3
|
specs:
|
4
|
-
soft_deletion (0.1.
|
4
|
+
soft_deletion (0.1.8)
|
5
5
|
|
6
6
|
GEM
|
7
7
|
remote: http://rubygems.org/
|
@@ -13,12 +13,10 @@ GEM
|
|
13
13
|
bundler
|
14
14
|
rake
|
15
15
|
mocha (0.9.12)
|
16
|
-
mynyml-redgreen (0.7.1)
|
17
|
-
term-ansicolor (>= 1.0.4)
|
18
16
|
rake (0.9.2.2)
|
19
17
|
shoulda (2.10.3)
|
20
18
|
sqlite3 (1.3.6)
|
21
|
-
|
19
|
+
test-unit (2.2.0)
|
22
20
|
|
23
21
|
PLATFORMS
|
24
22
|
ruby
|
@@ -28,8 +26,8 @@ DEPENDENCIES
|
|
28
26
|
activesupport (= 2.3.14)
|
29
27
|
appraisal
|
30
28
|
mocha
|
31
|
-
mynyml-redgreen
|
32
29
|
rake
|
33
30
|
shoulda
|
34
31
|
soft_deletion!
|
35
32
|
sqlite3
|
33
|
+
test-unit (= 2.2)
|
data/gemfiles/rails3.gemfile
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: /Users/mgrosser/code/tools/soft_deletion
|
3
3
|
specs:
|
4
|
-
soft_deletion (0.1.
|
4
|
+
soft_deletion (0.1.8)
|
5
5
|
|
6
6
|
GEM
|
7
7
|
remote: http://rubygems.org/
|
@@ -25,12 +25,10 @@ GEM
|
|
25
25
|
i18n (0.6.0)
|
26
26
|
mocha (0.9.12)
|
27
27
|
multi_json (1.3.4)
|
28
|
-
mynyml-redgreen (0.7.1)
|
29
|
-
term-ansicolor (>= 1.0.4)
|
30
28
|
rake (0.9.2.2)
|
31
29
|
shoulda (2.10.3)
|
32
30
|
sqlite3 (1.3.6)
|
33
|
-
|
31
|
+
test-unit (2.2.0)
|
34
32
|
tzinfo (0.3.33)
|
35
33
|
|
36
34
|
PLATFORMS
|
@@ -41,8 +39,8 @@ DEPENDENCIES
|
|
41
39
|
activesupport (= 3.2.3)
|
42
40
|
appraisal
|
43
41
|
mocha
|
44
|
-
mynyml-redgreen
|
45
42
|
rake
|
46
43
|
shoulda
|
47
44
|
soft_deletion!
|
48
45
|
sqlite3
|
46
|
+
test-unit (= 2.2)
|
data/lib/soft_deletion.rb
CHANGED
@@ -11,12 +11,10 @@ module SoftDeletion
|
|
11
11
|
|
12
12
|
if base.respond_to?(:define_default_soft_delete_scope)
|
13
13
|
base.define_default_soft_delete_scope
|
14
|
-
|
14
|
+
elsif base.table_exists? && base.column_names.include?('deleted_at')
|
15
15
|
# Avoids a bad SQL request with versions of code without the column deleted_at (for example a migration prior to the migration
|
16
16
|
# that adds deleted_at)
|
17
|
-
|
18
|
-
base.send(:default_scope, :conditions => { :deleted_at => nil })
|
19
|
-
end
|
17
|
+
base.send(:default_scope, :conditions => { :deleted_at => nil })
|
20
18
|
end
|
21
19
|
|
22
20
|
# backport after_soft_delete so we can safely upgrade to rails 3
|
data/test/soft_deletion_test.rb
CHANGED
@@ -1,105 +1,4 @@
|
|
1
|
-
require '
|
2
|
-
|
3
|
-
require 'active_support/test_case'
|
4
|
-
require 'shoulda'
|
5
|
-
require 'redgreen'
|
6
|
-
|
7
|
-
# connect
|
8
|
-
ActiveRecord::Base.establish_connection(
|
9
|
-
:adapter => "sqlite3",
|
10
|
-
:database => ":memory:"
|
11
|
-
)
|
12
|
-
|
13
|
-
# create tables
|
14
|
-
ActiveRecord::Schema.define(:version => 1) do
|
15
|
-
create_table :forums do |t|
|
16
|
-
t.integer :category_id
|
17
|
-
t.timestamp :deleted_at
|
18
|
-
end
|
19
|
-
|
20
|
-
create_table :categories do |t|
|
21
|
-
t.timestamp :deleted_at
|
22
|
-
end
|
23
|
-
|
24
|
-
create_table :original_categories do |t|
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
|
-
class ActiveRecord::Base
|
29
|
-
def self.silent_set_table_name(name)
|
30
|
-
if ActiveRecord::VERSION::MAJOR > 2
|
31
|
-
self.table_name = name
|
32
|
-
else
|
33
|
-
set_table_name name
|
34
|
-
end
|
35
|
-
end
|
36
|
-
end
|
37
|
-
|
38
|
-
# setup models
|
39
|
-
class Forum < ActiveRecord::Base
|
40
|
-
include SoftDeletion
|
41
|
-
belongs_to :category
|
42
|
-
end
|
43
|
-
|
44
|
-
class Category < ActiveRecord::Base
|
45
|
-
include SoftDeletion
|
46
|
-
has_many :forums, :dependent => :destroy
|
47
|
-
end
|
48
|
-
|
49
|
-
# No association
|
50
|
-
class NACategory < ActiveRecord::Base
|
51
|
-
silent_set_table_name 'categories'
|
52
|
-
include SoftDeletion
|
53
|
-
end
|
54
|
-
|
55
|
-
# Independent association
|
56
|
-
class IDACategory < ActiveRecord::Base
|
57
|
-
silent_set_table_name 'categories'
|
58
|
-
include SoftDeletion
|
59
|
-
has_many :forums, :dependent => :destroy, :foreign_key => :category_id
|
60
|
-
end
|
61
|
-
|
62
|
-
# Nullified dependent association
|
63
|
-
class NDACategory < ActiveRecord::Base
|
64
|
-
silent_set_table_name 'categories'
|
65
|
-
include SoftDeletion
|
66
|
-
has_many :forums, :dependent => :destroy, :foreign_key => :category_id
|
67
|
-
end
|
68
|
-
|
69
|
-
# Has ome association
|
70
|
-
class HOACategory < ActiveRecord::Base
|
71
|
-
silent_set_table_name 'categories'
|
72
|
-
include SoftDeletion
|
73
|
-
has_one :forum, :dependent => :destroy, :foreign_key => :category_id
|
74
|
-
end
|
75
|
-
|
76
|
-
# Class without column deleted_at
|
77
|
-
class OriginalCategory < ActiveRecord::Base
|
78
|
-
include SoftDeletion
|
79
|
-
end
|
80
|
-
|
81
|
-
# Has many destroyable association
|
82
|
-
class DACategory < ActiveRecord::Base
|
83
|
-
silent_set_table_name 'categories'
|
84
|
-
include SoftDeletion
|
85
|
-
has_many :destroyable_forums, :dependent => :destroy, :foreign_key => :category_id
|
86
|
-
end
|
87
|
-
|
88
|
-
# Forum that isn't soft deletable for association checing
|
89
|
-
class DestroyableForum < ActiveRecord::Base
|
90
|
-
silent_set_table_name 'forums'
|
91
|
-
end
|
92
|
-
|
93
|
-
def clear_callbacks(model, callback)
|
94
|
-
if ActiveRecord::VERSION::MAJOR > 2
|
95
|
-
model.reset_callbacks callback
|
96
|
-
else
|
97
|
-
model.class_eval do
|
98
|
-
instance_variable_set "@before_#{callback}_callbacks", nil
|
99
|
-
instance_variable_set "@after_#{callback}_callbacks", nil
|
100
|
-
end
|
101
|
-
end
|
102
|
-
end
|
1
|
+
require File.expand_path '../test_helper', __FILE__
|
103
2
|
|
104
3
|
class SoftDeletionTest < ActiveSupport::TestCase
|
105
4
|
def assert_deleted(resource)
|
@@ -329,4 +228,19 @@ class SoftDeletionTest < ActiveSupport::TestCase
|
|
329
228
|
end
|
330
229
|
end
|
331
230
|
end
|
231
|
+
|
232
|
+
context "overwritten default scope" do
|
233
|
+
should "find even with deleted_at" do
|
234
|
+
forum = Cat1Forum.create(:deleted_at => Time.now)
|
235
|
+
assert Cat1Forum.find_by_id(forum.id)
|
236
|
+
end
|
237
|
+
|
238
|
+
should "not find by new scope" do
|
239
|
+
# create! does not work here on rails 2
|
240
|
+
forum = Cat1Forum.new
|
241
|
+
forum.category_id = 2
|
242
|
+
forum.save!
|
243
|
+
assert_nil Cat1Forum.find_by_id(forum.id)
|
244
|
+
end
|
245
|
+
end
|
332
246
|
end
|
data/test/test_helper.rb
ADDED
@@ -0,0 +1,122 @@
|
|
1
|
+
require 'active_support/test_case'
|
2
|
+
require 'shoulda'
|
3
|
+
require 'active_record'
|
4
|
+
|
5
|
+
ENV['EMACS'] = 't' # colors for test-unit < 2.4.9
|
6
|
+
|
7
|
+
def clear_callbacks(model, callback)
|
8
|
+
if ActiveRecord::VERSION::MAJOR > 2
|
9
|
+
model.reset_callbacks callback
|
10
|
+
else
|
11
|
+
model.class_eval do
|
12
|
+
instance_variable_set "@before_#{callback}_callbacks", nil
|
13
|
+
instance_variable_set "@after_#{callback}_callbacks", nil
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
# connect
|
19
|
+
ActiveRecord::Base.establish_connection(
|
20
|
+
:adapter => "sqlite3",
|
21
|
+
:database => ":memory:"
|
22
|
+
)
|
23
|
+
|
24
|
+
# create tables
|
25
|
+
ActiveRecord::Schema.define(:version => 1) do
|
26
|
+
create_table :forums do |t|
|
27
|
+
t.integer :category_id
|
28
|
+
t.timestamp :deleted_at
|
29
|
+
end
|
30
|
+
|
31
|
+
create_table :categories do |t|
|
32
|
+
t.timestamp :deleted_at
|
33
|
+
end
|
34
|
+
|
35
|
+
create_table :original_categories do |t|
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
class ActiveRecord::Base
|
40
|
+
def self.silent_set_table_name(name)
|
41
|
+
if ActiveRecord::VERSION::MAJOR > 2
|
42
|
+
self.table_name = name
|
43
|
+
else
|
44
|
+
set_table_name name
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
# setup models
|
50
|
+
require 'soft_deletion'
|
51
|
+
|
52
|
+
class Forum < ActiveRecord::Base
|
53
|
+
include SoftDeletion
|
54
|
+
belongs_to :category
|
55
|
+
end
|
56
|
+
|
57
|
+
class Category < ActiveRecord::Base
|
58
|
+
include SoftDeletion
|
59
|
+
has_many :forums, :dependent => :destroy
|
60
|
+
end
|
61
|
+
|
62
|
+
# No association
|
63
|
+
class NACategory < ActiveRecord::Base
|
64
|
+
silent_set_table_name 'categories'
|
65
|
+
include SoftDeletion
|
66
|
+
end
|
67
|
+
|
68
|
+
# Independent association
|
69
|
+
class IDACategory < ActiveRecord::Base
|
70
|
+
silent_set_table_name 'categories'
|
71
|
+
include SoftDeletion
|
72
|
+
has_many :forums, :dependent => :destroy, :foreign_key => :category_id
|
73
|
+
end
|
74
|
+
|
75
|
+
# Nullified dependent association
|
76
|
+
class NDACategory < ActiveRecord::Base
|
77
|
+
silent_set_table_name 'categories'
|
78
|
+
include SoftDeletion
|
79
|
+
has_many :forums, :dependent => :destroy, :foreign_key => :category_id
|
80
|
+
end
|
81
|
+
|
82
|
+
# Has ome association
|
83
|
+
class HOACategory < ActiveRecord::Base
|
84
|
+
silent_set_table_name 'categories'
|
85
|
+
include SoftDeletion
|
86
|
+
has_one :forum, :dependent => :destroy, :foreign_key => :category_id
|
87
|
+
end
|
88
|
+
|
89
|
+
# Class without column deleted_at
|
90
|
+
class OriginalCategory < ActiveRecord::Base
|
91
|
+
include SoftDeletion
|
92
|
+
end
|
93
|
+
|
94
|
+
# Has many destroyable association
|
95
|
+
class DACategory < ActiveRecord::Base
|
96
|
+
silent_set_table_name 'categories'
|
97
|
+
include SoftDeletion
|
98
|
+
has_many :destroyable_forums, :dependent => :destroy, :foreign_key => :category_id
|
99
|
+
end
|
100
|
+
|
101
|
+
# Forum that isn't soft deletable for association checking
|
102
|
+
class DestroyableForum < ActiveRecord::Base
|
103
|
+
silent_set_table_name 'forums'
|
104
|
+
end
|
105
|
+
|
106
|
+
# test that it does not blow up when the table is not yet defined (e.g. in rake db:reset)
|
107
|
+
class NoTable < ActiveRecord::Base
|
108
|
+
include SoftDeletion
|
109
|
+
end
|
110
|
+
|
111
|
+
# Forum with other default scope
|
112
|
+
class Cat1Forum < ActiveRecord::Base
|
113
|
+
silent_set_table_name 'forums'
|
114
|
+
|
115
|
+
def self.define_default_soft_delete_scope
|
116
|
+
default_scope :conditions => {:category_id => 1}
|
117
|
+
end
|
118
|
+
|
119
|
+
include SoftDeletion
|
120
|
+
belongs_to :category
|
121
|
+
end
|
122
|
+
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: soft_deletion
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 9
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 1
|
9
|
-
-
|
10
|
-
version: 0.1.
|
9
|
+
- 9
|
10
|
+
version: 0.1.9
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Zendesk
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2012-06-
|
18
|
+
date: 2012-06-29 00:00:00 Z
|
19
19
|
dependencies: []
|
20
20
|
|
21
21
|
description:
|
@@ -43,6 +43,7 @@ files:
|
|
43
43
|
- lib/soft_deletion/version.rb
|
44
44
|
- soft_deletion.gemspec
|
45
45
|
- test/soft_deletion_test.rb
|
46
|
+
- test/test_helper.rb
|
46
47
|
homepage: http://github.com/grosser/soft_deletion
|
47
48
|
licenses:
|
48
49
|
- MIT
|