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) Если ничего не существует, может ли кто-нибудь указать мне пример плагина, выполняющего аналогичные функции?
Я не уверен, что вы можете сделать это. Возможно, вместо того, чтобы пытаться 'self.send (...)' you _might_ быть в состоянии использовать 'attr _ * (key)', если RDoc достаточно умен для этого. – Jwosty
Код функционирует точно так, как я хочу, мне нужна динамически созданная документация. Я ищу способ настройки RDoc таким образом, чтобы он распознавал каждый из моих объектов attr_ * s в моем методе инициализации (т. Е. 'Attr_writers' attr_readers' attr_accessors') и просто помещает их в мою документацию, отмечая их значения по умолчанию. – rudolph9
Хмм, я не думаю, что у RDoc есть такие возможности. Но, вероятно, было бы не слишком сложно построить один поверх него. – Jwosty