class Facter::InternalFactManager

Public Instance Methods

resolve_facts(searched_facts) click to toggle source

resolves each SearchFact and filter out facts that do not match the given user query @param searched_facts [Array<Facter::SearchedFact>] array of searched facts

@return [Array<Facter::ResolvedFact>]

@api private

# File lib/facter/framework/core/fact/internal/internal_fact_manager.rb, line 11
def resolve_facts(searched_facts)
  internal_searched_facts = filter_internal_facts(searched_facts)
  resolved_facts = if Options[:sequential]
                     resolve_sequentially(internal_searched_facts)
                   else
                     resolve_in_parallel(internal_searched_facts)
                   end

  resolved_facts.flatten!
  resolved_facts.compact!

  nil_resolved_facts = resolve_nil_facts(searched_facts)

  resolved_facts.concat(nil_resolved_facts)
end

Private Instance Methods

core_fact(searched_fact) click to toggle source
# File lib/facter/framework/core/fact/internal/internal_fact_manager.rb, line 73
def core_fact(searched_fact)
  fact = CoreFact.new(searched_fact)
  fact.create
rescue StandardError => e
  log.log_exception(e)
  nil
end
filter_internal_facts(searched_facts) click to toggle source
# File lib/facter/framework/core/fact/internal/internal_fact_manager.rb, line 29
def filter_internal_facts(searched_facts)
  searched_facts.select { |searched_fact| %i[core legacy].include? searched_fact.type }
end
log() click to toggle source
# File lib/facter/framework/core/fact/internal/internal_fact_manager.rb, line 81
def log
  @log ||= Facter::Log.new(self)
end
resolve_fact(searched_fact) click to toggle source
# File lib/facter/framework/core/fact/internal/internal_fact_manager.rb, line 63
def resolve_fact(searched_fact)
  fact_value = core_fact(searched_fact)
  Array(fact_value).map! do |resolved_fact|
    if valid_fact?(searched_fact, resolved_fact)
      resolved_fact.user_query = searched_fact.user_query
      resolved_fact
    end
  end
end
resolve_in_parallel(searched_facts) click to toggle source
# File lib/facter/framework/core/fact/internal/internal_fact_manager.rb, line 57
def resolve_in_parallel(searched_facts)
  searched_facts.map! do |searched_fact|
    Thread.new { resolve_fact(searched_fact) }
  end.map!(&:value)
end
resolve_nil_facts(searched_facts) click to toggle source
# File lib/facter/framework/core/fact/internal/internal_fact_manager.rb, line 44
def resolve_nil_facts(searched_facts)
  resolved_facts = []
  searched_facts.select { |fact| fact.type == :nil }.each do |fact|
    resolved_facts << ResolvedFact.new(fact.name, nil, :nil, fact.name)
  end

  resolved_facts
end
resolve_sequentially(searched_facts) click to toggle source
# File lib/facter/framework/core/fact/internal/internal_fact_manager.rb, line 53
def resolve_sequentially(searched_facts)
  searched_facts.map! { |searched_fact| resolve_fact(searched_fact) }
end
valid_fact?(searched_fact, resolved_fact) click to toggle source
# File lib/facter/framework/core/fact/internal/internal_fact_manager.rb, line 33
def valid_fact?(searched_fact, resolved_fact)
  return if resolved_fact.value.nil?

  searched_fact_name = searched_fact.name
  if searched_fact_name.include?('.*')
    resolved_fact.name.match(searched_fact_name)
  else
    resolved_fact.name == searched_fact_name
  end
end