summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorChristoph Helma <helma@in-silico.ch>2012-03-07 13:28:51 +0000
committerChristoph Helma <helma@in-silico.ch>2012-03-07 13:28:51 +0000
commit8fc11578aadcf1e7d152764c926e12e553bd8d65 (patch)
treeaa5268ad3643e559747a3a48052ee8d4f1ce051d /lib
parent2e3db6f6532ded28dfada22d4445038b79271814 (diff)
fixed stdout, stderr in overwritten backtick operator, error report in turtle
Diffstat (limited to 'lib')
-rw-r--r--lib/error.rb34
1 files changed, 24 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