2012-04-27 2 views
0

ヤードックのレジスタを反復処理する方法を探しています@macroヤードック@マクロのレジスタを反復する

class Post 
    include DataMapper::Resource 

    # @macro dm.property 
    # @return [$2] the $1 $0 of the post 
    property :title, String 
end 

、あなたはレジスタは次のようにあなたのような配列の部分を取っていたかのようにコマスで区切って表した引数を生成することができます:私はあなたが以下のようにのようなものでそれらを使用することができます知っている

# @macro dsl_method 
# @method $1(${2--2}) 
# @return [${-1}] the return value of $0 
create_method_with_args :foo, :a, :b, :c, String 

生成:foo(a, b, c)returns (String) the return value of create_method_with_argsを私は(${2--1}).each do |$arg|ような呼び出し何かに興味やドキュメントを行うには、ドキュメントの1行を持つのparamsのそれぞれを言います。

答えて

1

残念ながら、マクロはドキュメントのDRYnessを軽減するための極めて単純なツールです。セキュリティ上の理由から、実行可能マクロを実装しないようにしました(あなたのコメントにRubyを実行させたくないかもしれません)。それらは実際にすべての問題に対するすべての解決策には適していませんが、非常に単純なケースでうまく機能します。より複雑な場合には、プラグインはまだ推奨されています。

実際のパラメータのドキュメントのどこかで指定しなければならないので、プラグインでも何かを簡略化する方法はわかりません。もし私があなただったら、すでに定義したとおりに定義し、@paramタグを使ってそれぞれの引数を個別に定義します。例えば、(のマクロが以前あなたの質問にあなたが行った方法を「添付」されたと仮定しましょう):私にはかなり合理的なようだ

# @param [String] a documentation for a 
# @param [Symbol] b documentation for b 
# @param [Hash] c documentation for c 
create_method_with_args :bar, :a, :b, :c, Fixnum 

を、あなたはそれらのドキュメントにまで乾燥させることができる他の多くありませんので、。

+0

しかし、ここで作成した例(https://gist.github.com/2510343)のように、メソッドの動的な引数を使ってDSLにアプローチする方法はありますか?最終的には、この文の精神で 'def self.property(name、type、(arg_name、default、type、required)*)'というDSLを定義したいと思います。重いCのバックグラウンドから来て、私はそれが構造体に相当する何かの動的な数値を入力したいと思っていると私はそれを記述することができる最善の方法を推測し、それぞれに構造的に含まれる値に応じて '@ param' 。 – rudolph9