class Terraspace::Seeder::Content

Public Class Methods

new(parsed) click to toggle source
# File lib/terraspace/seeder/content.rb, line 5
def initialize(parsed)
  @parsed = parsed
end

Public Instance Methods

all_vars() click to toggle source
# File lib/terraspace/seeder/content.rb, line 71
def all_vars
  select_vars(@parsed)
end
build() click to toggle source
# File lib/terraspace/seeder/content.rb, line 9
def build
  lines = []
  lines << "# Required variables:" unless required_vars.empty?
  required_vars.each do |name, meta|
    lines << build_line(name, meta)
  end
  lines << "" unless required_vars.empty?
  lines << "# Optional variables:" unless optional_vars.empty?
  optional_vars.each do |name, meta|
    lines << build_line(name, meta)
  end
  lines.join("\n") + "\n"
end
build_line(name, meta) click to toggle source
# File lib/terraspace/seeder/content.rb, line 23
def build_line(name, meta)
  value = var_value(meta)
  name = "# #{name}" if meta["default"] # optional so add as a comment
  name = "%-#{rpad}s" % name # rpad to align = signs
  "#{name} = #{value}"
end
desc_example(desc) click to toggle source
# File lib/terraspace/seeder/content.rb, line 56
def desc_example(desc)
  return unless desc
  md = desc.match(/([eE]xample|IE): (.*)/)
  return unless md
  md[2]
end
escape(type, value) click to toggle source
# File lib/terraspace/seeder/content.rb, line 41
def escape(type, value)
  if type&.include?('(') # complex type
    "[...] # #{type}"
  elsif %w[null any true false].include?(value)
    value # no quotes
  else
    %Q|"#{value}"| # add quotes
  end
end
optional_vars() click to toggle source
# File lib/terraspace/seeder/content.rb, line 67
def optional_vars
  select_vars(@parsed) { |meta| !meta["default"].nil? }
end
required_vars() click to toggle source
# File lib/terraspace/seeder/content.rb, line 63
def required_vars
  select_vars(@parsed) { |meta|  meta["default"].nil? }
end
rpad() click to toggle source
# File lib/terraspace/seeder/content.rb, line 51
def rpad
  all_vars.keys.map(&:size).max
end
select_vars(parsed) { |meta| ... } click to toggle source
# File lib/terraspace/seeder/content.rb, line 75
def select_vars(parsed)
  vars = parsed.dig("variable")
  return [] unless vars
  vars.select do |name,meta|
    block_given? ? yield(meta) : true
  end
end
var_value(meta) click to toggle source
# File lib/terraspace/seeder/content.rb, line 30
def var_value(meta)
  type, default = meta["type"], meta["default"]

  if default
    escape(type, default)
  else
    value = desc_example(meta["description"]) || type || "any"
    escape(type, value)
  end
end