Class: ActiveSupport::Reloader
- Inherits:
-
ExecutionWrapper
- Object
- ExecutionWrapper
- ActiveSupport::Reloader
- Defined in:
- lib/active_support/reloader.rb
Overview
– This class defines several callbacks:
to_prepare -- Run once at application startup, and also from
+to_run+.
to_run -- Run before a work run that is reloading. If
+reload_classes_only_on_change+ is true (the default), the class
unload will have already occurred.
to_complete -- Run after a work run that has reloaded. If
+reload_classes_only_on_change+ is false, the class unload will
have occurred after the work run, but before this callback.
before_class_unload -- Run immediately before the classes are
unloaded.
after_class_unload -- Run immediately after the classes are
unloaded.
Constant Summary
Constants inherited from ExecutionWrapper
Constants included from Callbacks
Callbacks::CALLBACK_FILTER_TYPES
Class Method Summary collapse
-
.after_class_unload(*args, &block) ⇒ Object
Registers a callback that will run immediately after the classes are unloaded.
-
.before_class_unload(*args, &block) ⇒ Object
Registers a callback that will run immediately before the classes are unloaded.
-
.check! ⇒ Object
:nodoc:.
-
.prepare! ⇒ Object
:nodoc:.
-
.reload! ⇒ Object
Initiate a manual reload.
-
.reloaded! ⇒ Object
:nodoc:.
-
.run! ⇒ Object
:nodoc:.
-
.to_prepare(*args, &block) ⇒ Object
Registers a callback that will run once at application startup and every time the code is reloaded.
-
.wrap ⇒ Object
Run the supplied block as a work unit, reloading code as needed.
Instance Method Summary collapse
-
#class_unload!(&block) ⇒ Object
:nodoc:.
-
#complete! ⇒ Object
:nodoc:.
-
#initialize ⇒ Reloader
constructor
A new instance of Reloader.
-
#release_unload_lock! ⇒ Object
Release the unload lock if it has been previously obtained.
-
#require_unload_lock! ⇒ Object
Acquire the ActiveSupport::Dependencies::Interlock unload lock, ensuring it will be released automatically.
-
#run! ⇒ Object
:nodoc:.
Methods inherited from ExecutionWrapper
active?, inherited, register_hook, to_complete, to_run
Methods included from Callbacks
Methods included from Concern
#append_features, #class_methods, extended, #included
Constructor Details
#initialize ⇒ Reloader
Returns a new instance of Reloader.
92 93 94 95 |
# File 'lib/active_support/reloader.rb', line 92 def initialize super @locked = false end |
Class Method Details
.after_class_unload(*args, &block) ⇒ Object
Registers a callback that will run immediately after the classes are unloaded.
42 43 44 |
# File 'lib/active_support/reloader.rb', line 42 def self.after_class_unload(*args, &block) set_callback(:class_unload, :after, *args, &block) end |
.before_class_unload(*args, &block) ⇒ Object
Registers a callback that will run immediately before the classes are unloaded.
37 38 39 |
# File 'lib/active_support/reloader.rb', line 37 def self.before_class_unload(*args, &block) set_callback(:class_unload, *args, &block) end |
.check! ⇒ Object
:nodoc:
80 81 82 |
# File 'lib/active_support/reloader.rb', line 80 def self.check! # :nodoc: @should_reload ||= check.call end |
.prepare! ⇒ Object
:nodoc:
88 89 90 |
# File 'lib/active_support/reloader.rb', line 88 def self.prepare! # :nodoc: new.run_callbacks(:prepare) end |
.reload! ⇒ Object
Initiate a manual reload
49 50 51 52 53 54 55 56 57 58 59 60 |
# File 'lib/active_support/reloader.rb', line 49 def self.reload! executor.wrap do new.tap do |instance| begin instance.run! ensure instance.complete! end end end prepare! end |
.reloaded! ⇒ Object
:nodoc:
84 85 86 |
# File 'lib/active_support/reloader.rb', line 84 def self.reloaded! # :nodoc: @should_reload = false end |
.run! ⇒ Object
:nodoc:
62 63 64 65 66 67 68 |
# File 'lib/active_support/reloader.rb', line 62 def self.run! # :nodoc: if check! super else Null end end |
.to_prepare(*args, &block) ⇒ Object
Registers a callback that will run once at application startup and every time the code is reloaded.
32 33 34 |
# File 'lib/active_support/reloader.rb', line 32 def self.to_prepare(*args, &block) set_callback(:prepare, *args, &block) end |
.wrap ⇒ Object
Run the supplied block as a work unit, reloading code as needed
71 72 73 74 75 |
# File 'lib/active_support/reloader.rb', line 71 def self.wrap executor.wrap do super end end |
Instance Method Details
#class_unload!(&block) ⇒ Object
:nodoc:
119 120 121 122 |
# File 'lib/active_support/reloader.rb', line 119 def class_unload!(&block) # :nodoc: require_unload_lock! run_callbacks(:class_unload, &block) end |
#complete! ⇒ Object
:nodoc:
124 125 126 127 128 129 |
# File 'lib/active_support/reloader.rb', line 124 def complete! # :nodoc: super self.class.reloaded! ensure release_unload_lock! end |
#release_unload_lock! ⇒ Object
Release the unload lock if it has been previously obtained
107 108 109 110 111 112 |
# File 'lib/active_support/reloader.rb', line 107 def release_unload_lock! if @locked @locked = false ActiveSupport::Dependencies.interlock.done_unloading end end |
#require_unload_lock! ⇒ Object
Acquire the ActiveSupport::Dependencies::Interlock unload lock, ensuring it will be released automatically
99 100 101 102 103 104 |
# File 'lib/active_support/reloader.rb', line 99 def require_unload_lock! unless @locked ActiveSupport::Dependencies.interlock.start_unloading @locked = true end end |
#run! ⇒ Object
:nodoc:
114 115 116 117 |
# File 'lib/active_support/reloader.rb', line 114 def run! # :nodoc: super release_unload_lock! end |