X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/84f0a30a119355cd7deff1630a82d3d4c9a6d5ee..4d0a43a4c6e7567f1ff6b5014ccabca5cf111b83:/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 2999b52713..69eae92c00 100644 --- a/services/api/app/models/arvados_model.rb +++ b/services/api/app/models/arvados_model.rb @@ -1,3 +1,4 @@ +require 'assign_uuid' class ArvadosModel < ActiveRecord::Base self.abstract_class = true @@ -140,4 +141,30 @@ class ArvadosModel < ActiveRecord::Base end end end + + def self.resource_class_for_uuid(uuid) + if uuid.is_a? ArvadosModel + return uuid.class + end + unless uuid.is_a? String + return nil + end + if uuid.match /^[0-9a-f]{32}(\+[^,]+)*(,[0-9a-f]{32}(\+[^,]+)*)*$/ + return Collection + end + resource_class = nil + + Rails.application.eager_load! + uuid.match /^[0-9a-z]{5}-([0-9a-z]{5})-[0-9a-z]{15}$/ do |re| + ActiveRecord::Base.descendants.reject(&:abstract_class?).each do |k| + if k.respond_to?(:uuid_prefix) + if k.uuid_prefix == re[1] + return k + end + end + end + end + nil + end + end