From 9ed209b262e0b540af967e24e9b9845600a0669c Mon Sep 17 00:00:00 2001 From: Christoph Helma Date: Wed, 15 Feb 2012 18:06:46 +0100 Subject: tests fixed for new task api --- 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..aee6c62 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]].to_s + end + rescue + super + end + end + + #TODO: subtasks + end -- cgit v1.2.3