0
我在我的REST API wrapeer中有兩個類:Wrapper::Folder
和Wrapper::File
。每個文件夾可以包含多個文件夾和文件。文件夾的內容可以通過.list.
類的方法進行修改。遞歸找到所有文件的最佳方式(REST API)
我想實現.all
類的方法Wrapper::File
這將返回所有文件夾中的所有文件的數組。
下面的方法不起作用,但顯示像我想要的東西。
class Wrapper::File
def self.all
folders = Wrapper::Folder.list('/')
files = []
while folders.size > 0
folders.each do |object|
if object.is_a?(Wrapper::Folder)
folders = Wrapper::Folder.list('/')
else
files << object
end
end
end
end
end
它通過'Dir'和'File'操作目錄和文件,而我無法做到這一點。它是REST API的封裝器,文件與只有類名的目錄不同。 – p0deje 2012-03-08 15:12:16
解決方案基本相同 - _self.all_需要接受_path_參數,第一個列表調用應該是_folders = Wrapper :: Folder.list(path)_。刪除outer_while folders.size> 0_而不是_Dir.each_,使用_folders.each_(或甚至_Wrapper :: Folder.list(path).each_)。目錄測試需要像_files + = self.all(object)_這樣的東西來遞歸到目錄結構中,而不是重複相同的列表調用。其他條件看起來不錯。在你的迭代器之後,你需要返回你的文件數組(它將被遞歸地推回到_files + = self.all(object)_ array。 – vengeance 2012-03-08 15:41:46
實際上,而不是路徑,它看起來像你可以傳入一個Wrapper: :文件夾對象並從那裏獲取您的列表。 – vengeance 2012-03-08 15:45:35