class Jets::Commands::Markdown::Page

def desc_markdown

def desc_markdown
  <<-EOL
escription
scription}
end

def description

def description
  @command.description
end

def doc

def doc
  <<-EOL
ont_matter}
age_markdown}
ng_desc_markdown}
tions_markdown}
end

def front_matter

def front_matter
  command = [cli_name, full_command].compact.join(' ')
  <<-EOL
e: #{command}
rence: true
end

def full_command

def full_command
  [namespace, @command_name].compact.join(':')
end

def initialize(cli_class:, command_name:)

def initialize(cli_class:, command_name:)
  @cli_class = cli_class # IE: Jets::Commands::Main
  @command_name = command_name # IE: generate
  @cli_name = "jets"
  @command = @cli_class.commands[@command_name]
end

def long_desc_markdown

If the Thor long_description is empty then use the description.
def long_desc_markdown
  return desc_markdown if long_description.empty?
  <<-EOL
escription
scription}.
ng_description}
end

def long_description

Use command's long description as main description
def long_description
  text = @command.long_description
  return "" if text.nil? # empty description
  lines = text.split("\n")
  lines.map do |line|
    # In the CLI help, we use 2 spaces to designate commands
    # In Markdown we need 4 spaces.
    line.sub(/^  \b/, '    ')
  end.join("\n")
end

def namespace

def namespace
  ns = @cli_class.to_s.sub('Jets::Commands::','').underscore.gsub('/','-')
  ns == 'main' ? nil : ns
end

def options

def options
  shell = Shell.new
  @cli_class.send(:class_options_help, shell, nil => @command.options.values)
  text = shell.stdout.string
  return "" if text.empty? # there are no options
  lines = text.split("\n")[1..-1] # remove first line wihth "Options: "
  lines.map! do |line|
    # remove 2 leading spaces
    line.sub(/^  /, '')
  end
  lines.join("\n")
end

def options_markdown

handles blank options
def options_markdown
  return '' if options.empty?
  <<-EOL
ptions
tions}
end

def path

def path
  full_name = [cli_name, namespace, @command_name].compact.join('-')
  "docs/_reference/#{full_name}.md"
end

def usage

def usage
  banner = @cli_class.send(:banner, @command) # banner is protected method
  invoking_command = File.basename($0) # could be rspec, etc
  banner.sub(invoking_command, cli_name)
end

def usage_markdown

def usage_markdown
  <<-EOL
sage
#{usage}
end