0

我对此真的很陌生,而且我一直在浏览YARD 文档,并且还没有真正找到解决我问题的方法。

这是我开始使用的代码:https ://github.com/spape/yard-rest-plugin效果很好,但我正在尝试为其添加一些功能。

基本上,我正在尝试添加一个过滤器,以便我可以包含一些模型文档,以便查看控制器 API 文档的人可以看到他们可以使用的模型的哪些属性。

插件 yard-rest 过滤掉任何没有@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在我们关心的情况下,对象是 a 。object.meths是一个方法数组(方法对象)。并且方法对象有一个检测方法,它允许测试一个方法是否具有我们想要通过.has_tag?调用测试的任何标签。但是,我一直无法为班级找到类似的东西。现在,因为我不想在 API Docs 的模型中记录任何方法,所以我不想将 @resource 标记放在任何模型方法上。

我当前的 .yardopts 文件,表明我确实在搜索模型和控制器:

--title "My API Documentation"
--plugin rest
--readme API_README
app/models/*.rb
app/controllers/*.rb

那么,如何更改过滤器,以便我可以包含模型?或者至少是类级别的标签?

4

1 回答 1

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

它会起作用的

于 2012-06-18T19:19:39.510 回答