brew vendor-gems: commit updates.
This commit is contained in:
		
							parent
							
								
									9423e78242
								
							
						
					
					
						commit
						1807e1a147
					
				@ -27,7 +27,7 @@ $:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version
 | 
			
		||||
$:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/i18n-1.12.0/lib")
 | 
			
		||||
$:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/minitest-5.16.3/lib")
 | 
			
		||||
$:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/tzinfo-2.0.5/lib")
 | 
			
		||||
$:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/zeitwerk-2.6.4/lib")
 | 
			
		||||
$:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/zeitwerk-2.6.6/lib")
 | 
			
		||||
$:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/activesupport-6.1.7/lib")
 | 
			
		||||
$:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/public_suffix-5.0.0/lib")
 | 
			
		||||
$:.unshift File.expand_path("#{__dir__}/../#{RUBY_ENGINE}/#{Gem.ruby_api_version}/gems/addressable-2.8.1/lib")
 | 
			
		||||
 | 
			
		||||
@ -12,4 +12,10 @@ module Zeitwerk
 | 
			
		||||
 | 
			
		||||
  class NameError < ::NameError
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  class SetupRequired < Error
 | 
			
		||||
    def initialize
 | 
			
		||||
      super("please, finish your configuration and call Zeitwerk::Loader#setup once all is ready")
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
@ -11,28 +11,28 @@ module Zeitwerk
 | 
			
		||||
  module ExplicitNamespace # :nodoc: all
 | 
			
		||||
    class << self
 | 
			
		||||
      include RealModName
 | 
			
		||||
      extend Internal
 | 
			
		||||
 | 
			
		||||
      # Maps constant paths that correspond to explicit namespaces according to
 | 
			
		||||
      # the file system, to the loader responsible for them.
 | 
			
		||||
      #
 | 
			
		||||
      # @private
 | 
			
		||||
      # @sig Hash[String, Zeitwerk::Loader]
 | 
			
		||||
      attr_reader :cpaths
 | 
			
		||||
      private :cpaths
 | 
			
		||||
 | 
			
		||||
      # @private
 | 
			
		||||
      # @sig Mutex
 | 
			
		||||
      attr_reader :mutex
 | 
			
		||||
      private :mutex
 | 
			
		||||
 | 
			
		||||
      # @private
 | 
			
		||||
      # @sig TracePoint
 | 
			
		||||
      attr_reader :tracer
 | 
			
		||||
      private :tracer
 | 
			
		||||
 | 
			
		||||
      # Asserts `cpath` corresponds to an explicit namespace for which `loader`
 | 
			
		||||
      # is responsible.
 | 
			
		||||
      #
 | 
			
		||||
      # @private
 | 
			
		||||
      # @sig (String, Zeitwerk::Loader) -> void
 | 
			
		||||
      def register(cpath, loader)
 | 
			
		||||
      internal def register(cpath, loader)
 | 
			
		||||
        mutex.synchronize do
 | 
			
		||||
          cpaths[cpath] = loader
 | 
			
		||||
          # We check enabled? because, looking at the C source code, enabling an
 | 
			
		||||
@ -41,24 +41,21 @@ module Zeitwerk
 | 
			
		||||
        end
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      # @private
 | 
			
		||||
      # @sig (Zeitwerk::Loader) -> void
 | 
			
		||||
      def unregister_loader(loader)
 | 
			
		||||
      internal def unregister_loader(loader)
 | 
			
		||||
        cpaths.delete_if { |_cpath, l| l == loader }
 | 
			
		||||
        disable_tracer_if_unneeded
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      private
 | 
			
		||||
 | 
			
		||||
      # @sig () -> void
 | 
			
		||||
      def disable_tracer_if_unneeded
 | 
			
		||||
      private def disable_tracer_if_unneeded
 | 
			
		||||
        mutex.synchronize do
 | 
			
		||||
          tracer.disable if cpaths.empty?
 | 
			
		||||
        end
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      # @sig (TracePoint) -> void
 | 
			
		||||
      def tracepoint_class_callback(event)
 | 
			
		||||
      private def tracepoint_class_callback(event)
 | 
			
		||||
        # If the class is a singleton class, we won't do anything with it so we
 | 
			
		||||
        # can bail out immediately. This is several orders of magnitude faster
 | 
			
		||||
        # than accessing its name.
 | 
			
		||||
