2015-02-09 12 views
6

Esiste un modo per commentare i metodi definiti con define_method in YardDoc?Yard doc e `define_method`

ho provato questo:

%w(one two three).each do |type| 
    # The #{type} way 
    # @return [String] the #{type} way 
    define_method("#{type}_way") do ... end 
end 

Ma, purtroppo, non funziona.

+0

descrivere ciò che "non funziona" si intende. Non ottieni output? Riceverai l'output ma non è formattato? È formattato ma non è il formato che desideri? –

+0

Non appare nulla: nessun metodo e nessun documento per questi metodi – JoJoS

+0

Non è possibile documentare un metodo creato dinamicamente, deve essere definito staticamente. Yard dovrebbe eseguire il tuo codice quindi utilizzare l'introspezione per generare i metodi disponibili in fase di esecuzione, il che non è pratico. –

risposta

6

Se si sposta la creazione di una funzione all'interno di un metodo di classe, è possibile utilizzare una macro:

class Foo 

    # @!macro [attach] generate 
    # @method $1_way 
    # The $1 way 
    # @return [String] the $1 way 
    def self.generate(type) 
    define_method("#{type}_way") do 
    end 
    end 

    generate :one 
    generate :two 
    generate :three 

end 

YARD uscita:

- (String) one_way 

L'unico modo

Returns:

(String) - l'unico modo


- (String) three_way 

Il tre vie

Returns:

(String) - le tre vie


- (String) two_way 
.210

le due vie

Returns:

(String) - le due vie

+0

perché non funziona in loop? '[: uno,: due,: tre] .each {| n | generare (n)} '. lo fa? – masciugo

+2

@masciugo perché YARD non esegue il codice. – Stefan

+0

OK @Stefan ma .. in casi come questo, dobbiamo davvero adattare il codice per usare YARD? Intendo codice forse meno leggibile a favore della produzione di documenti auto ... o c'è un altro modo per documentare metodi che sono definiti dinamicamente? – masciugo

Problemi correlati