<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DZone Snippets: documenter code</title>
    <link>http://snippets.dzone.com/posts</link>
    <pubDate>Wed, 23 Jul 2008 14:02:16 GMT</pubDate>
    <description>DZone Snippets: documenter code</description>
    <item>
      <title>Creating a simple Ruby Class documenter</title>
      <link>http://snippets.dzone.com/posts/show/5156</link>
      <description>This Ruby code stores the class name, method names, and method parameters from a ruby file in an XML file.  I have a habit of forgetting what methods I use in my classes, with this code I should at least be able to build up a quick class browser.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;#!/usr/bin/ruby&lt;br /&gt;&lt;br /&gt;# file: ruby2xml.rb&lt;br /&gt;&lt;br /&gt;require 'rexml/document'&lt;br /&gt;include REXML&lt;br /&gt;&lt;br /&gt;class Ruby2XML&lt;br /&gt;&lt;br /&gt;  attr :doc&lt;br /&gt;  &lt;br /&gt;  def initialize(buffer)&lt;br /&gt;&lt;br /&gt;    @outline = buffer.scan(/^class\s+(\w+)(\s+)?|def\s+(\w+)(\s+)?\(?(.*(?=\)))?/)&lt;br /&gt;    @doc = Document.new&lt;br /&gt;    @doc.add_element('ruby')&lt;br /&gt;    o_class = Element.new('class')&lt;br /&gt;    o_class.add_attribute('name', get_class_name)&lt;br /&gt;    o_methods = Element.new('methods')&lt;br /&gt;    &lt;br /&gt;    #get the methods&lt;br /&gt;    1.upto(get_method_count) {|i| o_methods.add_element(add_method(@outline[i])) }&lt;br /&gt;    o_class.add_element(o_methods)&lt;br /&gt;    @doc.root.add_element o_class&lt;br /&gt;&lt;br /&gt;  end&lt;br /&gt;  &lt;br /&gt;  private # everything below this point is private&lt;br /&gt;  &lt;br /&gt;  def get_class_name()&lt;br /&gt;    @outline[0][0]&lt;br /&gt;  end&lt;br /&gt;  &lt;br /&gt;  def get_method_count&lt;br /&gt;    mc = -1&lt;br /&gt;    @outline.each {|m| mc += 1}&lt;br /&gt;    mc &lt;br /&gt;  end&lt;br /&gt;  &lt;br /&gt;  def add_method(amethod)&lt;br /&gt;    o_method = Element.new('method')&lt;br /&gt;    o_method.add_attribute('name',amethod[2]) #get the method name&lt;br /&gt;    o_params = Element.new('params')&lt;br /&gt;&lt;br /&gt;    if amethod[4] then # get the parameter names&lt;br /&gt;      amethod[4].split(',').each {|a| o_params.add_element(add_param(a.strip))}&lt;br /&gt;    end&lt;br /&gt;    &lt;br /&gt;    o_method.add_element(o_params)    &lt;br /&gt;    o_method&lt;br /&gt;  end&lt;br /&gt;  &lt;br /&gt;  def add_param(param)&lt;br /&gt;    o_param = Element.new('param')&lt;br /&gt;    o_param.text = param&lt;br /&gt;    o_param&lt;br /&gt;  end&lt;br /&gt;      &lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;if __FILE__ == $0&lt;br /&gt;&lt;br /&gt;  buffer = File.new('ruby2xml.rb').read&lt;br /&gt;  rx2 = Ruby2XML.new(buffer)&lt;br /&gt;  &lt;br /&gt;  file = File.new('ruby2xml.xml','w')&lt;br /&gt;  file.puts rx2.doc&lt;br /&gt;  file.close&lt;br /&gt;&lt;br /&gt;end&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Note: This is just my first attempt at building some kind of Ruby code documenter, but it should be good enough for my needs at the moment.&lt;br /&gt;&lt;br /&gt;output&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;ruby&gt;&lt;br /&gt;  &lt;class name='Ruby2XML'&gt;&lt;br /&gt;    &lt;methods&gt;&lt;br /&gt;      &lt;method name='initialize'&gt;&lt;params&gt;&lt;param&gt;buffer&lt;/param&gt;&lt;/params&gt;&lt;/method&gt;&lt;br /&gt;      &lt;method name='get_class_name'&gt;&lt;params/&gt;&lt;/method&gt;&lt;br /&gt;      &lt;method name='get_method_count'&gt;&lt;params/&gt;&lt;/method&gt;&lt;br /&gt;      &lt;method name='add_method'&gt;&lt;params&gt;&lt;param&gt;amethod&lt;/param&gt;&lt;/params&gt;&lt;/method&gt;&lt;br /&gt;      &lt;method name='add_param'&gt;&lt;params&gt;&lt;param&gt;param&lt;/param&gt;&lt;/params&gt;&lt;/method&gt;&lt;br /&gt;    &lt;/methods&gt;&lt;br /&gt;  &lt;/class&gt;&lt;br /&gt;&lt;/ruby&gt;&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Tue, 19 Feb 2008 22:33:54 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/5156</guid>
      <author>jrobertson (James Robertson)</author>
    </item>
  </channel>
</rss>
