2015-02-09 14 views
6

Czy istnieje sposób komentowania metod zdefiniowanych w define_method w YardDoc?Dokument doc i `define_method`

Próbowałem to:

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

Ale, niestety, nie działa.

+0

Opisz, co "nie działa" znaczy. Nie masz wyjścia? Otrzymujesz wynik, ale nie jest on sformatowany? Jest sformatowany, ale nie jest to format, który chcesz? –

+0

Nic nie pojawia się: brak metod i brak dokumentów dla tych metod. – JoJoS

+0

Nie można udokumentować dynamicznie tworzonej metody, musi ona być statycznie zdefiniowana. Stocznia musiałaby uruchomić swój kod, a następnie użyć introspekcji do generowania metod dostępnych w czasie wykonywania, co nie jest praktyczne. –

Odpowiedz

6

Jeśli przesuniesz stworzenie metody do metody klasy, można użyć makra:

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 wyjścia:

- (String) one_way 

Jedynym sposobem

Powroty:

(String) - ten sposób


- (String) three_way 

Trzy sposób

Powroty:

(String) - trzy way


- (String) two_way 

dwóch way

Powroty:

(String) - dwa way

+0

dlaczego nie działa w pętli? '[: one,: two,: three] .each {| n | generate (n)} '. czy to? – masciugo

+2

@masciugo ponieważ YARD nie wykonuje kodu. – Stefan

+0

OK @Stefan ale .. w takich przypadkach, czy naprawdę musimy dostosować kod, aby używać YARD? Chodzi mi o może mniej czytelny kod na korzyść produkcji automatycznego dokumentu ... czy jest jakiś inny sposób dokumentowania metod, które są definiowane dynamicznie? – masciugo

Powiązane problemy