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