2012-06-18 39 views
0

我真的很陌生,我一直在閱讀YARD docs,並沒有真正能夠找出解決我的問題的方法。如何使用YARD過濾器檢索課程上的標籤?

這是我開始的代碼:https://github.com/spape/yard-rest-plugin這很好,但我想添加一些功能。

基本上,我試圖添加一個過濾器,以便我可以包含一些Model文檔,以便通過Controller 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::ClassObjectobject.meths是一組方法(Method Objects)。並且方法對象具有檢測方法,該方法允許通過調用.has_tag?來測試方法是否具有我們想要測試的任何標籤。但是,我一直無法爲課堂級別找到類似的東西。現在,因爲我不想記錄API Docs模型中的任何方法,所以我不想將@resource標記放在任何模型方法上。

我目前.yardopts文件,證明我確實想要搜索模型和控制器:

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

所以,我該如何更換過濾器,這樣我可以包括模型?或者至少是級別級別的標籤?

回答

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 

,將工作