Module: Aidp::Loader
- Defined in:
- lib/aidp/loader.rb
Overview
Zeitwerk-based class loader with hot code reloading support
This module configures Zeitwerk for autoloading AIDP classes and provides a reload capability similar to Rails development mode. When files change (e.g., after git pull in watch mode), calling Aidp::Loader.reload! will unload all classes and allow them to be reloaded on next reference.
Class Attribute Summary collapse
-
.loader ⇒ Zeitwerk::Loader?
The configured loader instance.
-
.reloading_enabled ⇒ Boolean
Whether reloading is enabled.
Class Method Summary collapse
-
.eager_load! ⇒ void
Eager load all classes (production mode).
-
.reload! ⇒ Boolean
Reload all autoloaded classes.
-
.reloading? ⇒ Boolean
Check if loader is set up for reloading.
-
.reset! ⇒ void
Reset the loader (mainly for testing).
-
.setup(enable_reloading: false, eager_load: false) ⇒ Zeitwerk::Loader
Set up the Zeitwerk loader for AIDP.
-
.setup? ⇒ Boolean
Check if loader is set up.
Class Attribute Details
.loader ⇒ Zeitwerk::Loader?
Returns The configured loader instance.
24 25 26 |
# File 'lib/aidp/loader.rb', line 24 def loader @loader end |
.reloading_enabled ⇒ Boolean
Returns Whether reloading is enabled.
27 28 29 |
# File 'lib/aidp/loader.rb', line 27 def reloading_enabled @reloading_enabled end |
Class Method Details
.eager_load! ⇒ void
This method returns an undefined value.
Eager load all classes (production mode)
112 113 114 |
# File 'lib/aidp/loader.rb', line 112 def eager_load! @loader&.eager_load end |
.reload! ⇒ Boolean
Reload all autoloaded classes
This unloads all classes managed by Zeitwerk and allows them to be reloaded on next reference. Only works if enable_reloading was true during setup.
72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 |
# File 'lib/aidp/loader.rb', line 72 def reload! unless @loader Aidp.log_warn("loader", "reload_skipped", reason: "loader_not_setup") return false end unless @reloading_enabled Aidp.log_warn("loader", "reload_skipped", reason: "reloading_disabled") return false end Aidp.log_info("loader", "reload_started") begin @loader.reload Aidp.log_info("loader", "reload_complete") true rescue => e Aidp.log_error("loader", "reload_failed", error: e.) false end end |
.reloading? ⇒ Boolean
Check if loader is set up for reloading
98 99 100 |
# File 'lib/aidp/loader.rb', line 98 def reloading? @reloading_enabled == true end |
.reset! ⇒ void
This method returns an undefined value.
Reset the loader (mainly for testing)
119 120 121 122 123 124 125 126 127 128 129 130 |
# File 'lib/aidp/loader.rb', line 119 def reset! if @loader begin @loader.unload if @reloading_enabled rescue Zeitwerk::SetupRequired # If loader was never set up, skip unload end @loader.unregister end @loader = nil @reloading_enabled = false end |
.setup(enable_reloading: false, eager_load: false) ⇒ Zeitwerk::Loader
Set up the Zeitwerk loader for AIDP
34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
# File 'lib/aidp/loader.rb', line 34 def setup(enable_reloading: false, eager_load: false) return @loader if @loader Aidp.log_debug("loader", "setup_started", enable_reloading: enable_reloading, eager_load: eager_load) @reloading_enabled = enable_reloading @loader = create_loader configure_inflections(@loader) configure_ignores(@loader) if enable_reloading @loader.enable_reloading Aidp.log_debug("loader", "reloading_enabled") end @loader.setup if eager_load && !enable_reloading @loader.eager_load Aidp.log_debug("loader", "eager_load_complete") end Aidp.log_info("loader", "setup_complete", reloading: enable_reloading, eager_loaded: eager_load && !enable_reloading) @loader end |
.setup? ⇒ Boolean
Check if loader is set up
105 106 107 |
# File 'lib/aidp/loader.rb', line 105 def setup? !@loader.nil? end |