soft_destroyable 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/Gemfile +1 -0
- data/README.textile +77 -0
- data/VERSION +1 -1
- data/soft_destroyable.gemspec +106 -0
- metadata +149 -9
- data/README +0 -18
data/Gemfile
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
gemspec
|
data/README.textile
ADDED
@@ -0,0 +1,77 @@
|
|
1
|
+
h2. SoftDestroyable
|
2
|
+
|
3
|
+
Allows one to annotate an ActiveRecord module as being soft_destroyable.
|
4
|
+
|
5
|
+
h3. Why another soft_destroy implementation?
|
6
|
+
|
7
|
+
This gem was inspired by "acts_as_paranoid":http://github.com/technoweenie/acts_as_paranoid and
|
8
|
+
"rails3_acts_as_paranoid":https://github.com/goncalossilva/rails3_acts_as_paranoid, both of which are great gems.
|
9
|
+
I found that rails3_acts_as_paranoid did not handle associations the way I wanted (at least at the time I wrote this),
|
10
|
+
so I wrote this implementation instead.
|
11
|
+
|
12
|
+
h3. Details
|
13
|
+
|
14
|
+
This changes the behavior of the +destroy+ method to become a soft-destroy, which
|
15
|
+
will set the +deleted_at+ attribute to <tt>Time.now</tt>, and the +deleted+ attribute to <tt>true</tt>
|
16
|
+
It exposes the +revive+ method to reverse the effects of +destroy+.
|
17
|
+
It also exposes the +destroy!+ method which can be used to <b>really</b> destroy an object and it's associations.
|
18
|
+
|
19
|
+
Standard ActiveRecord destroy callbacks are _not_ called, however you can override +before_soft_destroy+, +after_soft_destroy+,
|
20
|
+
and +before_destroy!+ on your soft_destroyable models.
|
21
|
+
|
22
|
+
Standard ActiveRecord dependent options :destroy, :restrict, :nullify, :delete_all, and :delete are supported and will
|
23
|
+
behave as expected. +revive+ will _not_ undo the effects of +nullify+, +delete_all+, and +delete+.
|
24
|
+
+restrict+ is _not_ effected by the +deleted?+ state. In other words, deleted child models will still restrict
|
25
|
+
destroying the parent.
|
26
|
+
|
27
|
+
The +delete+ operation is _not_ modified by this module.
|
28
|
+
|
29
|
+
The operations: +destroy+, +destroy!+, and +revive+ are automatically delegated to the dependent association records.
|
30
|
+
in a single transaction.
|
31
|
+
|
32
|
+
Scopes are provided for +deleted+ and +not_deleted+. The standard +all+ scope is not polluted, so will still
|
33
|
+
return all records, deleted or not.
|
34
|
+
|
35
|
+
Examples:
|
36
|
+
|
37
|
+
Author: Michael Kintzer
|
38
|
+
|
39
|
+
h3. Examples
|
40
|
+
|
41
|
+
* Migrate your model to add +deleted+ and +deleted_at+ attributes. There are helpers provided for this:
|
42
|
+
|
43
|
+
create_table :mytable do |t|
|
44
|
+
t.soft_destroyable
|
45
|
+
end
|
46
|
+
|
47
|
+
change_table :mytable do |t|
|
48
|
+
t.soft_destroyable
|
49
|
+
end
|
50
|
+
|
51
|
+
* Annotate your model to be soft_destroyable
|
52
|
+
|
53
|
+
class Parent
|
54
|
+
has_many :children, :dependent => :restrict
|
55
|
+
has_many :animals, :dependent => :nullify
|
56
|
+
soft_destroyable
|
57
|
+
|
58
|
+
* That's it!
|
59
|
+
|
60
|
+
h3. Testing
|
61
|
+
|
62
|
+
* make sure you have rails and sqlite gems installed.
|
63
|
+
* rake test
|
64
|
+
|
65
|
+
h3. Note on Patches/Pull Requests
|
66
|
+
|
67
|
+
* Fork the project.
|
68
|
+
* Make your feature addition or bug fix.
|
69
|
+
* Add tests for it. This is important so I don't break it in a
|
70
|
+
future version unintentionally.
|
71
|
+
* Commit, do not mess with rakefile, version, or history.
|
72
|
+
(if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)
|
73
|
+
* Send me a pull request. Bonus points for topic branches.
|
74
|
+
|
75
|
+
h3. Copyright
|
76
|
+
|
77
|
+
Copyright (c) 2010-11 Michael Kintzer, released under the MIT license
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.1.
|
1
|
+
0.1.1
|
@@ -0,0 +1,106 @@
|
|
1
|
+
# Generated by jeweler
|
2
|
+
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
+
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
4
|
+
# -*- encoding: utf-8 -*-
|
5
|
+
|
6
|
+
Gem::Specification.new do |s|
|
7
|
+
s.name = %q{soft_destroyable}
|
8
|
+
s.version = "0.1.1"
|
9
|
+
|
10
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
|
+
s.authors = ["Michael Kintzer"]
|
12
|
+
s.date = %q{2011-03-05}
|
13
|
+
s.description = %q{Rails 3 ActiveRecord compatible soft destroy implementation supporting dependent associations}
|
14
|
+
s.email = %q{rockrep@yahoo.com}
|
15
|
+
s.extra_rdoc_files = [
|
16
|
+
"README.textile"
|
17
|
+
]
|
18
|
+
s.files = [
|
19
|
+
"Gemfile",
|
20
|
+
"MIT-LICENSE",
|
21
|
+
"README.textile",
|
22
|
+
"Rakefile",
|
23
|
+
"VERSION",
|
24
|
+
"init.rb",
|
25
|
+
"install.rb",
|
26
|
+
"lib/soft_destroyable.rb",
|
27
|
+
"lib/soft_destroyable/is_soft_destroyable.rb",
|
28
|
+
"lib/soft_destroyable/table_definition.rb",
|
29
|
+
"soft_destroyable.gemspec",
|
30
|
+
"spec/support/soft_destroy_spec_helper.rb",
|
31
|
+
"test/basic_test.rb",
|
32
|
+
"test/callback_test.rb",
|
33
|
+
"test/class_method_test.rb",
|
34
|
+
"test/dependent_delete_all_test.rb",
|
35
|
+
"test/dependent_delete_test.rb",
|
36
|
+
"test/dependent_destroy_test.rb",
|
37
|
+
"test/dependent_nullify_test.rb",
|
38
|
+
"test/dependent_restrict_test.rb",
|
39
|
+
"test/non_dependent_test.rb",
|
40
|
+
"test/test_helper.rb",
|
41
|
+
"test/through_associations_test.rb",
|
42
|
+
"uninstall.rb"
|
43
|
+
]
|
44
|
+
s.homepage = %q{http://github.com/rockrep/soft_destroyable}
|
45
|
+
s.require_paths = ["lib"]
|
46
|
+
s.rubygems_version = %q{1.3.7}
|
47
|
+
s.summary = %q{Rails 3 ActiveRecord compatible soft destroy implementation}
|
48
|
+
s.test_files = [
|
49
|
+
"spec/support/soft_destroy_spec_helper.rb",
|
50
|
+
"test/basic_test.rb",
|
51
|
+
"test/callback_test.rb",
|
52
|
+
"test/class_method_test.rb",
|
53
|
+
"test/dependent_delete_all_test.rb",
|
54
|
+
"test/dependent_delete_test.rb",
|
55
|
+
"test/dependent_destroy_test.rb",
|
56
|
+
"test/dependent_nullify_test.rb",
|
57
|
+
"test/dependent_restrict_test.rb",
|
58
|
+
"test/non_dependent_test.rb",
|
59
|
+
"test/test_helper.rb",
|
60
|
+
"test/through_associations_test.rb"
|
61
|
+
]
|
62
|
+
|
63
|
+
if s.respond_to? :specification_version then
|
64
|
+
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
65
|
+
s.specification_version = 3
|
66
|
+
|
67
|
+
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
68
|
+
s.add_runtime_dependency(%q<soft_destroyable>, [">= 0"])
|
69
|
+
s.add_development_dependency(%q<rails>, [">= 3.0"])
|
70
|
+
s.add_development_dependency(%q<sqlite3>, [">= 1.3.3"])
|
71
|
+
s.add_development_dependency(%q<rails>, [">= 3.0"])
|
72
|
+
s.add_development_dependency(%q<sqlite3>, [">= 1.3.3"])
|
73
|
+
s.add_development_dependency(%q<rails>, [">= 3.0"])
|
74
|
+
s.add_development_dependency(%q<sqlite3>, [">= 1.3.3"])
|
75
|
+
s.add_development_dependency(%q<rails>, [">= 3.0"])
|
76
|
+
s.add_development_dependency(%q<sqlite3>, [">= 1.3.3"])
|
77
|
+
s.add_development_dependency(%q<rails>, [">= 3.0"])
|
78
|
+
s.add_development_dependency(%q<sqlite3>, [">= 1.3.3"])
|
79
|
+
else
|
80
|
+
s.add_dependency(%q<soft_destroyable>, [">= 0"])
|
81
|
+
s.add_dependency(%q<rails>, [">= 3.0"])
|
82
|
+
s.add_dependency(%q<sqlite3>, [">= 1.3.3"])
|
83
|
+
s.add_dependency(%q<rails>, [">= 3.0"])
|
84
|
+
s.add_dependency(%q<sqlite3>, [">= 1.3.3"])
|
85
|
+
s.add_dependency(%q<rails>, [">= 3.0"])
|
86
|
+
s.add_dependency(%q<sqlite3>, [">= 1.3.3"])
|
87
|
+
s.add_dependency(%q<rails>, [">= 3.0"])
|
88
|
+
s.add_dependency(%q<sqlite3>, [">= 1.3.3"])
|
89
|
+
s.add_dependency(%q<rails>, [">= 3.0"])
|
90
|
+
s.add_dependency(%q<sqlite3>, [">= 1.3.3"])
|
91
|
+
end
|
92
|
+
else
|
93
|
+
s.add_dependency(%q<soft_destroyable>, [">= 0"])
|
94
|
+
s.add_dependency(%q<rails>, [">= 3.0"])
|
95
|
+
s.add_dependency(%q<sqlite3>, [">= 1.3.3"])
|
96
|
+
s.add_dependency(%q<rails>, [">= 3.0"])
|
97
|
+
s.add_dependency(%q<sqlite3>, [">= 1.3.3"])
|
98
|
+
s.add_dependency(%q<rails>, [">= 3.0"])
|
99
|
+
s.add_dependency(%q<sqlite3>, [">= 1.3.3"])
|
100
|
+
s.add_dependency(%q<rails>, [">= 3.0"])
|
101
|
+
s.add_dependency(%q<sqlite3>, [">= 1.3.3"])
|
102
|
+
s.add_dependency(%q<rails>, [">= 3.0"])
|
103
|
+
s.add_dependency(%q<sqlite3>, [">= 1.3.3"])
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: soft_destroyable
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 25
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 1
|
9
|
-
-
|
10
|
-
version: 0.1.
|
9
|
+
- 1
|
10
|
+
version: 0.1.1
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Michael Kintzer
|
@@ -19,9 +19,55 @@ date: 2011-03-05 00:00:00 -08:00
|
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
name: soft_destroyable
|
25
|
+
version_requirements: &id001 !ruby/object:Gem::Requirement
|
26
|
+
none: false
|
27
|
+
requirements:
|
28
|
+
- - ">="
|
29
|
+
- !ruby/object:Gem::Version
|
30
|
+
hash: 3
|
31
|
+
segments:
|
32
|
+
- 0
|
33
|
+
version: "0"
|
34
|
+
requirement: *id001
|
35
|
+
- !ruby/object:Gem::Dependency
|
36
|
+
type: :development
|
37
|
+
prerelease: false
|
22
38
|
name: rails
|
39
|
+
version_requirements: &id002 !ruby/object:Gem::Requirement
|
40
|
+
none: false
|
41
|
+
requirements:
|
42
|
+
- - ">="
|
43
|
+
- !ruby/object:Gem::Version
|
44
|
+
hash: 7
|
45
|
+
segments:
|
46
|
+
- 3
|
47
|
+
- 0
|
48
|
+
version: "3.0"
|
49
|
+
requirement: *id002
|
50
|
+
- !ruby/object:Gem::Dependency
|
51
|
+
type: :development
|
23
52
|
prerelease: false
|
24
|
-
|
53
|
+
name: sqlite3
|
54
|
+
version_requirements: &id003 !ruby/object:Gem::Requirement
|
55
|
+
none: false
|
56
|
+
requirements:
|
57
|
+
- - ">="
|
58
|
+
- !ruby/object:Gem::Version
|
59
|
+
hash: 29
|
60
|
+
segments:
|
61
|
+
- 1
|
62
|
+
- 3
|
63
|
+
- 3
|
64
|
+
version: 1.3.3
|
65
|
+
requirement: *id003
|
66
|
+
- !ruby/object:Gem::Dependency
|
67
|
+
type: :development
|
68
|
+
prerelease: false
|
69
|
+
name: rails
|
70
|
+
version_requirements: &id004 !ruby/object:Gem::Requirement
|
25
71
|
none: false
|
26
72
|
requirements:
|
27
73
|
- - ">="
|
@@ -31,12 +77,74 @@ dependencies:
|
|
31
77
|
- 3
|
32
78
|
- 0
|
33
79
|
version: "3.0"
|
80
|
+
requirement: *id004
|
81
|
+
- !ruby/object:Gem::Dependency
|
34
82
|
type: :development
|
35
|
-
|
83
|
+
prerelease: false
|
84
|
+
name: sqlite3
|
85
|
+
version_requirements: &id005 !ruby/object:Gem::Requirement
|
86
|
+
none: false
|
87
|
+
requirements:
|
88
|
+
- - ">="
|
89
|
+
- !ruby/object:Gem::Version
|
90
|
+
hash: 29
|
91
|
+
segments:
|
92
|
+
- 1
|
93
|
+
- 3
|
94
|
+
- 3
|
95
|
+
version: 1.3.3
|
96
|
+
requirement: *id005
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
type: :development
|
99
|
+
prerelease: false
|
100
|
+
name: rails
|
101
|
+
version_requirements: &id006 !ruby/object:Gem::Requirement
|
102
|
+
none: false
|
103
|
+
requirements:
|
104
|
+
- - ">="
|
105
|
+
- !ruby/object:Gem::Version
|
106
|
+
hash: 7
|
107
|
+
segments:
|
108
|
+
- 3
|
109
|
+
- 0
|
110
|
+
version: "3.0"
|
111
|
+
requirement: *id006
|
36
112
|
- !ruby/object:Gem::Dependency
|
113
|
+
type: :development
|
114
|
+
prerelease: false
|
37
115
|
name: sqlite3
|
116
|
+
version_requirements: &id007 !ruby/object:Gem::Requirement
|
117
|
+
none: false
|
118
|
+
requirements:
|
119
|
+
- - ">="
|
120
|
+
- !ruby/object:Gem::Version
|
121
|
+
hash: 29
|
122
|
+
segments:
|
123
|
+
- 1
|
124
|
+
- 3
|
125
|
+
- 3
|
126
|
+
version: 1.3.3
|
127
|
+
requirement: *id007
|
128
|
+
- !ruby/object:Gem::Dependency
|
129
|
+
type: :development
|
38
130
|
prerelease: false
|
39
|
-
|
131
|
+
name: rails
|
132
|
+
version_requirements: &id008 !ruby/object:Gem::Requirement
|
133
|
+
none: false
|
134
|
+
requirements:
|
135
|
+
- - ">="
|
136
|
+
- !ruby/object:Gem::Version
|
137
|
+
hash: 7
|
138
|
+
segments:
|
139
|
+
- 3
|
140
|
+
- 0
|
141
|
+
version: "3.0"
|
142
|
+
requirement: *id008
|
143
|
+
- !ruby/object:Gem::Dependency
|
144
|
+
type: :development
|
145
|
+
prerelease: false
|
146
|
+
name: sqlite3
|
147
|
+
version_requirements: &id009 !ruby/object:Gem::Requirement
|
40
148
|
none: false
|
41
149
|
requirements:
|
42
150
|
- - ">="
|
@@ -47,8 +155,38 @@ dependencies:
|
|
47
155
|
- 3
|
48
156
|
- 3
|
49
157
|
version: 1.3.3
|
158
|
+
requirement: *id009
|
159
|
+
- !ruby/object:Gem::Dependency
|
50
160
|
type: :development
|
51
|
-
|
161
|
+
prerelease: false
|
162
|
+
name: rails
|
163
|
+
version_requirements: &id010 !ruby/object:Gem::Requirement
|
164
|
+
none: false
|
165
|
+
requirements:
|
166
|
+
- - ">="
|
167
|
+
- !ruby/object:Gem::Version
|
168
|
+
hash: 7
|
169
|
+
segments:
|
170
|
+
- 3
|
171
|
+
- 0
|
172
|
+
version: "3.0"
|
173
|
+
requirement: *id010
|
174
|
+
- !ruby/object:Gem::Dependency
|
175
|
+
type: :development
|
176
|
+
prerelease: false
|
177
|
+
name: sqlite3
|
178
|
+
version_requirements: &id011 !ruby/object:Gem::Requirement
|
179
|
+
none: false
|
180
|
+
requirements:
|
181
|
+
- - ">="
|
182
|
+
- !ruby/object:Gem::Version
|
183
|
+
hash: 29
|
184
|
+
segments:
|
185
|
+
- 1
|
186
|
+
- 3
|
187
|
+
- 3
|
188
|
+
version: 1.3.3
|
189
|
+
requirement: *id011
|
52
190
|
description: Rails 3 ActiveRecord compatible soft destroy implementation supporting dependent associations
|
53
191
|
email: rockrep@yahoo.com
|
54
192
|
executables: []
|
@@ -56,10 +194,11 @@ executables: []
|
|
56
194
|
extensions: []
|
57
195
|
|
58
196
|
extra_rdoc_files:
|
59
|
-
- README
|
197
|
+
- README.textile
|
60
198
|
files:
|
199
|
+
- Gemfile
|
61
200
|
- MIT-LICENSE
|
62
|
-
- README
|
201
|
+
- README.textile
|
63
202
|
- Rakefile
|
64
203
|
- VERSION
|
65
204
|
- init.rb
|
@@ -67,6 +206,7 @@ files:
|
|
67
206
|
- lib/soft_destroyable.rb
|
68
207
|
- lib/soft_destroyable/is_soft_destroyable.rb
|
69
208
|
- lib/soft_destroyable/table_definition.rb
|
209
|
+
- soft_destroyable.gemspec
|
70
210
|
- spec/support/soft_destroy_spec_helper.rb
|
71
211
|
- test/basic_test.rb
|
72
212
|
- test/callback_test.rb
|
data/README
DELETED
@@ -1,18 +0,0 @@
|
|
1
|
-
SoftDestroyable
|
2
|
-
===============
|
3
|
-
|
4
|
-
Description goes here.
|
5
|
-
|
6
|
-
== Note on Patches/Pull Requests
|
7
|
-
|
8
|
-
* Fork the project.
|
9
|
-
* Make your feature addition or bug fix.
|
10
|
-
* Add tests for it. This is important so I don't break it in a
|
11
|
-
future version unintentionally.
|
12
|
-
* Commit, do not mess with rakefile, version, or history.
|
13
|
-
(if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)
|
14
|
-
* Send me a pull request. Bonus points for topic branches.
|
15
|
-
|
16
|
-
== Copyright
|
17
|
-
|
18
|
-
Copyright (c) 2010-11 Michael Kintzer, released under the MIT license
|