2016-09-01 16 views
3

現在、私は宝石を手作りしており、ドキュメントを作成しています。私は現在、いくつかの方法は次のようdefined_methodを使用して定義しているクラスがあります。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 

私はYARDを使用して、これらの方法を文書化しようとしているが、プロジェクトのドキュメントを生成するとき、メソッドがクラスに表示されません学位論文よドキュメンテーション。

これをどのように文書化することができますか?何か不足していますか?

+0

ヤードのエキスパートではありませんが、ドキュメントを見ていると、フリーフォームのコメントを書く以外にこれを行う方法はないと思います。さらに、メソッドが本当に動的である場合、それらを正確に文書化することはできません。 'one'と' two'メソッドをドキュメント化したい場合は、それらを独自のメソッドにしてください。必要なときに 'define_method'を保存してください。 –

+0

実際の方法は上記の例とまったく同じではありませんが、フリーフォームコメントについてのあなたの点を見ています。 – Aliou

答えて

1

代わりに任意のリストを繰り返し処理の、あなたは一般的に、あなたのクラスのDSLスタイルの呼び出しとして文書化することができ、クラスメソッドに動的挙動をラップすることにより、メソッドを定義するためのマクロを使用します。

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 

・ホープそれはあなたのために働く。

+0

これを試してみます。ありがとうございました – Aliou

関連する問題