Sha256: d5b82ff412963650e436da7d9d259f167b2324706adb6eb051dcfb5c99f2bd5b

Contents?: true

Size: 1.81 KB

Versions: 5

Compression:

Stored size: 1.81 KB

Contents

# frozen_string_literal: true

module Facter
  class FactLoader
    include Singleton

    attr_reader :internal_facts, :external_facts, :facts

    def initialize
      @log = Log.new(self)

      @internal_facts = []
      @external_facts = []
      @facts = []
    end

    def load(options)
      @internal_loader ||= InternalFactLoader.new
      @external_fact_loader ||= ExternalFactLoader.new

      @facts = []
      @external_facts = []
      load_internal_facts(options)
      load_external_facts(options)

      @facts
    end

    private

    def load_internal_facts(options)
      @log.debug('Loading internal facts')

      if options[:user_query] || options[:show_legacy]
        # if we have a user query, then we must search in core facts and legacy facts
        @log.debug('Loading all internal facts')
        @internal_facts = @internal_loader.facts
      else
        @log.debug('Load only core facts')
        @internal_facts = @internal_loader.core_facts
      end

      @internal_facts = block_facts(@internal_facts, options)
      @facts.concat(@internal_facts)
    end

    def load_external_facts(options)
      @log.debug('Loading external facts')
      if options[:custom_facts]
        @log.debug('Loading custom facts')
        @external_facts.concat(@external_fact_loader.custom_facts)
      end

      @external_facts = block_facts(@external_facts, options)

      if options[:external_facts]
        @log.debug('Loading external facts')
        @external_facts.concat(@external_fact_loader.external_facts)
      end

      @facts.concat(@external_facts)
    end

    def block_facts(facts, options)
      blocked_facts = options[:blocked_facts] || []

      facts = facts.reject do |fact|
        blocked_facts.select { |blocked_fact| fact.name.match(/^#{blocked_fact}/) }.any?
      end

      facts
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
facter-4.0.35 lib/facter/framework/core/fact_loaders/fact_loader.rb
facter-4.0.34 lib/facter/framework/core/fact_loaders/fact_loader.rb
facter-4.0.33 lib/facter/framework/core/fact_loaders/fact_loader.rb
facter-4.0.32 lib/facter/framework/core/fact_loaders/fact_loader.rb
facter-4.0.31 lib/facter/framework/core/fact_loaders/fact_loader.rb