module ActiveSupport::Dependencies::ZeitwerkIntegration

def autoload_once?(autoload_path)

def autoload_once?(autoload_path)
  Dependencies.autoload_once_paths.include?(autoload_path)
end

def decorate_dependencies

def decorate_dependencies
  Dependencies.unhook!
  Dependencies.singleton_class.prepend(Decorations)
  Object.prepend(RequireDependency)
end

def eager_load?(autoload_path)

def eager_load?(autoload_path)
  Dependencies._eager_load_paths.member?(autoload_path)
end

def freeze_paths

def freeze_paths
  Dependencies.autoload_paths.freeze
  Dependencies.autoload_once_paths.freeze
  Dependencies._eager_load_paths.freeze
end

def setup_autoloaders(enable_reloading)

def setup_autoloaders(enable_reloading)
  Dependencies.autoload_paths.each do |autoload_path|
    # Zeitwerk only accepts existing directories in `push_dir` to
    # prevent misconfigurations.
    next unless File.directory?(autoload_path)
    autoloader = \
      autoload_once?(autoload_path) ? Rails.autoloaders.once : Rails.autoloaders.main
    autoloader.push_dir(autoload_path)
    autoloader.do_not_eager_load(autoload_path) unless eager_load?(autoload_path)
  end
  Rails.autoloaders.main.enable_reloading if enable_reloading
  Rails.autoloaders.each(&:setup)
end

def take_over(enable_reloading:)

def take_over(enable_reloading:)
  setup_autoloaders(enable_reloading)
  freeze_paths
  decorate_dependencies
end