aboutsummaryrefslogtreecommitdiffstats
path: root/activesupport/lib/active_support/callbacks.rb
diff options
context:
space:
mode:
authorKasper Timm Hansen <kaspth@gmail.com>2016-12-29 20:09:43 +0100
committerGitHub <noreply@github.com>2016-12-29 20:09:43 +0100
commitca3eb2c1569a86e9c7eee2e9877dd773797a76b4 (patch)
tree016b5f2247d6ad4d95f1b1f05c897b5472abb7bf /activesupport/lib/active_support/callbacks.rb
parent654704247eba742e139cfaa8d1385f13605d9e12 (diff)
parentc491bf012948383632e53f874c552041a6e23b36 (diff)
downloadrails-ca3eb2c1569a86e9c7eee2e9877dd773797a76b4.tar.gz
rails-ca3eb2c1569a86e9c7eee2e9877dd773797a76b4.tar.bz2
rails-ca3eb2c1569a86e9c7eee2e9877dd773797a76b4.zip
Merge branch 'master' into fix_26964
Diffstat (limited to 'activesupport/lib/active_support/callbacks.rb')
-rw-r--r--activesupport/lib/active_support/callbacks.rb12
1 files changed, 9 insertions, 3 deletions
diff --git a/activesupport/lib/active_support/callbacks.rb b/activesupport/lib/active_support/callbacks.rb
index af8ddb176f..e6c79f2a38 100644
--- a/activesupport/lib/active_support/callbacks.rb
+++ b/activesupport/lib/active_support/callbacks.rb
@@ -109,16 +109,22 @@ module ActiveSupport
invoke_sequence = Proc.new do
skipped = nil
while true
- current, next_sequence = next_sequence, next_sequence.nested
+ current = next_sequence
current.invoke_before(env)
if current.final?
env.value = !env.halted && (!block_given? || yield)
elsif current.skip?(env)
(skipped ||= []) << current
+ next_sequence = next_sequence.nested
next
else
- target, block, method, *arguments = current.expand_call_template(env, invoke_sequence)
- target.send(method, *arguments, &block)
+ next_sequence = next_sequence.nested
+ begin
+ target, block, method, *arguments = current.expand_call_template(env, invoke_sequence)
+ target.send(method, *arguments, &block)
+ ensure
+ next_sequence = current
+ end
end
current.invoke_after(env)
skipped.pop.invoke_after(env) while skipped && skipped.first