2012-03-22 2 views
1

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

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 = nil и bar = 'us').

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

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

+0

Я не уверен, что вы можете сделать это. Возможно, вместо того, чтобы пытаться 'self.send (...)' you _might_ быть в состоянии использовать 'attr _ * (key)', если RDoc достаточно умен для этого. – Jwosty

+0

Код функционирует точно так, как я хочу, мне нужна динамически созданная документация. Я ищу способ настройки RDoc таким образом, чтобы он распознавал каждый из моих объектов attr_ * s в моем методе инициализации (т. Е. 'Attr_writers' attr_readers' attr_accessors') и просто помещает их в мою документацию, отмечая их значения по умолчанию. – rudolph9

+0

Хмм, я не думаю, что у RDoc есть такие возможности. Но, вероятно, было бы не слишком сложно построить один поверх него. – Jwosty

ответ