X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/81c6881710e5d2e21f44682455f176dd965684cd..c19ef999c3b938e6d3cdc3746fab5bad8aba3403:/apps/workbench/app/models/arvados_resource_list.rb diff --git a/apps/workbench/app/models/arvados_resource_list.rb b/apps/workbench/app/models/arvados_resource_list.rb index 3842c97c37..d585b3ca9d 100644 --- a/apps/workbench/app/models/arvados_resource_list.rb +++ b/apps/workbench/app/models/arvados_resource_list.rb @@ -1,7 +1,7 @@ class ArvadosResourceList include Enumerable - def initialize(resource_class) + def initialize resource_class=nil @resource_class = resource_class end @@ -25,6 +25,12 @@ class ArvadosResourceList self end + def filter _filters + @filters ||= [] + @filters += _filters + self + end + def where(cond) cond = cond.dup cond.keys.each do |uuid_key| @@ -58,6 +64,7 @@ class ArvadosResourceList api_params[:limit] = @limit if @limit api_params[:offset] = @offset if @offset api_params[:order] = @orderby_spec if @orderby_spec + api_params[:filters] = @filters if @filters res = $arvados_api_client.api @resource_class, '', api_params @results = $arvados_api_client.unpack_api_response res self @@ -68,6 +75,10 @@ class ArvadosResourceList @results end + def results=(r) + @results = r + end + def all where({}) end @@ -79,6 +90,12 @@ class ArvadosResourceList self end + def collect + results.collect do |m| + yield m + end + end + def first results.first end @@ -123,4 +140,33 @@ class ArvadosResourceList results.offset if results.respond_to? :offset end + def result_links + results.links if results.respond_to? :links + end + + def links_for item_or_uuid, link_class=nil + unless @links_for_uuid + @links_for_uuid = {} + results.links.each do |link| + if link.respond_to? :head_uuid + @links_for_uuid[link.head_uuid] ||= [] + @links_for_uuid[link.head_uuid] << link + end + end + end + if item_or_uuid.respond_to? :uuid + uuid = item_or_uuid.uuid + else + uuid = item_or_uuid + end + (@links_for_uuid[uuid] || []).select do |link| + link.link_class == link_class + end + end + + # Note: this arbitrarily chooses one of (possibly) multiple names. + def names_for item_or_uuid + links_for(item_or_uuid, 'name').first.andand.name + end + end