Class: LegacyFacter::Util::Loader

Inherits:
Object
  • Object
show all
Defined in:
lib/facter/custom_facts/util/loader.rb

Instance Method Summary collapse

Constructor Details

#initialize(environment_vars = ENV) ⇒ Loader

Returns a new instance of Loader.



7
8
9
10
# File 'lib/facter/custom_facts/util/loader.rb', line 7

def initialize(environment_vars = ENV)
  @loaded = []
  @environment_vars = environment_vars
end

Instance Method Details

#load(fact) ⇒ Object

Load all resolutions for a single fact.

Parameters:

  • name (Symbol)


16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# File 'lib/facter/custom_facts/util/loader.rb', line 16

def load(fact)
  # Now load from the search path
  shortname = fact.to_s.downcase
  load_env(shortname)

  filename = "#{shortname}.rb"

  paths = search_path
  paths&.each do |dir|
    # Load individual files
    file = File.join(dir, filename)

    load_file(file) if FileTest.file?(file)
  end
end

#load_allObject

Load all facts from all directories.



35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
# File 'lib/facter/custom_facts/util/loader.rb', line 35

def load_all
  return if defined?(@loaded_all)

  load_env

  paths = search_path
  paths&.each do |dir|
    # clean the search path of wrong slashes and backslashes
    dir = dir.gsub(%r{[/\\]+}, File::SEPARATOR)
    # dir is already an absolute path
    Dir.glob(File.join(dir, '*.rb')).each do |path|
      # exclude dirs that end with .rb
      load_file(path) if FileTest.file?(path)
    end
  end

  @loaded_all = true
end

#search_pathArray<String>

List directories to search for fact files.

Search paths are gathered from the following sources:

  1. $LOAD_PATH entries are expanded to absolute paths

  2. ENV is split and used verbatim

  3. Entries from Facter.search_path are used verbatim

Returns:

  • (Array<String>)


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

def search_path
  search_paths = []
  search_paths += $LOAD_PATH.map { |path| File.expand_path('facter', path) }

  if @environment_vars.include?('FACTERLIB')
    search_paths += @environment_vars['FACTERLIB'].split(File::PATH_SEPARATOR)
  end

  Facter::Options.custom_dir.each do |path|
    search_paths << path
  end

  search_paths.delete_if { |path| !File.directory?(path) }

  search_paths.uniq
end