API server /collections/uuid/provenance endpoint works.
authorPeter Amstutz <peter.amstutz@curoverse.com>
Tue, 28 Jan 2014 19:06:40 +0000 (14:06 -0500)
committerPeter Amstutz <peter.amstutz@curoverse.com>
Tue, 28 Jan 2014 19:06:40 +0000 (14:06 -0500)
services/api/app/controllers/arvados/v1/collections_controller.rb
services/api/app/models/arvados_model.rb

index 918d499521dcd381842c85e780e0b4d592c31691..48544a2b20b4004ee78b3563c26071bd9d179337 100644 (file)
@@ -92,8 +92,8 @@ class Arvados::V1::CollectionsController < ApplicationController
     if m  
       # uuid is a collection
       uuid = m
-      Collection.where(uuid:"uuid").each do |c|
-        visited[uuid] = c
+      Collection.where(uuid: uuid).each do |c|
+        visited[uuid] = c.as_api_response
       end
 
       Job.where(output: uuid).each do |job|
@@ -105,32 +105,32 @@ class Arvados::V1::CollectionsController < ApplicationController
       end
       
     else
-      visited[uuid] = true
-
       # uuid is something else
-      rsc = ArvadosBase::resource_class_for_uuid uuid
-
+      rsc = ArvadosModel::resource_class_for_uuid uuid
       if rsc == Job
         Job.where(uuid: uuid).each do |job|
-          visited[uuid] = job
+          visited[uuid] = job.as_api_response
           script_param_edges(visited, job, "", job.script_parameters)
         end
+      elsif rsc != nil
+        rsc.where(uuid: uuid).each do |r|
+          visited[uuid] = r.as_api_response
+        end
       end
     end
 
     Link.where(head_uuid: uuid, link_class: "provenance").each do |link|
+      visited[link.uuid] = link.as_api_response
       generate_provenance_edges(visited, link.tail_uuid)
     end
 
     #puts "finished #{uuid}"
-
-    gr
   end
 
-  def provenance(id)
+  def provenance
     visited = {}
-    generate_provenance_edges(visited, id[:uuid])
-    visited
+    generate_provenance_edges(visited, @object[:uuid])
+    render json: visited
   end
 
 
index 2999b5271331ed9d11ef382fb826350d6646e417..69eae92c00c43c8c79a93cd9e37f3a36b580f17f 100644 (file)
@@ -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