aboutsummaryrefslogtreecommitdiffstats
path: root/actionpack/lib/action_dispatch/middleware/reloader.rb
blob: 90c64037aa7503d4923cc172968e3dd1a4bcd6a3 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
module ActionDispatch
  # 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 response body. This is important for streaming responses such as the
  # following:
  #
  #     self.response_body = -> (response, output) do
  #       # code here which refers to application models
  #     end
  #
  # Cleanup callbacks will not be called until after the response_body lambda
  # is evaluated, ensuring that it can refer to application models and other
  # classes before they are unloaded.
  #
  # By default, ActionDispatch::Reloader is included in the middleware stack
  # 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 <tt>ActionDispatch::Reloader.prepare!</tt>
  # or <tt>ActionDispatch::Reloader.cleanup!</tt> are called manually.
  #
  class Reloader < Executor
    def self.to_prepare(*args, &block)
      ActiveSupport::Reloader.to_prepare(*args, &block)
    end

    def self.to_cleanup(*args, &block)
      ActiveSupport::Reloader.to_complete(*args, &block)
    end

    def self.prepare!
      default_reloader.prepare!
    end

    def self.cleanup!
      default_reloader.reload!
    end

    class << self
      attr_accessor :default_reloader # :nodoc:

      deprecate to_prepare: "use ActiveSupport::Reloader.to_prepare instead",
        to_cleanup: "use ActiveSupport::Reloader.to_complete instead",
        prepare!: "use Rails.application.reloader.prepare! instead",
        cleanup!: "use Rails.application.reloader.reload! instead of cleanup + prepare"
    end

    self.default_reloader = ActiveSupport::Reloader
  end
end