attr_accessor :attribute_sortkey
def self.uuid_infix_object_kind
- @@uuid_infix_object_kind ||= {
- '4zz18' => 'arvados#collection',
- 'tpzed' => 'arvados#user',
- 'ozdt8' => 'arvados#api_client',
- '8i9sb' => 'arvados#job',
- 'o0j2j' => 'arvados#link',
- '57u5n' => 'arvados#log',
- 'j58dm' => 'arvados#specimen',
- 'p5p6p' => 'arvados#pipeline_template',
- 'mxsvm' => 'arvados#pipeline_template', # legacy Pipeline objects
- 'd1hrv' => 'arvados#pipeline_instance',
- 'uo14g' => 'arvados#pipeline_instance', # legacy PipelineInstance objects
- 'j7d0g' => 'arvados#group',
- 'ldvyl' => 'arvados#group' # only needed for legacy Project objects
- }
+ @@uuid_infix_object_kind ||=
+ begin
+ infix_kind = {}
+ $arvados_api_client.discovery[:schemas].each do |name, schema|
+ if schema[:uuidPrefix]
+ infix_kind[schema[:uuidPrefix]] =
+ 'arvados#' + name.to_s.camelcase(:lower)
+ end
+ end
+
+ # Recognize obsolete types.
+ infix_kind.
+ merge('mxsvm' => 'arvados#pipelineTemplate', # Pipeline
+ 'uo14g' => 'arvados#pipelineInstance', # PipelineInvocation
+ 'ldvyl' => 'arvados#group') # Project
+ end
end
def initialize(*args)
@attribute_sortkey ||= {
'id' => nil,
'uuid' => '000',
- 'owner' => '001',
+ 'owner_uuid' => '001',
'created_at' => '002',
'modified_at' => '003',
- 'modified_by_user' => '004',
- 'modified_by_client' => '005',
+ 'modified_by_user_uuid' => '004',
+ 'modified_by_client_uuid' => '005',
'name' => '050',
'tail_kind' => '100',
'tail_uuid' => '100',
end
new.private_reload(uuid)
end
+ def self.order(*args)
+ ArvadosResourceList.new(self).order(*args)
+ end
def self.where(*args)
ArvadosResourceList.new(self).where(*args)
end
@kind = resp[:kind]
# these attrs can be modified by "save" -- we should update our copies
- %w(uuid owner created_at
- modified_at modified_by_user modified_by_client
+ %w(uuid owner_uuid created_at
+ modified_at modified_by_user_uuid modified_by_client_uuid
).each do |attr|
- self.send(attr + '=', resp[attr.to_sym])
+ if self.respond_to? "#{attr}=".to_sym
+ self.send(attr + '=', resp[attr.to_sym])
+ end
end
self
}
end
+ def self.creatable?
+ current_user
+ end
+
def editable?
- (current_user and
+ (current_user and current_user.is_active and
(current_user.is_admin or
- current_user.uuid == self.owner))
+ current_user.uuid == self.owner_uuid))
end
def attribute_editable?(attr)
- if "created_at modified_at modified_by_user modified_by_client updated_at".index(attr.to_s)
+ if "created_at modified_at modified_by_user_uuid modified_by_client_uuid updated_at".index(attr.to_s)
+ false
+ elsif not (current_user.andand.is_active)
false
- elsif "uuid owner".index(attr.to_s)
- current_user and current_user.is_admin
+ elsif "uuid owner_uuid".index(attr.to_s) or current_user.is_admin
+ current_user.is_admin
else
- current_user and current_user.uuid == owner
+ current_user.uuid == self.owner_uuid or current_user.uuid == self.uuid
end
end
resource_class
end
+ def friendly_link_name
+ if self.class.column_names.include? 'name'
+ self.name
+ end
+ end
+
protected
def forget_uuid!
self
end
- def current_user
+ def self.current_user
+ Thread.current[:user] ||= User.current if Thread.current[:arvados_api_token]
Thread.current[:user]
end
+ def current_user
+ self.class.current_user
+ end
end