An abstract implementation of Puppet::Pops::Loader::Loader
A derived class should implement `find(typed_name)` and set entries, and possible handle “miss caching”.
@api private
An internal name used for debugging and error message purposes
The parent loader
@api private
# File lib/puppet/pops/loader/base_loader.rb, line 58 def add_entry(type, name, value, origin) set_entry(Puppet::Pops::Loader::Loader::TypedName.new(type, name), value, origin) end
This method is final (subclasses should not override it)
@api private
# File lib/puppet/pops/loader/base_loader.rb, line 45 def get_entry(typed_name) @named_values[typed_name] end
@api public
# File lib/puppet/pops/loader/base_loader.rb, line 27 def load_typed(typed_name) # The check for "last queried name" is an optimization when a module searches. First it checks up its parent # chain, then itself, and then delegates to modules it depends on. # These modules are typically parented by the same # loader as the one initiating the search. It is inefficient to again try to search the same loader for # the same name. if typed_name == @last_name @last_result else @last_name = typed_name @last_result = internal_load(typed_name) end end
Promotes an already created entry (typically from another loader) to this loader
@api private
# File lib/puppet/pops/loader/base_loader.rb, line 66 def promote_entry(named_entry) typed_name = named_entry.typed_name if entry = @named_values[typed_name] then fail_redefine(entry); end @named_values[typed_name] = named_entry end
@api private
# File lib/puppet/pops/loader/base_loader.rb, line 51 def set_entry(typed_name, value, origin = nil) if entry = @named_values[typed_name] then fail_redefined(entry); end @named_values[typed_name] = Puppet::Pops::Loader::Loader::NamedEntry.new(typed_name, value, origin) end
# File lib/puppet/pops/loader/base_loader.rb, line 17 def initialize(parent_loader, loader_name) @parent = parent_loader # the higher priority loader to consult @named_values = {} # hash name => NamedEntry @last_name = nil # the last name asked for (optimization) @last_result = nil # the value of the last name (optimization) @loader_name = loader_name # the name of the loader (not the name-space it is a loader for) end