@ -109,7 +109,7 @@ module Zeitwerk
 | 
			
		||||
      Registry.register_loader(self)
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    # Sets autoloads in the root namespace.
 | 
			
		||||
    # Sets autoloads in the root namespaces.
 | 
			
		||||
    #
 | 
			
		||||
    # @sig () -> void
 | 
			
		||||
    def setup
 | 
			
		||||
@ -140,6 +140,8 @@ module Zeitwerk
 | 
			
		||||
    # @sig () -> void
 | 
			
		||||
    def unload
 | 
			
		||||
      mutex.synchronize do
 | 
			
		||||
        raise SetupRequired unless @setup
 | 
			
		||||
 | 
			
		||||
        # We are going to keep track of the files that were required by our
 | 
			
		||||
        # autoloads to later remove them from $LOADED_FEATURES, thus making them
 | 
			
		||||
        # loadable by Kernel#require again.
 | 
			
		||||
@ -199,7 +201,7 @@ module Zeitwerk
 | 
			
		||||
        shadowed_files.clear
 | 
			
		||||
 | 
			
		||||
        Registry.on_unload(self)
 | 
			
		||||
        ExplicitNamespace.unregister_loader(self)
 | 
			
		||||
        ExplicitNamespace.__unregister_loader(self)
 | 
			
		||||
 | 
			
		||||
        @setup        = false
 | 
			
		||||
        @eager_loaded = false
 | 
			
		||||
@ -216,6 +218,7 @@ module Zeitwerk
 | 
			
		||||
    # @sig () -> void
 | 
			
		||||
    def reload
 | 
			
		||||
      raise ReloadingDisabledError unless reloading_enabled?
 | 
			
		||||
      raise SetupRequired unless @setup
 | 
			
		||||
 | 
			
		||||
      unload
 | 
			
		||||
      recompute_ignored_paths
 | 
			
		||||
@ -245,7 +248,7 @@ module Zeitwerk
 | 
			
		||||
    # @sig () -> void
 | 
			
		||||
    def unregister
 | 
			
		||||
      Registry.unregister_loader(self)
 | 
			
		||||
      ExplicitNamespace.unregister_loader(self)
 | 
			
		||||
      ExplicitNamespace.__unregister_loader(self)
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    # The return value of this predicate is only meaningful if the loader has
 | 
			
		||||
@ -283,19 +286,31 @@ module Zeitwerk
 | 
			
		||||
        Registry.loader_for_gem(called_from, warn_on_extra_files: warn_on_extra_files)
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      # Broadcasts `eager_load` to all loaders.
 | 
			
		||||
      # Broadcasts `eager_load` to all loaders. Those that have not been setup
 | 
			
		||||
      # are skipped.
 | 
			
		||||
      #
 | 
			
		||||
      # @sig () -> void
 | 
			
		||||
      def eager_load_all
 | 
			
		||||
        Registry.loaders.each(&:eager_load)
 | 
			
		||||
        Registry.loaders.each do |loader|
 | 
			
		||||
          begin
 | 
			
		||||
            loader.eager_load
 | 
			
		||||
          rescue SetupRequired
 | 
			
		||||
            # This is fine, we eager load what can be eager loaded.
 | 
			
		||||
          end
 | 
			
		||||
        end
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      # Broadcasts `eager_load_namespace` to all loaders.
 | 
			
		||||
      # Broadcasts `eager_load_namespace` to all loaders. Those that have not
 | 
			
		||||
      # been setup are skipped.
 | 
			
		||||
      #
 | 
			
		||||
      # @sig (Module) -> void
 | 
			
		||||
      def eager_load_namespace(mod)
 | 
			
		||||
        Registry.loaders.each do |loader|
 | 
			
		||||
          loader.eager_load_namespace(mod)
 | 
			
		||||
          begin
 | 
			
		||||
            loader.eager_load_namespace(mod)
 | 
			
		||||
          rescue SetupRequired
 | 
			
		||||
            # This is fine, we eager load what can be eager loaded.
 | 
			
		||||
          end
 | 
			
		||||
        end
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
@ -435,7 +450,7 @@ module Zeitwerk
 | 
			
		||||
 | 
			
		||||
    # @sig (String) -> void
 | 
			
		||||
    def register_explicit_namespace(cpath)
 | 
			
		||||
      ExplicitNamespace.register(cpath, self)
 | 
			
		||||
      ExplicitNamespace.__register(cpath, self)
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    # @sig (String) -> void
 | 
			
		||||
