Как автоматически документировать метапрограммированные attr_accessors с помощью RDoc? - PullRequest
1 голос
/ 22 марта 2012

FIRST, я бы хотел настроить RDoc таким образом, чтобы он автоматически распознавал каждый ключ attrs хеша foo и bar следующего кода:

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

LAST, я хотел бы, чтобы их значения по умолчанию автоматически перечислялись (то есть в документации это перечисляло бы с атрибутами, которые по умолчанию foo = nil и bar = 'us').

Я изучал документацию RDoc для синтаксического анализатора кода Ruby RDoc :: Parser :: Ruby и хотел бы создать плагин, как описано во RDoc Developer Введение но я не уверен, как вообще начать.

1) Есть ли что-то там, что уже выполняет то, что я описал?2) Если ничего не существует, может кто-нибудь указать мне пример плагина, выполняющего аналогичную функциональность?

...