soft_deletion 0.4.4 → 0.4.5

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.tar.gz.sig CHANGED
Binary file
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- soft_deletion (0.4.4)
4
+ soft_deletion (0.4.5)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
@@ -9,9 +9,13 @@ module SoftDeletion
9
9
  # backport after_soft_delete so we can safely upgrade to rails 3
10
10
  if ActiveRecord::VERSION::MAJOR > 2
11
11
  base.define_model_callbacks :soft_delete
12
+ base.define_model_callbacks :soft_undelete
12
13
  else
13
14
  base.define_callbacks :before_soft_delete
14
15
  base.define_callbacks :after_soft_delete
16
+
17
+ base.define_callbacks :before_soft_undelete
18
+ base.define_callbacks :after_soft_undelete
15
19
  end
16
20
  end
17
21
 
@@ -84,11 +88,7 @@ module SoftDeletion
84
88
  end
85
89
 
86
90
  def soft_undelete!
87
- self.class.transaction do
88
- mark_as_undeleted
89
- soft_delete_dependencies.each(&:soft_undelete!)
90
- save!
91
- end
91
+ _run_soft_undelete{ save! }
92
92
  end
93
93
 
94
94
  def soft_delete_dependencies
@@ -116,5 +116,25 @@ module SoftDeletion
116
116
  result
117
117
  end
118
118
  end
119
+
120
+ def _run_soft_undelete(&block)
121
+ self.class.transaction do
122
+ result = false
123
+ if ActiveRecord::VERSION::MAJOR > 2
124
+ run_callbacks :soft_undelete do
125
+ mark_as_undeleted
126
+ soft_delete_dependencies.each(&:soft_undelete!)
127
+ result = block.call
128
+ end
129
+ else
130
+ return false if !run_callbacks(:before_soft_undelete) { |result, object| result == false }
131
+ mark_as_undeleted
132
+ soft_delete_dependencies.each(&:soft_undelete!)
133
+ result = block.call
134
+ run_callbacks :after_soft_undelete
135
+ end
136
+ result
137
+ end
138
+ end
119
139
  end
120
140
  end
@@ -1,3 +1,3 @@
1
1
  module SoftDeletion
2
- VERSION = '0.4.4'
2
+ VERSION = '0.4.5'
3
3
  end
@@ -39,6 +39,7 @@ describe SoftDeletion do
39
39
 
40
40
  before do
41
41
  clear_callbacks Category, :soft_delete
42
+ clear_callbacks Category, :soft_undelete
42
43
 
43
44
  # Stub dump method calls
44
45
  Category.any_instance.stub(:foo)
@@ -128,6 +129,80 @@ describe SoftDeletion do
128
129
  category.destroy
129
130
  end
130
131
  end
132
+
133
+ describe ".before_soft_undelete" do
134
+ it "is called on soft-undeletion" do
135
+ Category.before_soft_undelete :foo
136
+ category = Category.create!
137
+
138
+ category.should_receive(:foo)
139
+
140
+ category.soft_undelete!
141
+ end
142
+
143
+ it "stops execution chain if false is returned" do
144
+ Category.before_soft_undelete :foo, :bar
145
+ category = Category.create!
146
+
147
+ category.should_receive(:foo).and_return(false)
148
+ category.should_not_receive(:bar)
149
+
150
+ category.soft_undelete!.should == false
151
+ category.reload
152
+ category.should_not be_deleted
153
+ end
154
+ end
155
+
156
+ describe ".after_soft_undelete" do
157
+ it "is called after soft-undeletion" do
158
+ Category.after_soft_undelete :foo
159
+ category = Category.create!
160
+
161
+ category.should_receive(:foo)
162
+
163
+ category.soft_undelete!
164
+ end
165
+
166
+ it "is called with a block" do
167
+ Category.after_soft_undelete{|c| c.foo }
168
+ category = Category.create!
169
+
170
+ category.should_receive(:foo)
171
+
172
+ category.soft_undelete!
173
+ end
174
+
175
+ it "calls multiple after soft-undeletion" do
176
+ Category.after_soft_undelete :foo, :bar
177
+ category = Category.create!
178
+
179
+ category.should_receive(:foo)
180
+ category.should_receive(:bar)
181
+
182
+ category.soft_undelete!
183
+ end
184
+
185
+ it "does not stop undeletion when returning false" do
186
+ Category.after_soft_undelete :foo
187
+ category = Category.create!
188
+
189
+ category.should_receive(:foo).and_return false
190
+
191
+ category.soft_undelete!
192
+
193
+ category.reload
194
+ category.should_not be_deleted
195
+ end
196
+
197
+ it "is not called after normal destroy" do
198
+ Category.after_soft_undelete :foo
199
+ category = Category.create!
200
+
201
+ category.should_not_receive(:foo)
202
+
203
+ category.destroy
204
+ end
205
+ end
131
206
  end
132
207
 
133
208
  describe "association" do
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: soft_deletion
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.4
4
+ version: 0.4.5
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -36,7 +36,7 @@ cert_chain:
36
36
  VHNmKzZNYWVud0FNa0FnSGRzd0dzSnp0T25ObkJhM0YKeTBrQ1NXbUs2RCt4
37
37
  L1NiZlM2cjdLZTA3TVJxemlKZEI5R3VFMSswY0lSdUZoOEVRK0xONkhYQ0tN
38
38
  NXBvbi9HVQp5Y3dNWGZsMAotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==
39
- date: 2013-06-13 00:00:00.000000000 Z
39
+ date: 2013-07-26 00:00:00.000000000 Z
40
40
  dependencies: []
41
41
  description:
42
42
  email: michael@grosser.it
@@ -81,7 +81,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
81
81
  version: '0'
82
82
  segments:
83
83
  - 0
84
- hash: 4454320574336980361
84
+ hash: 888472233015841176
85
85
  required_rubygems_version: !ruby/object:Gem::Requirement
86
86
  none: false
87
87
  requirements:
@@ -90,7 +90,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
90
90
  version: '0'
91
91
  segments:
92
92
  - 0
93
- hash: 4454320574336980361
93
+ hash: 888472233015841176
94
94
  requirements: []
95
95
  rubyforge_project:
96
96
  rubygems_version: 1.8.25
metadata.gz.sig CHANGED
Binary file