soft_deletion 0.4.4 → 0.4.5

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