Class: Puppet::Pops::Loader::BaseLoader Private

Inherits:
Loader show all
Defined in:
lib/puppet/pops/loader/base_loader.rb

Overview

This class is part of a private API. You should avoid using this class if possible, as it may be removed or be changed in the future.

API:

  • private

Constant Summary

Constants inherited from Loader

Loader::LOADABLE_KINDS

Instance Attribute Summary collapse

Attributes inherited from Loader

#loader_name

Instance Method Summary collapse

Methods inherited from Loader

#[], #find, #inspect, #load, #loadables, #private_loader, #to_s

Constructor Details

#initialize(parent_loader, loader_name) ⇒ BaseLoader

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns a new instance of BaseLoader.

API:

  • private



16
17
18
19
20
21
# File 'lib/puppet/pops/loader/base_loader.rb', line 16

def initialize(parent_loader, loader_name)
  super(loader_name)
  @parent = parent_loader # the higher priority loader to consult
  @named_values = {}      # hash name => NamedEntry
  @last_result = nil      # the value of the last name (optimization)
end

Instance Attribute Details

#parentObject (readonly)

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

The parent loader

API:

  • private



14
15
16
# File 'lib/puppet/pops/loader/base_loader.rb', line 14

def parent
  @parent
end

Instance Method Details

#add_entry(type, name, value, origin) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

API:

  • private



81
82
83
# File 'lib/puppet/pops/loader/base_loader.rb', line 81

def add_entry(type, name, value, origin)
  set_entry(TypedName.new(type, name), value, origin)
end

#get_entry(typed_name) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

This method is final (subclasses should not override it)

API:

  • private



54
55
56
# File 'lib/puppet/pops/loader/base_loader.rb', line 54

def get_entry(typed_name)
  @named_values[typed_name]
end

#load_typed(typed_name) ⇒ Object

API:

  • public



25
26
27
28
29
30
31
32
33
34
35
36
# File 'lib/puppet/pops/loader/base_loader.rb', line 25

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 @last_result.nil? || typed_name != @last_result.typed_name
    @last_result = internal_load(typed_name)
  else
    @last_result
  end
end

#loaded_entry(typed_name, check_dependencies = false) ⇒ Object

API:

  • public



40
41
42
43
44
45
46
47
48
# File 'lib/puppet/pops/loader/base_loader.rb', line 40

def loaded_entry(typed_name, check_dependencies = false)
  if @named_values.has_key?(typed_name)
    @named_values[typed_name]
  elsif parent
    parent.loaded_entry(typed_name, check_dependencies)
  else
    nil
  end
end

#promote_entry(named_entry) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Promotes an already created entry (typically from another loader) to this loader

API:

  • private



97
98
99
100
101
# File 'lib/puppet/pops/loader/base_loader.rb', line 97

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

#remove_entry(typed_name) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

API:

  • private



87
88
89
90
91
# File 'lib/puppet/pops/loader/base_loader.rb', line 87

def remove_entry(typed_name)
  unless @named_values.delete(typed_name).nil?
    @last_result = nil unless @last_result.nil? || typed_name != @last_result.typed_name
  end
end

#set_entry(typed_name, value, origin = nil) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

API:

  • private



60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
# File 'lib/puppet/pops/loader/base_loader.rb', line 60

def set_entry(typed_name, value, origin = nil)
  # It is never ok to redefine in the very same loader unless redefining a 'not found'
  if entry = @named_values[typed_name]
    fail_redefine(entry) unless entry.value.nil?
  end

  # Check if new entry shadows existing entry and fail
  # (unless special loader allows shadowing)
  if typed_name.type == :type && !allow_shadowing?
    entry = loaded_entry(typed_name)
    if entry
      fail_redefine(entry) unless entry.value.nil? #|| entry.value == value
    end
  end

  @last_result = Loader::NamedEntry.new(typed_name, value, origin)
  @named_values[typed_name] = @last_result
end