Use discovery document to build infix->kind map instead of using a
authorTom Clegg <tom@curoverse.com>
Fri, 24 Jan 2014 22:59:51 +0000 (14:59 -0800)
committerTom Clegg <tom@curoverse.com>
Fri, 24 Jan 2014 22:59:51 +0000 (14:59 -0800)
hard-coded list.

apps/workbench/app/models/arvados_api_client.rb
apps/workbench/app/models/arvados_base.rb

index a8bcb4d650c6f1d733c04f3b439fc60daa8f616b..b2d774cac493be43a1f27a2226f657c0b5f6099e 100644 (file)
@@ -138,6 +138,10 @@ class ArvadosApiClient
     @arvados_schema ||= api 'schema', ''
   end
 
+  def discovery
+    @discovery ||= api '../../discovery/v1/apis/arvados/v1/rest', ''
+  end
+
   def kind_class(kind)
     kind.match(/^arvados\#(.+?)(_list|List)?$/)[1].pluralize.classify.constantize rescue nil
   end
index 02e7bce8368ceab071edd6d011f45afbddb14ace..5c7e44f136b3417a8a4f9fa4db1a0d5bf1142b35 100644 (file)
@@ -3,21 +3,22 @@ class ArvadosBase < ActiveRecord::Base
   attr_accessor :attribute_sortkey
 
   def self.uuid_infix_object_kind
-    @@uuid_infix_object_kind ||= {
-      '4zz18' => 'arvados#collection',
-      'tpzed' => 'arvados#user',
-      'ozdt8' => 'arvados#apiClient',
-      '8i9sb' => 'arvados#job',
-      'o0j2j' => 'arvados#link',
-      '57u5n' => 'arvados#log',
-      'j58dm' => 'arvados#specimen',
-      'p5p6p' => 'arvados#pipelineTemplate',
-      'mxsvm' => 'arvados#pipelineTemplate', # legacy Pipeline objects
-      'd1hrv' => 'arvados#pipelineInstance',
-      'uo14g' => 'arvados#pipelineInstance', # 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)