Skip to content

Commit

Permalink
AS::Callbacks: deprecate rescuable option
Browse files Browse the repository at this point in the history
  • Loading branch information
bogdan committed Feb 22, 2012
1 parent 157ea76 commit 10bac29
Show file tree
Hide file tree
Showing 4 changed files with 13 additions and 37 deletions.
12 changes: 9 additions & 3 deletions actionpack/lib/action_dispatch/middleware/callbacks.rb
Expand Up @@ -5,7 +5,7 @@ module ActionDispatch
class Callbacks class Callbacks
include ActiveSupport::Callbacks include ActiveSupport::Callbacks


define_callbacks :call, :rescuable => true define_callbacks :call


class << self class << self
delegate :to_prepare, :to_cleanup, :to => "ActionDispatch::Reloader" delegate :to_prepare, :to_cleanup, :to => "ActionDispatch::Reloader"
Expand All @@ -24,9 +24,15 @@ def initialize(app)
end end


def call(env) def call(env)
run_callbacks :call do error = nil
@app.call(env) result = run_callbacks :call do
begin
@app.call(env)
rescue => error
end
end end
raise error if error
result
end end
end end
end end
2 changes: 2 additions & 0 deletions activesupport/CHANGELOG.md
@@ -1,5 +1,7 @@
## Rails 4.0.0 (unreleased) ## ## Rails 4.0.0 (unreleased) ##


* AS::Callbacks: deprecate `:rescuable` option. *Bogdan Gusiev*

* Adds Integer#ordinal to get the ordinal suffix string of an integer. *Tim Gildea* * Adds Integer#ordinal to get the ordinal suffix string of an integer. *Tim Gildea*


* AS::Callbacks: `:per_key` option is no longer supported * AS::Callbacks: `:per_key` option is no longer supported
Expand Down
27 changes: 1 addition & 26 deletions activesupport/lib/active_support/callbacks.rb
Expand Up @@ -307,7 +307,6 @@ def initialize(name, config)
@name = name @name = name
@config = { @config = {
:terminator => "false", :terminator => "false",
:rescuable => false,
:scope => [ :kind ] :scope => [ :kind ]
}.merge(config) }.merge(config)
end end
Expand All @@ -317,35 +316,16 @@ def compile
method << "value = nil" method << "value = nil"
method << "halted = false" method << "halted = false"


callbacks = yielding callbacks = "value = yield if block_given? && !halted"
reverse_each do |callback| reverse_each do |callback|
callbacks = callback.apply(callbacks) callbacks = callback.apply(callbacks)
end end
method << callbacks method << callbacks


method << "raise rescued_error if rescued_error" if config[:rescuable]
method << "halted ? false : (block_given? ? value : true)" method << "halted ? false : (block_given? ? value : true)"
method.flatten.compact.join("\n") method.flatten.compact.join("\n")
end end


# Returns part of method that evaluates the callback block
def yielding
method = []
if config[:rescuable]
method << "rescued_error = nil"
method << "begin"
end

method << "value = yield if block_given? && !halted"

if config[:rescuable]
method << "rescue Exception => e"
method << "rescued_error = e"
method << "end"
end
method.join("\n")
end

end end


module ClassMethods module ClassMethods
Expand Down Expand Up @@ -508,11 +488,6 @@ def reset_callbacks(symbol)
# if callback chain was terminated or not. # if callback chain was terminated or not.
# Option makes sence only when <tt>:terminator</tt> option is specified. # Option makes sence only when <tt>:terminator</tt> option is specified.
# #
# * <tt>:rescuable</tt> - By default, after filters are not executed if
# the given block or a before filter raises an error. By setting this option
# to <tt>true</tt> exception raised by given block is stored and after
# executing all the after callbacks the stored exception is raised.
#
# * <tt>:scope</tt> - Indicates which methods should be executed when an object # * <tt>:scope</tt> - Indicates which methods should be executed when an object
# is used as a callback. # is used as a callback.
# #
Expand Down
9 changes: 1 addition & 8 deletions activesupport/test/callbacks_test.rb
Expand Up @@ -3,7 +3,7 @@
module CallbacksTest module CallbacksTest
class Phone class Phone
include ActiveSupport::Callbacks include ActiveSupport::Callbacks
define_callbacks :save, :rescuable => true define_callbacks :save


set_callback :save, :before, :before_save1 set_callback :save, :before, :before_save1
set_callback :save, :after, :after_save1 set_callback :save, :after, :after_save1
Expand Down Expand Up @@ -439,13 +439,6 @@ def test_skip_person
end end


class CallbacksTest < ActiveSupport::TestCase class CallbacksTest < ActiveSupport::TestCase
def test_save_phone
phone = Phone.new
assert_raise RuntimeError do
phone.save
end
assert_equal [:before, :after], phone.history
end


def test_save_person def test_save_person
person = Person.new person = Person.new
Expand Down

0 comments on commit 10bac29

Please sign in to comment.