aboutsummaryrefslogtreecommitdiffstats
path: root/actionpack/lib/action_dispatch/middleware/reloader.rb
diff options
context:
space:
mode:
authorEmilio Tagua <miloops@gmail.com>2011-02-15 12:01:04 -0300
committerEmilio Tagua <miloops@gmail.com>2011-02-15 12:01:04 -0300
commit8ee0b4414890f919594c1a388d987b5b7364a505 (patch)
tree6c6c6aa19da0eb8066d2f0b9b02b08f2cc696c29 /actionpack/lib/action_dispatch/middleware/reloader.rb
parent348c0ec7c656b3691aa4e687565d28259ca0f693 (diff)
parentc9f1ab5365319e087e1b010a3f90626a2b8f080b (diff)
downloadrails-8ee0b4414890f919594c1a388d987b5b7364a505.tar.gz
rails-8ee0b4414890f919594c1a388d987b5b7364a505.tar.bz2
rails-8ee0b4414890f919594c1a388d987b5b7364a505.zip
Merge remote branch 'rails/master' into identity_map
Conflicts: activerecord/examples/performance.rb activerecord/lib/active_record/association_preload.rb activerecord/lib/active_record/associations.rb activerecord/lib/active_record/associations/association_proxy.rb activerecord/lib/active_record/autosave_association.rb activerecord/lib/active_record/base.rb activerecord/lib/active_record/nested_attributes.rb activerecord/test/cases/relations_test.rb
Diffstat (limited to 'actionpack/lib/action_dispatch/middleware/reloader.rb')
-rw-r--r--actionpack/lib/action_dispatch/middleware/reloader.rb31
1 files changed, 21 insertions, 10 deletions
diff --git a/actionpack/lib/action_dispatch/middleware/reloader.rb b/actionpack/lib/action_dispatch/middleware/reloader.rb
index 579b5d8a02..29289a76b4 100644
--- a/actionpack/lib/action_dispatch/middleware/reloader.rb
+++ b/actionpack/lib/action_dispatch/middleware/reloader.rb
@@ -1,9 +1,12 @@
module ActionDispatch
- # ActionDispatch::Reloader provides to_prepare and to_cleanup callbacks.
- # These are analogs of ActionDispatch::Callback's before and after
- # callbacks, with the difference that to_cleanup is not called until the
+ # ActionDispatch::Reloader provides prepare and cleanup callbacks,
+ # intended to assist with code reloading during development.
+ #
+ # Prepare callbacks are run before each request, and cleanup callbacks
+ # after each request. In this respect they are analogs of ActionDispatch::Callback's
+ # before and after callbacks. However, cleanup callbacks are not called until the
# request is fully complete -- that is, after #close has been called on
- # the request body. This is important for streaming responses such as the
+ # the response body. This is important for streaming responses such as the
# following:
#
# self.response_body = lambda { |response, output|
@@ -15,7 +18,10 @@ module ActionDispatch
# classes before they are unloaded.
#
# By default, ActionDispatch::Reloader is included in the middleware stack
- # only in the development environment.
+ # only in the development environment; specifically, when config.cache_classes
+ # is false. Callbacks may be registered even when it is not included in the
+ # middleware stack, but are executed only when +ActionDispatch::Reloader.prepare!+
+ # or +ActionDispatch::Reloader.cleanup!+ are called manually.
#
class Reloader
include ActiveSupport::Callbacks
@@ -23,8 +29,8 @@ module ActionDispatch
define_callbacks :prepare, :scope => :name
define_callbacks :cleanup, :scope => :name
- # Add a preparation callback. Preparation callbacks are run before each
- # request.
+ # Add a prepare callback. Prepare callbacks are run before each request, prior
+ # to ActionDispatch::Callback's before callbacks.
def self.to_prepare(*args, &block)
set_callback(:prepare, *args, &block)
end
@@ -35,12 +41,14 @@ module ActionDispatch
set_callback(:cleanup, *args, &block)
end
+ # Execute all prepare callbacks.
def self.prepare!
- new(nil).send(:_run_prepare_callbacks)
+ new(nil).run_callbacks :prepare
end
+ # Execute all cleanup callbacks.
def self.cleanup!
- new(nil).send(:_run_cleanup_callbacks)
+ new(nil).run_callbacks :cleanup
end
def initialize(app)
@@ -56,10 +64,13 @@ module ActionDispatch
end
def call(env)
- _run_prepare_callbacks
+ run_callbacks :prepare
response = @app.call(env)
response[2].extend(CleanupOnClose)
response
+ rescue Exception
+ run_callbacks :cleanup
+ raise
end
end
end