@ -5,6 +5,7 @@ require "securerandom"
 | 
			
		||||
 | 
			
		||||
module Zeitwerk::Loader::Config
 | 
			
		||||
  extend Zeitwerk::Internal
 | 
			
		||||
  include Zeitwerk::RealModName
 | 
			
		||||
 | 
			
		||||
  # @sig #camelize
 | 
			
		||||
  attr_accessor :inflector
 | 
			
		||||
@ -12,14 +13,15 @@ module Zeitwerk::Loader::Config
 | 
			
		||||
  # @sig #call | #debug | nil
 | 
			
		||||
  attr_accessor :logger
 | 
			
		||||
 | 
			
		||||
  # Absolute paths of the root directories. Stored in a hash to preserve order,
 | 
			
		||||
  # easily handle duplicates, have a fast lookup needed for detecting nested
 | 
			
		||||
  # paths, and store namespaces as values.
 | 
			
		||||
  # Absolute paths of the root directories, mapped to their respective root namespaces:
 | 
			
		||||
  #
 | 
			
		||||
  #   "/Users/fxn/blog/app/channels" => Object,
 | 
			
		||||
  #   "/Users/fxn/blog/app/adapters" => ActiveJob::QueueAdapters,
 | 
			
		||||
  #   ...
 | 
			
		||||
  #
 | 
			
		||||
  # Stored in a hash to preserve order, easily handle duplicates, and have a
 | 
			
		||||
  # fast lookup by directory.
 | 
			
		||||
  #
 | 
			
		||||
  # This is a private collection maintained by the loader. The public
 | 
			
		||||
  # interface for it is `push_dir` and `dirs`.
 | 
			
		||||
  #
 | 
			
		||||
@ -112,6 +114,10 @@ module Zeitwerk::Loader::Config
 | 
			
		||||
      raise Zeitwerk::Error, "#{namespace.inspect} is not a class or module object, should be"
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    unless real_mod_name(namespace)
 | 
			
		||||
      raise Zeitwerk::Error, "root namespaces cannot be anonymous"
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    abspath = File.expand_path(path)
 | 
			
		||||
    if dir?(abspath)
 | 
			
		||||
      raise_if_conflicting_directory(abspath)
 | 
			
		||||
@ -283,17 +289,22 @@ module Zeitwerk::Loader::Config
 | 
			
		||||
    return false if ignored_paths.empty?
 | 
			
		||||
 | 
			
		||||
    walk_up(abspath) do |abspath|
 | 
			
		||||
      return true  if ignored_paths.member?(abspath)
 | 
			
		||||
      return true  if ignored_path?(abspath)
 | 
			
		||||
      return false if roots.key?(abspath)
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    false
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  # @sig (String) -> bool
 | 
			
		||||
  private def ignored_path?(abspath)
 | 
			
		||||
    ignored_paths.member?(abspath)
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  # @sig () -> Array[String]
 | 
			
		||||
  private def actual_roots
 | 
			
		||||
    roots.reject do |root_dir, _root_namespace|
 | 
			
		||||
      !dir?(root_dir) || ignored_paths.member?(root_dir)
 | 
			
		||||
      !dir?(root_dir) || ignored_path?(root_dir)
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
@ -9,6 +9,7 @@ module Zeitwerk::Loader::EagerLoad
 | 
			
		||||
  def eager_load(force: false)
 | 
			
		||||
    mutex.synchronize do
 | 
			
		||||
      break if @eager_loaded
 | 
			
		||||
      raise Zeitwerk::SetupRequired unless @setup
 | 
			
		||||
 | 
			
		||||
      log("eager load start") if logger
 | 
			
		||||
 | 
			
		||||
@ -29,6 +30,8 @@ module Zeitwerk::Loader::EagerLoad
 | 
			
		||||
 | 
			
		||||
  # @sig (String | Pathname) -> void
 | 
			
		||||
  def eager_load_dir(path)
 | 
			
		||||
    raise Zeitwerk::SetupRequired unless @setup
 | 
			
		||||
 | 
			
		||||
    abspath = File.expand_path(path)
 | 
			
		||||
 | 
			
		||||
    raise Zeitwerk::Error.new("#{abspath} is not a directory") unless dir?(abspath)
 | 
			
		||||
