class AboutYml::TemplateGenerator

Attributes

properties[R]
required[R]
schema[R]

Public Class Methods

new() click to toggle source
# File lib/about_yml/template_generator.rb, line 10
def initialize
  @schema = ::AboutYml::AboutFile.schema
  @properties = schema['properties']
  @required = schema['required']
end

Public Instance Methods

definition_properties(item_ref) click to toggle source
# File lib/about_yml/template_generator.rb, line 21
def definition_properties(item_ref)
  schema['definitions'][item_ref.split('/').last]['properties']
end
generate() click to toggle source
# File lib/about_yml/template_generator.rb, line 16
def generate
  props = properties.map { |name, defn| generate_item name, defn }
  "---\n# #{schema['description']}\n#\n#{props.join "\n\n"}"
end

Private Instance Methods

generate_item(name, definition) click to toggle source
# File lib/about_yml/template_generator.rb, line 27
def generate_item(name, definition)
  "#{property_description name, definition}\n#{name}:" \
    "#{"\n- " if definition['type'] == 'array'}" \
    "#{"\n  placeholder_label:" if definition['patternProperties']}"
end
item_description(definition) click to toggle source
# File lib/about_yml/template_generator.rb, line 49
def item_description(definition)
  item_ref = definition['items']['$ref']
  return '' unless item_ref
  properties = definition_properties item_ref
  descs = properties.map { |name, defn| "#{name}: #{defn['description']}" }
  "\n# Items:\n# - #{descs.shift}\n#   #{descs.join "\n#   "}"
end
pattern_desc(definition) click to toggle source
# File lib/about_yml/template_generator.rb, line 57
def pattern_desc(definition)
  property_descs = definition['patternProperties'].map do |prop_name, ref|
    descs = definition_properties(ref['$ref']).map do |defn_name, defn|
      "#{defn_name}: #{defn['description']}"
    end
    "\n#   #{prop_name}:\n#     #{descs.join "\n#     "}"
  end.join "\n"
  "\n# Items by property name pattern:#{property_descs}"
end
property_description(name, definition) click to toggle source
# File lib/about_yml/template_generator.rb, line 33
def property_description(name, definition)
  description = "# #{definition['description']}"
  description += ' (required)' if required.include? name
  description + value_description(definition)
end
value_description(definition) click to toggle source
# File lib/about_yml/template_generator.rb, line 39
def value_description(definition)
  values = definition['enum']
  return "\n# values: #{values.join ', '}" if values
  type = definition['type']
  return "\n# values: true, false" if type == 'boolean'
  return item_description definition if type == 'array'
  return pattern_desc definition if definition['patternProperties']
  ''
end