我对此很陌生,而且我一直在浏览YARD docs,并且无法找到解决问题的方法。
以下是我开始使用的代码:https://github.com/spape/yard-rest-plugin效果很好,但我正在尝试为其添加一些功能。
基本上,我正在尝试添加一个过滤器,以便我可以包含一些模型文档,以便查看Controller API文档的人可以看到他们可以使用的模型的属性。
插件,码头会过滤掉任何没有@resource
标记的方法。所以,我想,我会为我的模型添加一个@resource_object
标记,我希望在API文档中显示某些信息。
在插件的代码中。我在/lib/yard-rest.rb
中找到了YARD::Templates::Template.extra_includes << RestFilters
在该文件中,我修改了reject_without_resource(list)
方法
def reject_without_resource(list)
if list
list.delete_if { |object|
if !object.is_a?(YARD::CodeObjects::ClassObject)
true
else
!object.meths.detect{ |x| x.has_tag?(:resource) }# and
# !object.detect{ |x| x.has_tag?(:resource_object) }
end
}
end
end
在我们关心的情况下,对象是YARD::CodeObjects::ClassObject
。 object.meths
是一系列方法(Method Objects)。并且Method Objects有一个detect方法,它允许通过.has_tag?
调用测试方法是否具有我们想要测试的任何标记。但是,我一直无法在班级找到类似的东西。现在,因为我不想在API Docs的模型中记录任何方法,所以我不想在任何模型方法上放置@resource标记。
我当前的.yardopts文件,以表明我确实正在搜索模型和控制器:
--title "My API Documentation"
--plugin rest
--readme API_README
app/models/*.rb
app/controllers/*.rb
那么,如何更改过滤器,以便我可以包含模型?或者至少是类级别的标签?
答案 0 :(得分:0)
原来,你可以在对象上调用.has_tag。
如果你只是重新排列你的样子:
def reject_without_resource(list)
if list
list.delete_if { |object|
if object.has_tag?(:resource_object)
false
elsif object.meths.detect{ |x| x.has_tag? (:resource) }
false
else
true
end
}
end
end
它会起作用