@ -37,7 +40,7 @@ module Zeitwerk::Loader::EagerLoad
 | 
			
		||||
 | 
			
		||||
    root_namespace = nil
 | 
			
		||||
    walk_up(abspath) do |dir|
 | 
			
		||||
      return if ignored_paths.member?(dir)
 | 
			
		||||
      return if ignored_path?(dir)
 | 
			
		||||
      return if eager_load_exclusions.member?(dir)
 | 
			
		||||
 | 
			
		||||
      break if root_namespace = roots[dir]
 | 
			
		||||
@ -67,6 +70,8 @@ module Zeitwerk::Loader::EagerLoad
 | 
			
		||||
 | 
			
		||||
  # @sig (Module) -> void
 | 
			
		||||
  def eager_load_namespace(mod)
 | 
			
		||||
    raise Zeitwerk::SetupRequired unless @setup
 | 
			
		||||
 | 
			
		||||
    unless mod.is_a?(Module)
 | 
			
		||||
      raise Zeitwerk::Error, "#{mod.inspect} is not a class or module object"
 | 
			
		||||
    end
 | 
			
		||||
@ -111,7 +116,7 @@ module Zeitwerk::Loader::EagerLoad
 | 
			
		||||
 | 
			
		||||
    raise Zeitwerk::Error.new("#{abspath} does not exist") unless File.exist?(abspath)
 | 
			
		||||
    raise Zeitwerk::Error.new("#{abspath} is not a Ruby file") if dir?(abspath) || !ruby?(abspath)
 | 
			
		||||
    raise Zeitwerk::Error.new("#{abspath} is ignored") if ignored_paths.member?(abspath)
 | 
			
		||||
    raise Zeitwerk::Error.new("#{abspath} is ignored") if ignored_path?(abspath)
 | 
			
		||||
 | 
			
		||||
    basename = File.basename(abspath, ".rb")
 | 
			
		||||
    base_cname = inflector.camelize(basename, abspath).to_sym
 | 
			
		||||
@ -120,7 +125,7 @@ module Zeitwerk::Loader::EagerLoad
 | 
			
		||||
    cnames = []
 | 
			
		||||
 | 
			
		||||
    walk_up(File.dirname(abspath)) do |dir|
 | 
			
		||||
      raise Zeitwerk::Error.new("#{abspath} is ignored") if ignored_paths.member?(dir)
 | 
			
		||||
      raise Zeitwerk::Error.new("#{abspath} is ignored") if ignored_path?(dir)
 | 
			
		||||
 | 
			
		||||
      break if root_namespace = roots[dir]
 | 
			
		||||
 | 
			
		||||
@ -203,7 +208,7 @@ module Zeitwerk::Loader::EagerLoad
 | 
			
		||||
          next unless dir?(abspath)
 | 
			
		||||
 | 
			
		||||
          if collapse?(abspath)
 | 
			
		||||
            current_dirs << abspath
 | 
			
		||||
            dirs << abspath
 | 
			
		||||
          elsif segment == inflector.camelize(basename, abspath)
 | 
			
		||||
            next_dirs << abspath
 | 
			
		||||
          end
 | 
			
		||||
@ -1,12 +1,10 @@
 | 
			
		||||
# frozen_string_literal: true
 | 
			
		||||
 | 
			
		||||
module Zeitwerk::Loader::Helpers
 | 
			
		||||
  private
 | 
			
		||||
 | 
			
		||||
  # --- Logging -----------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
  # @sig (String) -> void
 | 
			
		||||
  def log(message)
 | 
			
		||||
  private def log(message)
 | 
			
		||||
    method_name = logger.respond_to?(:debug) ? :debug : :call
 | 
			
		||||
    logger.send(method_name, "Zeitwerk@#{tag}: #{message}")
 | 
			
		||||
  end
 | 
			
		||||
@ -14,7 +12,7 @@ module Zeitwerk::Loader::Helpers
 | 
			
		||||
  # --- Files and directories ---------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
  # @sig (String) { (String, String) -> void } -> void
 | 
			
		||||
  def ls(dir)
 | 
			
		||||
  private def ls(dir)
 | 
			
		||||
    children = Dir.children(dir)
 | 
			
		||||
 | 
			
		||||
    # The order in which a directory is listed depends on the file system.
 | 
			
		||||
