X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/f0bf04abdbb7e4b47be85585fba5789d695bb31e..a3615da860d1d78d0ecb7e2890eea26963b5c01e:/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 33e107e369..083db9133b 100644 --- a/apps/workbench/app/models/arvados_base.rb +++ b/apps/workbench/app/models/arvados_base.rb @@ -56,7 +56,7 @@ class ArvadosBase < ActiveRecord::Base end def self.columns - return @columns unless @columns.nil? + return @columns if @columns.andand.any? @columns = [] @attribute_info ||= {} schema = arvados_api_client.discovery[:schemas][self.to_s.to_sym] @@ -111,6 +111,10 @@ class ArvadosBase < ActiveRecord::Base new.private_reload(hash) end + def self.find?(*args) + find(*args) rescue nil + end + def self.order(*args) ArvadosResourceList.new(self).order(*args) end @@ -127,6 +131,10 @@ class ArvadosBase < ActiveRecord::Base ArvadosResourceList.new(self).limit(*args) end + def self.select(*args) + ArvadosResourceList.new(self).select(*args) + end + def self.eager(*args) ArvadosResourceList.new(self).eager(*args) end @@ -159,7 +167,9 @@ class ArvadosBase < ActiveRecord::Base def save obdata = {} self.class.columns.each do |col| - obdata[col.name.to_sym] = self.send(col.name.to_sym) + unless self.send(col.name.to_sym).nil? and !self.changed.include?(col.name) + obdata[col.name.to_sym] = self.send(col.name.to_sym) + end end obdata.delete :id postdata = { self.class.to_s.underscore => obdata } @@ -274,8 +284,9 @@ class ArvadosBase < ActiveRecord::Base uuid end - def dup - super.forget_uuid! + def initialize_copy orig + super + forget_uuid! end def attributes_for_display @@ -287,14 +298,23 @@ class ArvadosBase < ActiveRecord::Base end def class_for_display - self.class.to_s + self.class.to_s.underscore.humanize + end + + def self.class_for_display + self.to_s.underscore.humanize + end + + # Array of strings that are names of attributes that should be rendered as textile. + def textile_attributes + [] end def self.creatable? current_user end - def self.goes_in_folders? + def self.goes_in_projects? false end @@ -307,7 +327,7 @@ class ArvadosBase < ActiveRecord::Base end def attribute_editable?(attr, ever=nil) - if "created_at modified_at modified_by_user_uuid modified_by_client_uuid updated_at".index(attr.to_s) + if %w(created_at modified_at modified_by_user_uuid modified_by_client_uuid updated_at).include? attr.to_s false elsif not (current_user.andand.is_active) false @@ -349,8 +369,12 @@ class ArvadosBase < ActiveRecord::Base resource_class end + def resource_param_name + self.class.to_s.underscore + end + def friendly_link_name - (name if self.respond_to? :name) || uuid + (name if self.respond_to? :name) || default_name end def content_summary @@ -361,6 +385,27 @@ class ArvadosBase < ActiveRecord::Base friendly_link_name end + def self.default_name + self.to_s.underscore.humanize + end + + def controller + (self.class.to_s.pluralize + 'Controller').constantize + end + + def controller_name + self.class.to_s.tableize + end + + # Placeholder for name when name is missing or empty + def default_name + if self.respond_to? :name + "New #{class_for_display.downcase}" + else + uuid + end + end + def owner ArvadosBase.find(owner_uuid) rescue nil end