From 8fc11578aadcf1e7d152764c926e12e553bd8d65 Mon Sep 17 00:00:00 2001 From: Christoph Helma Date: Wed, 7 Mar 2012 13:28:51 +0000 Subject: fixed stdout, stderr in overwritten backtick operator, error report in turtle --- lib/error.rb | 34 ++++++++++++++++++++++++---------- opentox-client.gemspec | 1 + 2 files changed, 25 insertions(+), 10 deletions(-) diff --git a/lib/error.rb b/lib/error.rb index 90b55e3..b65651f 100644 --- a/lib/error.rb +++ b/lib/error.rb @@ -1,12 +1,13 @@ -# adding additional fields to Exception class to format errors according to OT-API +require 'open4' +# adding additional fields to Exception class to format errors according to OT-API class RuntimeError attr_accessor :report, :http_code def initialize message super message @http_code ||= 500 @report = OpenTox::ErrorReport.create self - $logger.error "\n"+@report.to_ntriples + $logger.error "\n"+@report.to_turtle end end @@ -99,7 +100,6 @@ module OpenTox subject = RDF::Query.execute(@rdf) do pattern [:subject, RDF.type, RDF::OT.ErrorReport] end.limit(1).select(:subject) - }) @rdf << [subject, RDF::OT.actor, uri] end @@ -126,13 +126,27 @@ module OpenTox end # overwrite backtick operator to catch system errors -class Object - def `(code) - msg = super("#{code} 2>&1").chomp - internal_server_error msg unless $?.to_i == 0 - msg - rescue Errno::ENOENT => e - internal_server_error e +module Kernel + + # Override raises an error if _cmd_ returns a non-zero exit status. + # Returns stdout if _cmd_ succeeds. Note that these are simply concatenated; STDERR is not inline. + def ` cmd + stdout, stderr = '' + status = Open4::popen4(cmd) do |pid, stdin_stream, stdout_stream, stderr_stream| + stdout = stdout_stream.read + stderr = stderr_stream.read + end + raise stderr.strip if !status.success? + return stdout + rescue Exception + internal_server_error "'#{cmd}' failed with: '#{$!.message}'" + end + + alias_method :system!, :system + + def system cmd + `#{cmd}` + return true end end diff --git a/opentox-client.gemspec b/opentox-client.gemspec index 7ba3ab0..82a5bef 100644 --- a/opentox-client.gemspec +++ b/opentox-client.gemspec @@ -24,4 +24,5 @@ Gem::Specification.new do |s| s.add_runtime_dependency "rest-client" s.add_runtime_dependency "rdf" s.add_runtime_dependency "rdf-raptor" + s.add_runtime_dependency "open4" end -- cgit v1.2.3