如何使用YARD记录在DSL中创建的常量?

时间:2013-09-19 13:50:58

标签: ruby yard

我有一个DSL方法,它添加一个常量(它的遗留代码,所以不要讨厌)。这不是确切的代码,但它足够描述。

class Foo
  bar :awesome, "cold Coke"
  bar :lame,    "warm Coke"

  def bar(name, value)
    const_set(name, value)
  end
end

我正在尝试使用Yard记录常量AWESOMELAME。我希望有一个@!constant标签,但没有。

任何人都可以帮忙吗?

1 个答案:

答案 0 :(得分:1)

我认为这应该让Yard做正确的事情:

# @!parse AWESOME = "cold Coke"
# @!parse LAME = "warm Coke"

如果您的代码中到处都有bar,则可以使用Yard的宏附件进行扩展。但是,宏行为似乎不喜欢常量,或允许您的DSL可能对内容进行字符串处理(例如转换为大写)。我可以获得基本行为,可能适合您的需求,如下所示:

 # @!visibility private
 # @!macro [attach] bar
 #   @!method $1()
 #   @return [String] always "$2"
 def self.bar(name, value)
   const_set(name, value)
 end

bar :awesome, "cold Coke"
bar :lame,    "warm Coke"

最终看起来有点像这样:


实例方法摘要

  • (String) awesome

    • 总是“冷可乐”。
  • (String) lame

    • 总是“温暖的可乐”。