Class: LegacyFacter::Util::Collection Private

Inherits:
Object
  • Object
show all
Includes:
Enumerable
Defined in:
lib/facter/custom_facts/util/collection.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

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(internal_loader, external_loader) ⇒ Collection

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 Collection.

API:

  • private



10
11
12
13
14
15
# File 'lib/facter/custom_facts/util/collection.rb', line 10

def initialize(internal_loader, external_loader)
  @facts = {}
  @internal_loader = internal_loader
  @external_loader = external_loader
  @loaded = false
end

Instance Attribute Details

#external_loaderObject (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.

API:

  • private



137
138
139
# File 'lib/facter/custom_facts/util/collection.rb', line 137

def external_loader
  @external_loader
end

#internal_loaderObject (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.

API:

  • private



137
138
139
# File 'lib/facter/custom_facts/util/collection.rb', line 137

def internal_loader
  @internal_loader
end

Instance Method Details

#[](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.

Return a fact object by name.

API:

  • private



18
19
20
# File 'lib/facter/custom_facts/util/collection.rb', line 18

def [](name)
  value(name)
end

#add(name, options = {}, &block) ⇒ Facter::Util::Fact

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.

Add a resolution mechanism for a named fact. This does not distinguish between adding a new fact and adding a new way to resolve a fact.

Parameters:

  • The name of the fact to define

  • (defaults to: {})

    A hash of options to set on the fact and resolution

Returns:

  • The fact that was defined

API:

  • private



45
46
47
48
49
50
51
52
53
# File 'lib/facter/custom_facts/util/collection.rb', line 45

def add(name, options = {}, &block)
  fact = create_or_return_fact(name, options)

  fact.add(options, &block)

  fact
rescue StandardError => e
  log.log_exception(e)
end

#custom_fact(fact_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



109
110
111
112
# File 'lib/facter/custom_facts/util/collection.rb', line 109

def custom_fact(fact_name)
  internal_loader.load(fact_name)
  @custom_facts = @facts.select { |_k, v| v.options[:fact_type] == :custom }
end

#custom_factsObject

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.

Builds a hash of custom facts

API:

  • private



115
116
117
118
119
120
121
122
123
124
# File 'lib/facter/custom_facts/util/collection.rb', line 115

def custom_facts
  return @custom_facts if @valid_custom_facts

  @valid_custom_facts = true

  internal_loader.load_all unless @loaded
  @loaded = true

  @custom_facts = @facts.select { |_k, v| v.options[:fact_type] == :custom }
end

#define_fact(name, options = {}, &block) ⇒ Facter::Util::Fact

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.

Define a new fact or extend an existing fact.

Parameters:

  • The name of the fact to define

  • (defaults to: {})

    A hash of options to set on the fact

Returns:

  • The fact that was defined

API:

  • private



28
29
30
31
32
33
34
35
36
# File 'lib/facter/custom_facts/util/collection.rb', line 28

def define_fact(name, options = {}, &block)
  fact = create_or_return_fact(name, options)

  fact.instance_eval(&block) if block_given?

  fact
rescue StandardError => e
  log.log_exception(e)
end

#eachObject

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.

Iterate across all of the facts.

API:

  • private



58
59
60
61
62
63
64
# File 'lib/facter/custom_facts/util/collection.rb', line 58

def each
  load_all
  @facts.each do |name, fact|
    value = fact.value
    yield name.to_s, value unless value.nil?
  end
end

#external_factsObject

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.

Build a hash of external facts

API:

  • private



94
95
96
97
98
99
# File 'lib/facter/custom_facts/util/collection.rb', line 94

def external_facts
  return @external_facts unless @external_facts.nil?

  load_external_facts
  @external_facts = @facts.select { |_k, v| v.options[:fact_type] == :external }
end

#fact(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.

Return a fact by name.

API:

  • private



67
68
69
70
71
72
73
74
75
76
77
78
79
# File 'lib/facter/custom_facts/util/collection.rb', line 67

def fact(name)
  name = canonicalize(name)

  # Try to load the fact if necessary
  load(name) unless @facts[name]

  # Try HARDER
  internal_loader.load_all unless @facts[name]

  log.warnonce("No facts loaded from #{internal_loader.search_path.join(File::PATH_SEPARATOR)}") if @facts.empty?

  @facts[name]
end

#flushObject

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.

Flush all cached values.

API:

  • private



82
83
84
85
# File 'lib/facter/custom_facts/util/collection.rb', line 82

def flush
  @facts.each_value(&:flush)
  @external_facts_loaded = nil
end

#invalidate_custom_factsObject

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



101
102
103
# File 'lib/facter/custom_facts/util/collection.rb', line 101

def invalidate_custom_facts
  @valid_custom_facts = false
end

#listObject

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.

Return a list of all of the facts.

API:

  • private



88
89
90
91
# File 'lib/facter/custom_facts/util/collection.rb', line 88

def list
  load_all
  @facts.keys
end

#load(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



126
127
128
129
# File 'lib/facter/custom_facts/util/collection.rb', line 126

def load(name)
  internal_loader.load(name)
  load_external_facts
end

#load_allObject

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.

Load all known facts.

API:

  • private



132
133
134
135
# File 'lib/facter/custom_facts/util/collection.rb', line 132

def load_all
  internal_loader.load_all
  load_external_facts
end

#reload_custom_factsObject

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



105
106
107
# File 'lib/facter/custom_facts/util/collection.rb', line 105

def reload_custom_facts
  @loaded = false
end

#to_hashObject

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.

Return a hash of all of our facts.

API:

  • private



140
141
142
143
144
145
146
147
148
# File 'lib/facter/custom_facts/util/collection.rb', line 140

def to_hash
  @facts.each_with_object({}) do |ary, h|
    value = ary[1].value
    unless value.nil?
      # For backwards compatibility, convert the fact name to a string.
      h[ary[0].to_s] = value
    end
  end
end

#value(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



150
151
152
153
# File 'lib/facter/custom_facts/util/collection.rb', line 150

def value(name)
  fact = fact(name)
  fact&.value
end