2016-09-01 2 views
3

Ich arbeite derzeit an einem Juwel und schreiben Dokumentation dafür. Im Moment habe ich eine Klasse, die mehrere Verfahren definiert defined_method wie folgt verwendet:Dokumentieren Methoden erstellt mit Meta-Programmierung mit YARD

class Client 
    ['one', 'two'].each do |method_name| 
    # Sets the value 
    # @param argument the argument to set. 
    define_method("set_#{method_name}") do |argument| 
     # Method content 
    end 
    end 
end 

Ich versuche, diese Methoden zu dokumentieren YARD verwenden, aber wenn Sie die Dokumentation des Projekts zu erzeugen, Thesen Methoden erscheinen nicht in der Klasse Dokumentation.

Weiß jemand, wie ich diese dokumentieren könnte? Fehle ich etwas?

+0

kein hofexperte, aber nachdem ich ihre docs angeschaut habe, glaube ich nicht, dass es eine möglichkeit gibt, dies zu tun, außer einen freiformkommentar zu schreiben. Außerdem, wenn die Methoden wirklich dynamisch sind, werden Sie nicht in der Lage sein, sie genau zu dokumentieren. Wenn Sie "eine" und "zwei" Methoden dokumentieren wollen, machen Sie sie zu ihren eigenen Methoden. Speichern Sie 'define_method', wenn es benötigt wird. –

+0

Die tatsächlichen Methoden sind nicht genau wie im obigen Beispiel, aber ich sehe Ihren Punkt über Freiformkommentar. – Aliou

Antwort

1

Statt eine beliebige Liste von Iterieren, würden Sie im Allgemeinen Makros verwenden die Methoden, die durch das dynamische Verhalten in einer Klassenmethode Verpackung, die als DSL-Stil Anrufe in Ihrer Klasse dokumentiert werden können:

class << self 
    private 
    # @macro [attach] container.increment 
    # @method $1() 
    # Increment the $1 container. 
    def make(name) 
     define_method(name) { container.send(name).increment } 
    end 
    end 

    make :lion 
    make :pigeon 
end 

Hoffnung es funktioniert für dich.

+0

Wird dies versuchen. Vielen Dank – Aliou

Verwandte Themen