class Documentize::Collector

Constants

REGEX

Public Instance Methods

run(lines) click to toggle source
# File lib/documentize/collector.rb, line 16
def run(lines)
  queue, header = remove_headers(lines)
  [build(queue), header]
end

Private Instance Methods

build(queue) click to toggle source
# File lib/documentize/collector.rb, line 23
def build(queue)
  content = []
  skips = 0
  until queue.length == 0

    item = queue.shift

    if item =~ REGEX[:is_class] ||
       item =~ REGEX[:is_method] ||
       item =~ REGEX[:is_module]

      item = parse_command(item)

      item[:content], queue = build(queue)

    elsif item =~ REGEX[:block] || item =~ REGEX[:flow]

      skips += 1 unless item =~ REGEX[:inline_do]

    elsif item =~ /end/

      return content, queue if skips <= 0
      skips -= 1

    end

    content  << item

  end

  content

end
get_args(cmd) click to toggle source
# File lib/documentize/collector.rb, line 57
def get_args(cmd)
  if cmd !~ REGEX[:args]
    [cmd, nil]
  else
    matches = cmd.match(REGEX[:args])
    [matches[1], parse_args(matches[2])]
  end
end
parse_args(arg_list) click to toggle source
# File lib/documentize/collector.rb, line 66
def parse_args(arg_list)
  breakup = arg_list.split(",").map{|arg| arg.strip}
  breakup.map do |arg|
    items = arg.split("=").map{ |item| item.strip }
    {
      name: items[0],
      default: items[1],
      type: nil,
      test: nil
    }
  end
end
parse_command(cmd) click to toggle source
# File lib/documentize/collector.rb, line 79
def parse_command(cmd)
  breakup = cmd.split(" ", 2)
  if breakup[0] == "def"
    type = "method"
    cmd, args = get_args(breakup[1])
  else
    type = breakup[0]
    cmd = breakup[1]
  end
  {
    type: type,
    name: cmd,
    desc: nil,
    doc: nil,
    args: args,
    content: [],
  }
end
remove_headers(file) click to toggle source
# File lib/documentize/collector.rb, line 98
def remove_headers(file)
  header = ""
  until file[0] !~ REGEX[:header] && file[0] !~ REGEX[:comment]
    header << "#{file.shift}\n"
  end
  header = header.length == 0 ? nil : header.strip
  [file, header]
end