0
私はREST API wrapeerに2つのクラスを持っています:Wrapper::Folder
とWrapper::File
です。各フォルダーには、多数のフォルダーとファイルを含めることができます。フォルダの内容は.list.
クラスメソッドで取得できます。すべてのファイルを再帰的に見つける最良の方法(REST API)
Wrapper::File
の.all
クラスメソッドを実装して、すべてのフォルダのすべてのファイルの配列を返したいとします。
次のメソッドは機能しませんが、私が欲しいものを示しています。
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
解決方法は基本的に同じです - _self.all_は_path_パラメータを受け入れる必要があり、最初のリスト呼び出しは_folders = Wrapper :: Folder.list(path)_でなければなりません。外側の_while folders.size> 0_を削除し、_Dir.each_の代わりに_folders.each_(または_Wrapper :: Folder.list(path).each_)を使用します。ディレクトリテストでは、同じリスト呼び出しを繰り返すのではなく、ディレクトリ構造を再帰的に処理するために_files + = self.all(object)_のようなものが必要です。それ以外の場合はOKです。あなたのイテレータの後で、ファイル配列を返す必要があります(再帰的に_files + = self.all(object)_ arrayにプッシュバックされます)。 – vengeance
実際にはパスの代わりに、ラッパーを渡すことができます。 :フォルダオブジェクトとそこからあなたのリストを取得します。 – vengeance