class Puppet::Pops::Loader::BaseLoader

BaseLoader

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

Attributes

loader_name[R]

An internal name used for debugging and error message purposes

parent[R]

The parent loader

Public Instance Methods

add_entry(type, name, value, origin) click to toggle source

@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
get_entry(typed_name) click to toggle source

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
load_typed(typed_name) click to toggle source

@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
promote_entry(named_entry) click to toggle source

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
set_entry(typed_name, value, origin = nil) click to toggle source

@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

Public Class Methods

new(parent_loader, loader_name) click to toggle source
# 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