diff options
author | Christoph Helma <helma@in-silico.ch> | 2012-05-02 20:06:16 +0000 |
---|---|---|
committer | Christoph Helma <helma@in-silico.ch> | 2012-05-02 20:06:16 +0000 |
commit | 1d49fe0da8e7d4dfc57fdbfffdc4e32db2ef0647 (patch) | |
tree | b8418124dd391965018704986edb39858055d8e7 /lib/error.rb | |
parent | f8b6f8d19566d372e47edba7968ce66ff09052c9 (diff) |
initial task service
Diffstat (limited to 'lib/error.rb')
-rw-r--r-- | lib/error.rb | 38 |
1 files changed, 32 insertions, 6 deletions
diff --git a/lib/error.rb b/lib/error.rb index 579f42b..58b9816 100644 --- a/lib/error.rb +++ b/lib/error.rb @@ -7,12 +7,38 @@ class RuntimeError super message @uri = uri @http_code ||= 500 - $logger.error "\n"+self.report.to_turtle + $logger.error "\n"+self.to_turtle end - def report - # TODO: remove kludge for old task services - OpenTox::ErrorReport.new(@http_code, self) + # define to_ and self.from_ methods for various rdf formats + RDF_FORMATS.each do |format| + + send :define_method, "to_#{format}".to_sym do + rdf = RDF::Writer.for(format).buffer do |writer| + # TODO: not used for turtle + # http://rdf.rubyforge.org/RDF/Writer.html# + writer.prefix :ot, RDF::URI('http://www.opentox.org/api/1.2#') + writer.prefix :ot1_1, RDF::URI('http://www.opentox.org/api/1.1#') + subject = RDF::Node.new + writer << [subject, RDF.type, RDF::OT.ErrorReport] + writer << [subject, RDF::OT.actor, @uri.to_s] + writer << [subject, RDF::OT.message, @message.to_s] + writer << [subject, RDF::OT.statusCode, @http_code] + writer << [subject, RDF::OT.errorCode, self.class.to_s] + + # cut backtrace + backtrace = caller.collect{|line| line unless line =~ /#{File.dirname(__FILE__)}/}.compact + cut_index = backtrace.find_index{|line| line.match /sinatra|minitest/} + cut_index ||= backtrace.size + cut_index -= 1 + cut_index = backtrace.size-1 if cut_index < 0 + details = backtrace[0..cut_index].join("\n") + details += "REST paramenters:\n#{@request.args.inspect}" if @request + writer << [subject, RDF::OT.errorCause, details] + end + rdf + end + end end @@ -61,6 +87,7 @@ module OpenTox end end +=begin # TODO: create reports directly from errors, requires modified task service class ErrorReport def initialize http_code, error @@ -103,7 +130,6 @@ module OpenTox rdf end -=begin define_singleton_method "from_#{format}".to_sym do |rdf| report = ErrorReport.new RDF::Reader.for(format).new(rdf) do |reader| @@ -111,7 +137,7 @@ module OpenTox end report end -=end end end +=end end |