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