X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/0d4ddf36fb71ecf7cc981c67c07584a3a7fcac46..2943d9c3622e2c5bca081dc48fd5d8d148dac386:/apps/workbench/app/models/arvados_base.rb diff --git a/apps/workbench/app/models/arvados_base.rb b/apps/workbench/app/models/arvados_base.rb index fbf7ee5e79..45a4d8b910 100644 --- a/apps/workbench/app/models/arvados_base.rb +++ b/apps/workbench/app/models/arvados_base.rb @@ -32,9 +32,7 @@ class ArvadosBase < ActiveRecord::Base 'modified_by_user_uuid' => '004', 'modified_by_client_uuid' => '005', 'name' => '050', - 'tail_kind' => '100', 'tail_uuid' => '100', - 'head_kind' => '101', 'head_uuid' => '101', 'info' => 'zzz-000', 'updated_at' => 'zzz-999' @@ -45,20 +43,25 @@ class ArvadosBase < ActiveRecord::Base return @columns unless @columns.nil? @columns = [] @attribute_info ||= {} - return @columns if $arvados_api_client.arvados_schema[self.to_s.to_sym].nil? - $arvados_api_client.arvados_schema[self.to_s.to_sym].each do |coldef| - k = coldef[:name].to_sym - if coldef[:type] == coldef[:type].downcase - @columns << column(k, coldef[:type].to_sym) + schema = $arvados_api_client.discovery[:schemas][self.to_s.to_sym] + return @columns if schema.nil? + schema[:properties].each do |k, coldef| + case k + when :etag, :kind + attr_reader k else - @columns << column(k, :text) - serialize k, coldef[:type].constantize + if coldef[:type] == coldef[:type].downcase + # boolean, integer, etc. + @columns << column(k, coldef[:type].to_sym) + else + # Hash, Array + @columns << column(k, :text) + serialize k, coldef[:type].constantize + end + attr_accessible k + @attribute_info[k] = coldef end - attr_accessible k - @attribute_info[k] = coldef end - attr_reader :etag - attr_reader :kind @columns end @@ -92,6 +95,10 @@ class ArvadosBase < ActiveRecord::Base ArvadosResourceList.new(self).order(*args) end + def self.filter(*args) + ArvadosResourceList.new(self).filter(*args) + end + def self.where(*args) ArvadosResourceList.new(self).where(*args) end @@ -128,12 +135,10 @@ class ArvadosBase < ActiveRecord::Base @etag = resp[:etag] @kind = resp[:kind] - # these attrs can be modified by "save" -- we should update our copies - %w(uuid owner_uuid created_at - modified_at modified_by_user_uuid modified_by_client_uuid - ).each do |attr| + # attributes can be modified during "save" -- we should update our copies + resp.keys.each do |attr| if self.respond_to? "#{attr}=".to_sym - self.send(attr + '=', resp[attr.to_sym]) + self.send(attr.to_s + '=', resp[attr.to_sym]) end end @@ -155,14 +160,12 @@ class ArvadosBase < ActiveRecord::Base true end end - + def links(*args) o = {} o.merge!(args.pop) if args[-1].is_a? Hash o[:link_class] ||= args.shift o[:name] ||= args.shift - o[:head_kind] ||= args.shift - o[:tail_kind] = self.kind o[:tail_uuid] = self.uuid if all_links return all_links.select do |m| @@ -241,6 +244,10 @@ class ArvadosBase < ActiveRecord::Base } end + def class_for_display + self.class.to_s + end + def self.creatable? current_user end @@ -296,6 +303,10 @@ class ArvadosBase < ActiveRecord::Base (name if self.respond_to? :name) || uuid end + def content_summary + self.class.to_s + end + def selection_label friendly_link_name end