mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
switch WatchStack to use composition, tighten up API
This commit is contained in:
parent
88daf08258
commit
5b3d4f0785
1 changed files with 13 additions and 6 deletions
|
@ -71,14 +71,20 @@ module ActiveSupport #:nodoc:
|
|||
#
|
||||
# This is handled by walking back up the watch stack and adding the constants
|
||||
# found by child.rb to the list of original constants in parent.rb
|
||||
class WatchStack < Hash
|
||||
class WatchStack
|
||||
include Enumerable
|
||||
|
||||
# @watching is a stack of lists of constants being watched. For instance,
|
||||
# if parent.rb is autoloaded, the stack will look like [[Object]]. If parent.rb
|
||||
# then requires namespace/child.rb, the stack will look like [[Object], [Namespace]].
|
||||
|
||||
def initialize
|
||||
@watching = []
|
||||
super { |h,k| h[k] = [] }
|
||||
@stack = Hash.new { |h,k| h[k] = [] }
|
||||
end
|
||||
|
||||
def each(&block)
|
||||
@stack.each(&block)
|
||||
end
|
||||
|
||||
# return a list of new constants found since the last call to watch_namespaces
|
||||
|
@ -89,7 +95,7 @@ module ActiveSupport #:nodoc:
|
|||
@watching.last.each do |namespace|
|
||||
# Retrieve the constants that were present under the namespace when watch_namespaces
|
||||
# was originally called
|
||||
original_constants = self[namespace].last
|
||||
original_constants = @stack[namespace].last
|
||||
|
||||
mod = Inflector.constantize(namespace) if Dependencies.qualified_const_defined?(namespace)
|
||||
next unless mod.is_a?(Module)
|
||||
|
@ -102,7 +108,7 @@ module ActiveSupport #:nodoc:
|
|||
# element of self[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.
|
||||
self[namespace].each do |namespace_constants|
|
||||
@stack[namespace].each do |namespace_constants|
|
||||
namespace_constants.concat(new_constants)
|
||||
end
|
||||
|
||||
|
@ -126,13 +132,14 @@ module ActiveSupport #:nodoc:
|
|||
Inflector.constantize(module_name).local_constant_names : []
|
||||
|
||||
watching << module_name
|
||||
self[module_name] << original_constants
|
||||
@stack[module_name] << original_constants
|
||||
end
|
||||
@watching << watching
|
||||
end
|
||||
|
||||
private
|
||||
def pop_modules(modules)
|
||||
modules.each { |mod| self[mod].pop }
|
||||
modules.each { |mod| @stack[mod].pop }
|
||||
end
|
||||
end
|
||||
|
||||
|
|
Loading…
Reference in a new issue