如何使用RDoc自动记录Metaprogrammed attr_accessors?

时间:2012-03-22 15:50:25

标签: ruby rdoc

首先,我想自定义RDoc,以便它自动识别以下代码的attrs哈希foobar的每个键:

class SomeClass
  def initialize( args = { }) 
    attrs = { 'foo'  => nil,
              'bar'    => 'us'}
    attrs.each_key{ |key| (class << self; self; end).send( :attr_accessor, key.to_sym)}

    attrs.each_key do |key|
      attrs[ key] = args[ key] if( args.has_key?( key))
      raise "No #{key} defined" if( attrs[key] === nil))
    end

    attrs.each {|key, value| instance_variable_set( "@#{key}", value)}
  end
end

好像我按如下方式对它们进行了初始化:

class SomeClass
  attr_accessor :foo, :bar
  def initialize( foo = nil, bar = 'us') 
      raise "No foo defined" if( foo === nil))
      @foo = foo
      @bar = bar
  end
end

我可以执行以下操作,并使访问者正确显示为Attributes

class SomeClass
  ##
  # :attr_accessor: foo

  ##
  # :attr_accessor: bar

  ##
  # this is a comment for a the initialize method

  def initialize( args = { }) 
    attrs = { 'foo'  => nil,
              'bar'    => 'us'}
    attrs.each_key{ |key| (class << self; self; end).send( :attr_accessor, key.to_sym)}

    attrs.each_key do |key|
      attrs[ key] = args[ key] if( args.has_key?( key))
      raise "No #{key} defined" if( attrs[key] === nil))
    end

    attrs.each {|key, value| instance_variable_set( "@#{key}", value)}
  end
end

但我希望RDoc能够自动识别这些!

第二,我希望能够在类似于以下的庄园中发表与其定义相关的评论,并将评论显示在文档中:

class SomeClass
  def initialize( args = { }) 
    attrs = { 
              ##
              #This stores your Foo
              'foo'  => nil,
              ##
              #This stores your Bar
              'bar'    => 'us'}
    attrs.each_key{ |key| (class << self; self; end).send( :attr_accessor, key.to_sym)}

    attrs.each_key do |key|
      attrs[ key] = args[ key] if( args.has_key?( key))
      raise "No #{key} defined" if( attrs[key] === nil))
    end

    attrs.each {|key, value| instance_variable_set( "@#{key}", value)}
  end
end

最后,我希望自动列出他们的默认值(即在列出的文档中使用默认值foo = nilbar = 'us'的属性。

我一直在研究Ruby代码解析器RDoc::Parser::Ruby的RDoc文档,我想构建一个插件,如RDoc Developer Introduction所述,但我不确定如何开始。

1)那里有什么东西已经完成了我所描述的内容吗? 2)如果不存在,有人可以指点我一个完成类似功能的示例插件吗?