add Pipeline#dependencies
authorTom Clegg <tom@clinicalfuture.com>
Fri, 25 Jan 2013 21:27:57 +0000 (13:27 -0800)
committerTom Clegg <tom@clinicalfuture.com>
Fri, 25 Jan 2013 21:30:10 +0000 (13:30 -0800)
app/models/pipeline_invocation.rb

index 626f5eb5cd66f7a08ad7f8d4a590fa0020947e5f..f475ff770d1f4a4424560a6014cd771881a8dbaa 100644 (file)
@@ -14,6 +14,11 @@ class PipelineInvocation < OrvosModel
     t.add :components
     t.add :success
     t.add :active
+    t.add :dependencies
+  end
+
+  def dependencies
+    dependency_search(self.components).keys
   end
 
   def progress_table
@@ -57,4 +62,28 @@ class PipelineInvocation < OrvosModel
       self.success = true
     end
   end
+
+  def dependency_search(haystack)
+    if haystack.is_a? String
+      if (re = haystack.match /^([0-9a-f]{32}(\+[^,]+)*)+/)
+        {re[1] => true}
+      else
+        {}
+      end
+    elsif haystack.is_a? Array
+      deps = {}
+      haystack.each do |value|
+        deps.merge! dependency_search(value)
+      end
+      deps
+    elsif haystack.respond_to? :keys
+      deps = {}
+      haystack.each do |key, value|
+        deps.merge! dependency_search(value)
+      end
+      deps
+    else
+      {}
+    end
+  end
 end