From 76e2c84c766fd37d702c45e76dc666230afcd136 Mon Sep 17 00:00:00 2001 From: Christoph Helma Date: Mon, 13 Feb 2012 16:30:05 +0000 Subject: task.rb modified (untested) --- lib/task.rb | 68 +++++++++++++++++++++++++------------------------------------ 1 file changed, 28 insertions(+), 40 deletions(-) (limited to 'lib/task.rb') diff --git a/lib/task.rb b/lib/task.rb index 0adb7a0..cd5aa79 100644 --- a/lib/task.rb +++ b/lib/task.rb @@ -1,62 +1,31 @@ +require File.join(File.dirname(__FILE__),'spork') DEFAULT_TASK_MAX_DURATION = 36000 module OpenTox # Class for handling asynchronous tasks class Task - - def self.create service_uri - Task.new RestClient.post(service_uri,{}).chomp - #eval("#{self}.new(\"#{uri}\", #{subjectid})") - end - - def http_code - get(@uri).code - end - - def status - metadata[RDF::OT.hasStatus].to_s - end - - def result_uri - metadata[RDF::OT.resultURI] + def self.create service_uri, params + task = Task.new RestClient.post(service_uri,params).chomp + pid = Spork.spork { yield } + task.pid = pid + task end def description metadata[RDF::DC.description] end - def errorReport - metadata[RDF::OT.errorReport] - end - def cancel - RestClient.put(File.join(@uri,'Cancelled'),{:cannot_be => "empty"}) + RestClient.put(File.join(@uri,'Cancelled'),{}) end def completed(uri) RestClient.put(File.join(@uri,'Completed'),{:resultURI => uri}) end - def error(error_report) - raise "no error report" unless error_report.is_a?(OpenTox::ErrorReport) - RestClient.put(File.join(@uri,'Error'),{:errorReport => error_report.to_yaml}) - end - - def pid=(pid) - RestClient.put(File.join(@uri,'pid'), {:pid => pid}) - end - - def running? - metadata[RDF::OT.hasStatus] == 'Running' - end - - def completed? - metadata[RDF::OT.hasStatus] == 'Completed' - end - - def error? - metadata[RDF::OT.hasStatus] == 'Error' + def error(error) + RestClient.put(File.join(@uri,'Error'),{:errorReport => OpenTox::Error.new(error)}) end # waits for a task, unless time exceeds or state is no longer running @@ -69,4 +38,23 @@ module OpenTox end end + def method_missing(method,*args) + method = method.to_s + begin + case method + when /=/ + res = RestClient.put(File.join(@uri,method.sub(/=/,'')),{}) + super unless res.code == 200 + when /?/ + return metadata[RDF::OT.hasStatus] == method.sub(/\?/,'').capitalize + else + return metadata[RDF::OT[method]] + end + rescue + super + end + end + + #TODO: subtasks + end -- cgit v1.2.3