@ -28,7 +26,7 @@ module Zeitwerk::Loader::Helpers
 | 
			
		||||
      next if hidden?(basename)
 | 
			
		||||
 | 
			
		||||
      abspath = File.join(dir, basename)
 | 
			
		||||
      next if ignored_paths.member?(abspath)
 | 
			
		||||
      next if ignored_path?(abspath)
 | 
			
		||||
 | 
			
		||||
      if dir?(abspath)
 | 
			
		||||
        next if roots.key?(abspath)
 | 
			
		||||
@ -44,7 +42,7 @@ module Zeitwerk::Loader::Helpers
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  # @sig (String) -> bool
 | 
			
		||||
  def has_at_least_one_ruby_file?(dir)
 | 
			
		||||
  private def has_at_least_one_ruby_file?(dir)
 | 
			
		||||
    to_visit = [dir]
 | 
			
		||||
 | 
			
		||||
    while dir = to_visit.shift
 | 
			
		||||
@ -61,22 +59,22 @@ module Zeitwerk::Loader::Helpers
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  # @sig (String) -> bool
 | 
			
		||||
  def ruby?(path)
 | 
			
		||||
  private def ruby?(path)
 | 
			
		||||
    path.end_with?(".rb")
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  # @sig (String) -> bool
 | 
			
		||||
  def dir?(path)
 | 
			
		||||
  private def dir?(path)
 | 
			
		||||
    File.directory?(path)
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  # @sig (String) -> bool
 | 
			
		||||
  def hidden?(basename)
 | 
			
		||||
  private def hidden?(basename)
 | 
			
		||||
    basename.start_with?(".")
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  # @sig (String) { (String) -> void } -> void
 | 
			
		||||
  def walk_up(abspath)
 | 
			
		||||
  private def walk_up(abspath)
 | 
			
		||||
    loop do
 | 
			
		||||
      yield abspath
 | 
			
		||||
      abspath, basename = File.split(abspath)
 | 
			
		||||
@ -104,11 +102,11 @@ module Zeitwerk::Loader::Helpers
 | 
			
		||||
  #
 | 
			
		||||
  # @sig (Module, Symbol) -> String?
 | 
			
		||||
  if method(:autoload?).arity == 1
 | 
			
		||||
    def strict_autoload_path(parent, cname)
 | 
			
		||||
    private def strict_autoload_path(parent, cname)
 | 
			
		||||
      parent.autoload?(cname) if cdef?(parent, cname)
 | 
			
		||||
    end
 | 
			
		||||
  else
 | 
			
		||||
    def strict_autoload_path(parent, cname)
 | 
			
		||||
    private def strict_autoload_path(parent, cname)
 | 
			
		||||
      parent.autoload?(cname, false)
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
@ -117,23 +115,23 @@ module Zeitwerk::Loader::Helpers
 | 
			
		||||
  if Symbol.method_defined?(:name)
 | 
			
		||||
    # Symbol#name was introduced in Ruby 3.0. It returns always the same
 | 
			
		||||
    # frozen object, so we may save a few string allocations.
 | 
			
		||||
    def cpath(parent, cname)
 | 
			
		||||
    private def cpath(parent, cname)
 | 
			
		||||
      Object == parent ? cname.name : "#{real_mod_name(parent)}::#{cname.name}"
 | 
			
		||||
    end
 | 
			
		||||
  else
 | 
			
		||||
    def cpath(parent, cname)
 | 
			
		||||
    private def cpath(parent, cname)
 | 
			
		||||
      Object == parent ? cname.to_s : "#{real_mod_name(parent)}::#{cname}"
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  # @sig (Module, Symbol) -> bool
 | 
			
		||||
  def cdef?(parent, cname)
 | 
			
		||||
  private def cdef?(parent, cname)
 | 
			
		||||
    parent.const_defined?(cname, false)
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  # @raise [NameError]
 | 
			
		||||
  # @sig (Module, Symbol) -> Object
 | 
			
		||||
  def cget(parent, cname)
 | 
			
		||||
  private def cget(parent, cname)
 | 
			
		||||
    parent.const_get(cname, false)
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
@ -1,5 +1,5 @@
 | 
			
		||||
# frozen_string_literal: true
 | 
			
		||||
 | 
			
		||||
module Zeitwerk
 | 
			
		||||
  VERSION = "2.6.4"
 | 
			
		||||
  VERSION = "2.6.6"
 | 
			
		||||
end
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user