class Facter::LegacyFactFormatter

Public Class Methods

new() click to toggle source
# File lib/facter/framework/formatters/legacy_fact_formatter.rb, line 5
def initialize
  @log = Log.new(self)
end

Public Instance Methods

format(resolved_facts) click to toggle source
# File lib/facter/framework/formatters/legacy_fact_formatter.rb, line 9
def format(resolved_facts)
  user_queries = resolved_facts.uniq(&:user_query).map(&:user_query)

  return if user_queries.count < 1
  return format_for_multiple_user_queries(user_queries, resolved_facts) if user_queries.count > 1

  user_query = user_queries.first
  return format_for_no_query(resolved_facts) if user_query.empty?

  format_for_single_user_query(user_queries.first, resolved_facts)
end

Private Instance Methods

format_for_multiple_user_queries(user_queries, resolved_facts) click to toggle source
# File lib/facter/framework/formatters/legacy_fact_formatter.rb, line 33
def format_for_multiple_user_queries(user_queries, resolved_facts)
  @log.debug('Formatting for multiple user queries')

  facts_to_display = Facter::FormatterHelper.retrieve_facts_to_display_for_user_query(user_queries, resolved_facts)

  facts_to_display.each { |k, v| facts_to_display[k] = v.nil? ? '' : v }
  pretty_json = hash_to_facter_format(facts_to_display)
  pretty_json = remove_enclosing_accolades(pretty_json)
  pretty_json = remove_comma_and_quotation(pretty_json)
  pretty_json = handle_newlines(pretty_json)

  @log.debug('Remove quotes from value if value is a string')
  pretty_json.gsub(/^(\S*) => "(.*)"/, '\1 => \2')
end
format_for_no_query(resolved_facts) click to toggle source
# File lib/facter/framework/formatters/legacy_fact_formatter.rb, line 23
def format_for_no_query(resolved_facts)
  @log.debug('Formatting for no user query')
  fact_collection = Facter::FormatterHelper.retrieve_fact_collection(resolved_facts)
  pretty_json = hash_to_facter_format(fact_collection)

  pretty_json = remove_enclosing_accolades(pretty_json)
  pretty_json = remove_comma_and_quotation(pretty_json)
  handle_newlines(pretty_json)
end
format_for_single_user_query(user_query, resolved_facts) click to toggle source
# File lib/facter/framework/formatters/legacy_fact_formatter.rb, line 48
def format_for_single_user_query(user_query, resolved_facts)
  @log.debug('Formatting for single user query')

  fact_value = Facter::FormatterHelper.retrieve_fact_value_for_single_query(user_query, resolved_facts)

  return fact_value if fact_value.is_a?(String)

  pretty_json = fact_value.nil? ? '' : hash_to_facter_format(fact_value)

  @log.debug('Remove quotes from value if it is a simple string')
  pretty_json.gsub(/^"(.*)"/, '\1')
end
handle_newlines(pretty_fact_json) click to toggle source
# File lib/facter/framework/formatters/legacy_fact_formatter.rb, line 89
def handle_newlines(pretty_fact_json)
  @log.debug('Convert newline characters to actual newlines')
  pretty_fact_json.gsub('\n', "\n")
end
hash_to_facter_format(facts_hash) click to toggle source
# File lib/facter/framework/formatters/legacy_fact_formatter.rb, line 61
def hash_to_facter_format(facts_hash)
  @log.debug('Converting hash to pretty json')
  pretty_json = JSON.pretty_generate(facts_hash)

  @log.debug('Change key value delimiter from : to =>')
  pretty_json.gsub!(/":\s/, '" => ')

  @log.debug('Remove quotes from parent nodes')
  pretty_json.gsub!(/"(.*)"\ =>/, '\1 =>')

  @log.debug('Remove double backslashes from paths')
  pretty_json.gsub(/\\\\/, '\\')
end
remove_comma_and_quotation(output) click to toggle source
# File lib/facter/framework/formatters/legacy_fact_formatter.rb, line 94
def remove_comma_and_quotation(output)
  # quotation marks that come after \ are not removed
  @log.debug('Remove unnecessary comma and quotation marks on root facts')
  output.split("\n")
        .map! { |line| /^\s+/.match?(line) ? line : line.gsub(/,$|(?<!\\)"/, '').gsub('\\"', '"') }.join("\n")
end
remove_enclosing_accolades(pretty_fact_json) click to toggle source
# File lib/facter/framework/formatters/legacy_fact_formatter.rb, line 75
def remove_enclosing_accolades(pretty_fact_json)
  @log.debug('Removing enclosing accolades')
  pretty_fact_json = pretty_fact_json[1..-2]

  @log.debug('Remove empty lines')
  pretty_fact_json.gsub!(/^$\n/, '')

  @log.debug('Fix indentation after removing enclosed accolades')
  pretty_fact_json = pretty_fact_json.gsub(/^\s\s(.*)$/, '\1')

  @log.debug('remove comas from query results')
  pretty_fact_json.gsub(/^},/, '}')
end