X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/72e22b49ec2721d3a1369da768d3d74fa9c079c3..615e280721c4be51556e2c31b4baffa69dd0d6d8:/apps/workbench/app/models/arvados_resource_list.rb?ds=sidebyside diff --git a/apps/workbench/app/models/arvados_resource_list.rb b/apps/workbench/app/models/arvados_resource_list.rb index dea2f30d1d..99502bd56e 100644 --- a/apps/workbench/app/models/arvados_resource_list.rb +++ b/apps/workbench/app/models/arvados_resource_list.rb @@ -1,3 +1,7 @@ +# Copyright (C) The Arvados Authors. All rights reserved. +# +# SPDX-License-Identifier: AGPL-3.0 + class ArvadosResourceList include ArvadosApiClientHelper include Enumerable @@ -9,6 +13,17 @@ class ArvadosResourceList @fetch_multiple_pages = true @arvados_api_token = Thread.current[:arvados_api_token] @reader_tokens = Thread.current[:reader_tokens] + @results = nil + @count = nil + @offset = 0 + @cond = nil + @eager = nil + @select = nil + @orderby_spec = nil + @filters = nil + @distinct = nil + @include_trash = nil + @limit = nil end def eager(bool=true) @@ -86,7 +101,7 @@ class ArvadosResourceList end end end - @cond.keys.select { |x| x.match /_kind$/ }.each do |kind_key| + @cond.keys.select { |x| x.match(/_kind$/) }.each do |kind_key| if @cond[kind_key].is_a? Class @cond = @cond.merge({ kind_key => 'arvados#' + arvados_api_client.class_kind(@cond[kind_key]) }) end @@ -130,13 +145,18 @@ class ArvadosResourceList def each(&block) if not @results.nil? - @results.each &block + @results.each(&block) else + results = [] self.each_page do |items| items.each do |i| + results << i block.call i end end + # Cache results only if all were retrieved (block didn't raise + # an exception). + @results = results end self end