Sha256: 26d8cde4429dcfd5802e7d20da914c0de9c7e810703aea7d56c50e1054e90f57

Contents?: true

Size: 1.19 KB

Versions: 2

Compression:

Stored size: 1.19 KB

Contents

# frozen_string_literal: true

module Facter
  class InternalFactLoader
    attr_reader :facts

    def core_facts
      @facts.select { |fact| fact.type == :core }
    end

    def legacy_facts
      @facts.select { |fact| fact.type == :legacy }
    end

    def initialize
      @facts = []

      os_descendents = OsDetector.instance.hierarchy
      load_all_oses(os_descendents)
    end

    private

    def load_all_oses(os_descendents)
      os_descendents.each do |os|
        load_for_os(os)
      end
    end

    def load_for_os(operating_system)
      # select only classes
      classes = ClassDiscoverer.instance.discover_classes(operating_system)

      classes.each do |class_name|
        klass = klass(operating_system, class_name)
        fact_name = klass::FACT_NAME

        load_fact(fact_name, klass)
        [*klass::ALIASES].each { |fact_alias| load_fact(fact_alias, klass) } if klass.const_defined?('ALIASES')
      end
    end

    def klass(operating_system, class_name)
      Class.const_get("Facter::#{operating_system}::" + class_name.to_s)
    end

    def load_fact(fact_name, klass)
      loaded_fact = LoadedFact.new(fact_name, klass)
      @facts << loaded_fact
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
facter-4.0.8.pre lib/framework/core/fact_loaders/internal_fact_loader.rb
facter-4.0.7.pre lib/framework/core/fact_loaders/internal_fact_loader.rb