soft_destroyable 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
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