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.
Files changed (6) hide show
  1. data/Gemfile +1 -0
  2. data/README.textile +77 -0
  3. data/VERSION +1 -1
  4. data/soft_destroyable.gemspec +106 -0
  5. metadata +149 -9
  6. 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.0
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: 27
4
+ hash: 25
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 1
9
- - 0
10
- version: 0.1.0
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
- requirement: &id001 !ruby/object:Gem::Requirement
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
- version_requirements: *id001
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
- requirement: &id002 !ruby/object:Gem::Requirement
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
- version_requirements: *id002
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