class ActiveSupport::Dependencies::WatchStack

def new_constants

watch_namespaces.
Returns a list of new constants found since the last call to
def new_constants
  constants = []
  # Grab the list of namespaces that we're looking for new constants under
  @watching.last.each do |namespace|
    # Retrieve the constants that were present under the namespace when watch_namespaces
    # was originally called
    original_constants = @stack[namespace].last
    mod = Inflector.constantize(namespace) if Dependencies.qualified_const_defined?(namespace)
    next unless mod.is_a?(Module)
    # Get a list of the constants that were added
    new_constants = mod.constants(false) - original_constants
    # @stack[namespace] returns an Array of the constants that are being evaluated
    # for that namespace. For instance, if parent.rb requires child.rb, the first
    # element of @stack[Object] will be an Array of the constants that were present
    # before parent.rb was required. The second element will be an Array of the
    # constants that were present before child.rb was required.
    @stack[namespace].each do |namespace_constants|
      namespace_constants.concat(new_constants)
    end
    # Normalize the list of new constants, and add them to the list we will return
    new_constants.each do |suffix|
      constants << ([namespace, suffix] - ["Object"]).join("::")
    end
  end
  constants
ensure
  # A call to new_constants is always called after a call to watch_namespaces
  pop_modules(@watching.pop)
end