module NewRelicYML

Constants

CRITICAL
DEFAULTS
PROCS

Don’t evaluate Procs, instead use set values

SKIP

Skip because not configurable via yml

Public Class Methods

build_string(defaults) click to toggle source
# File lib/tasks/helpers/newrelicyml.rb, line 128
def self.build_string(defaults)
  configs = get_configs(defaults)
  yml_string = ''

  configs.each do |key, value|
    yml_string += "#{value[:description]}\n  # #{key}: #{value[:default]}\n\n"
  end

  yml_string
end
default_value(key, config_hash) click to toggle source
# File lib/tasks/helpers/newrelicyml.rb, line 116
def self.default_value(key, config_hash)
  if PROCS.include?(key)
    PROCS[key]
  else
    default = config_hash[:documentation_default].nil? ? config_hash[:default] : config_hash[:documentation_default]
    default = 'nil' if default.nil?
    default = '""' if default == ''

    default
  end
end
deprecated?(value) click to toggle source
# File lib/tasks/helpers/newrelicyml.rb, line 86
def self.deprecated?(value)
  value[:deprecated] == true
end
format_description(description) click to toggle source
# File lib/tasks/helpers/newrelicyml.rb, line 105
def self.format_description(description)
  # remove leading and trailing whitespace
  description.strip!
  # wrap text after 80 characters
  description.gsub!(/(.{1,80})(\s+|\Z)/, "\\1\n")
  # add hashtags to lines
  description = description.split("\n").map { |line| "  # #{line}" }.join("\n")

  description
end
get_configs(defaults) click to toggle source
# File lib/tasks/helpers/newrelicyml.rb, line 69
def self.get_configs(defaults)
  defaults.sort.each_with_object({}) do |(key, value), final_configs|
    next if CRITICAL.include?(key) || SKIP.include?(key)

    next unless public_config?(value) && !deprecated?(value)

    sanitized_description = sanitize_description(value[:description])
    description = format_description(sanitized_description)
    default = default_value(key, value)
    final_configs[key] = {description: description, default: default}
  end
end
public_config?(value) click to toggle source
# File lib/tasks/helpers/newrelicyml.rb, line 82
def self.public_config?(value)
  value[:public] == true
end
sanitize_description(description) click to toggle source
# File lib/tasks/helpers/newrelicyml.rb, line 90
def self.sanitize_description(description)
  # remove callouts
  description = description.split("\n").reject { |line| line.match?('</?Callout') }.join("\n")
  # remove InlinePopover, keep the text inside type
  description.gsub!(/<InlinePopover type="(.*)" \/>/, '\1')
  # remove hyperlinks
  description.gsub!(/\[([^\]]+)\]\([^\)]+\)/, '\1')
  # remove single pairs of backticks
  description.gsub!(/`([^`]+)`/, '\1')
  # removed href links
  description.gsub!(/<a href="(.*)">(.*)<\/a>/, '\2')

  description
end
write_file(defaults = DEFAULTS) click to toggle source

:nocov:

# File lib/tasks/helpers/newrelicyml.rb, line 140
def self.write_file(defaults = DEFAULTS)
  File.write('newrelic.yml', HEADER + build_string(defaults) + FOOTER)
end