module ApiDocGeneration::FormatNote

Public Class Methods

analyze(filelines, line_number) click to toggle source
# File lib/api_doc_generation/format_note.rb, line 24
def analyze(filelines, line_number)
  document = {}
  
  tmp = []; last_line = ""

  line_number.downto(0) do |i|
    line = filelines[i]

    break unless line =~ /^\s*(\#.*?\n)?$/
    break if line =~ /encoding/

    line.gsub!(/\s*\#/, '')
    next if line =~ /^\s*$/

    format_line(line, tmp, document)

    last_line = line
  end

  document['Desc'] = last_line
  document.delete last_line

  Hash[document.to_a.reverse]
end

Private Class Methods

format_line(line, tmp, document) click to toggle source
# File lib/api_doc_generation/format_note.rb, line 53
def format_line(line, tmp, document)
  m = line.match(/(?<level>\s*)(?<desc>(?<key>.*?)(\:(?<val>.*?))?)$/)
  level = m[:level].length / 2
  desc = m[:desc].gsub(/^\s*|\s*$/, '')
  line.gsub!(/^\s*|\:?\s*$/, '')

  if level == 0
    if tmp.length == 0 && m[:val] && m[:val].length > 0
      document[m[:key]] = m[:val]
    else
      document[m[:key] + (m[:val] || '')] = tmp.reverse.each_with_object([]) do |p, result|
        if p['level'] >= 2 && result.last
          result.last['children'] ||= []
          result.last['children'] << p
        else
          result << p
        end
      end
    end
    tmp.clear
  else
    m = desc.match(/(?<name>\w+)\:?\s*((\[(?<type>.*?)\]\s*)?(?<val>.*))?$/)
    p = {'level' => level, 'desc' => desc}

    p.merge!({
      'name' => m[:name],
      'type' => m[:type],
      'val' => m[:val]
    }) if m

    tmp << p
  end
end