X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/b15cc4afed604255dfee435aa8c1663c46895860..118908c39c6ffa0ae8b62cddbdb610c51a461b6d:/services/api/app/models/arvados_model.rb diff --git a/services/api/app/models/arvados_model.rb b/services/api/app/models/arvados_model.rb index efef7b8120..816dbf4758 100644 --- a/services/api/app/models/arvados_model.rb +++ b/services/api/app/models/arvados_model.rb @@ -409,8 +409,20 @@ class ArvadosModel < ApplicationRecord end end + def user_owner_uuid + if self.owner_uuid.nil? + return current_user.uuid + end + owner_class = ArvadosModel.resource_class_for_uuid(self.owner_uuid) + if owner_class == User + self.owner_uuid + else + owner_class.find_by_uuid(self.owner_uuid).user_owner_uuid + end + end + def logged_attributes - attributes.except(*Rails.configuration.AuditLogs.UnloggedAttributes) + attributes.except(*Rails.configuration.AuditLogs.UnloggedAttributes.keys) end def self.full_text_searchable_columns @@ -419,6 +431,18 @@ class ArvadosModel < ApplicationRecord end.map(&:name) end + def self.full_text_coalesce + full_text_searchable_columns.collect do |column| + is_jsonb = self.columns.select{|x|x.name == column}[0].type == :jsonb + cast = (is_jsonb || serialized_attributes[column]) ? '::text' : '' + "coalesce(#{column}#{cast},'')" + end + end + + def self.full_text_trgm + "(#{full_text_coalesce.join(" || ' ' || ")})" + end + def self.full_text_tsvector parts = full_text_searchable_columns.collect do |column| is_jsonb = self.columns.select{|x|x.name == column}[0].type == :jsonb @@ -433,6 +457,9 @@ class ArvadosModel < ApplicationRecord if not ft[:cond_out].any? return query end + ft[:joins].each do |t| + query = query.joins(t) + end query.where('(' + ft[:cond_out].join(') AND (') + ')', *ft[:param_out]) end @@ -711,6 +738,14 @@ class ArvadosModel < ApplicationRecord end end + def ensure_filesystem_compatible_name + if name == "." || name == ".." + errors.add(:name, "cannot be '.' or '..'") + elsif Rails.configuration.Collections.ForwardSlashNameSubstitution == "" && !name.nil? && name.index('/') + errors.add(:name, "cannot contain a '/' character") + end + end + class Email def self.kind "email"