2016-09-01 3 views
3

Je travaille actuellement sur une gemme et je lui écris une documentation. J'ai actuellement une classe qui a plusieurs méthode définie à l'aide defined_method comme suit:Documenter les méthodes créées avec la méta-programmation à l'aide de 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 

Je suis en train de documenter ces méthodes en utilisant YARD, mais lors de la génération de la documentation du projet, les méthodes thèses ne figurent pas dans la classe Documentation.

Est-ce que quelqu'un sait comment je pourrais documenter ces? Est-ce que je manque quelque chose?

+0

pas un expert de la cour, mais après avoir regardé leurs docs je ne pense pas qu'il y ait un moyen de le faire autre que d'écrire un commentaire freeform. En outre, si les méthodes sont vraiment dynamiques, vous ne pourrez pas les documenter avec précision. Si vous voulez documenter les méthodes 'one' et' two', créez-les avec leurs propres méthodes. Enregistrer 'define_method' pour quand c'est nécessaire. –

+0

Les méthodes actuelles ne sont pas exactement comme dans l'exemple ci-dessus mais je vois votre point sur le commentaire de forme libre. – Aliou

Répondre

1

Au lieu de itérer une liste arbitraire, vous auriez généralement utiliser des macros pour définir les méthodes en enveloppant le comportement dynamique dans une méthode de classe qui peuvent être documentées comme des appels de style DSL dans votre classe:

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 

Espoir ça marche pour toi.

+0

Va essayer ça. Je vous remercie – Aliou