diff options
Diffstat (limited to 'application.rb')
-rw-r--r-- | application.rb | 131 |
1 files changed, 68 insertions, 63 deletions
diff --git a/application.rb b/application.rb index b8b1d04..e0e469d 100644 --- a/application.rb +++ b/application.rb @@ -10,81 +10,86 @@ require 'rjb' gem "opentox-ruby-api-wrapper", "= 1.6.0" require 'opentox-ruby-api-wrapper' -get %r{/smiles/(.+)/smarts/(.*)} do |smiles,smarts| - content_type "image/png" - attachment "#{smiles}.png" - #LOGGER.debug "SMILES: #{smiles}, SMARTS: #{smarts}" - s = Rjb::import('Structure').new(smiles,200) - s.match(smarts) - s.show +post "/display" do + content_type "image/png" + attachment "#{params["smiles"]}.png" + s = Rjb::import('Structure').new(params["smiles"],200) + s.match_activating(params["smarts"]) + s.match_deactivating(["CC"]) + s.show end +get %r{/smiles/(.+)/smarts/(.*)} do |smiles,smarts| + content_type "image/png" + attachment "#{smiles}.png" + s = Rjb::import('Structure').new(smiles,200) + s.match(smarts) + s.show +end get %r{/smiles/(.+)} do |smiles| - content_type "image/png" - attachment "#{smiles}.png" - Rjb::import('Structure').new(smiles,200).show + content_type "image/png" + attachment "#{smiles}.png" + Rjb::import('Structure').new(smiles,200).show end get %r{/(.+)/image} do |inchi| # catches all remaining get requests - - smiles = OpenTox::Compound.new(:inchi => inchi).smiles - content_type "image/png" - attachment "#{smiles}.png" - Rjb::import('Structure').new(smiles,200).show - + smiles = OpenTox::Compound.new(:inchi => inchi).smiles + content_type "image/png" + attachment "#{smiles}.png" + Rjb::import('Structure').new(smiles,200).show end get %r{/(.+)} do |inchi| # catches all remaining get requests - inchi = URI.unescape request.env['REQUEST_URI'].sub(/^\//,'').sub(/.*compound\//,'') # hack to avoid sinatra's URI/CGI unescaping, splitting, ..." - case request.env['HTTP_ACCEPT'] - when "*/*" - response['Content-Type'] = "chemical/x-daylight-smiles" - OpenTox::Compound.new(:inchi => inchi).smiles - when "chemical/x-daylight-smiles" - response['Content-Type'] = "chemical/x-daylight-smiles" - OpenTox::Compound.new(:inchi => inchi).smiles - when "chemical/x-inchi" - response['Content-Type'] = "chemical/x-inchi" - inchi - when "chemical/x-mdl-sdfile" - response['Content-Type'] = "chemical/x-mdl-sdfile" - OpenTox::Compound.new(:inchi => inchi).sdf - when "image/gif" - response['Content-Type'] = "image/gif" - OpenTox::Compound.new(:inchi => inchi).gif - when "image/png" - response['Content-Type'] = "image/png" - OpenTox::Compound.new(:inchi => inchi).png - when "text/plain" - response['Content-Type'] = "text/plain" - uri = File.join @@cactus_uri,inchi,"names" - RestClient.get(uri).body - else - halt 400, "Unsupported MIME type '#{request.env['HTTP_ACCEPT']}'" - end + inchi = URI.unescape request.env['REQUEST_URI'].sub(/^\//,'').sub(/.*compound\//,'') # hack to avoid sinatra's URI/CGI unescaping, splitting, ..." + case request.env['HTTP_ACCEPT'] + when "*/*" + response['Content-Type'] = "chemical/x-daylight-smiles" + OpenTox::Compound.new(:inchi => inchi).smiles + when "chemical/x-daylight-smiles" + response['Content-Type'] = "chemical/x-daylight-smiles" + OpenTox::Compound.new(:inchi => inchi).smiles + when "chemical/x-inchi" + response['Content-Type'] = "chemical/x-inchi" + inchi + when "chemical/x-mdl-sdfile" + response['Content-Type'] = "chemical/x-mdl-sdfile" + OpenTox::Compound.new(:inchi => inchi).sdf + when "image/gif" + response['Content-Type'] = "image/gif" + OpenTox::Compound.new(:inchi => inchi).gif + when "image/png" + response['Content-Type'] = "image/png" + OpenTox::Compound.new(:inchi => inchi).png + when "text/plain" + response['Content-Type'] = "text/plain" + uri = File.join @@cactus_uri,inchi,"names" + RestClient.get(uri).body + else + halt 400, "Unsupported MIME type '#{request.env['HTTP_ACCEPT']}'" + end end post '/?' do - input = request.env["rack.input"].read - response['Content-Type'] = 'text/uri-list' - begin - case request.content_type - when /chemical\/x-daylight-smiles/ - OpenTox::Compound.new(:smiles => input).uri + "\n" - when /chemical\/x-inchi/ - OpenTox::Compound.new(:inchi => input).uri + "\n" - when /chemical\/x-mdl-sdfile|chemical\/x-mdl-molfile/ - OpenTox::Compound.new(:sdf => input).uri + "\n" - when /text\/plain/ - OpenTox::Compound.new(:name => input).uri + "\n" - else - status 400 - "Unsupported MIME type '#{request.content_type}'" - end - rescue - status 400 - "Cannot process request '#{input}' for content type '#{request.content_type}'" - end + input = request.env["rack.input"].read + response['Content-Type'] = 'text/uri-list' + begin + case request.content_type + when /chemical\/x-daylight-smiles/ + OpenTox::Compound.new(:smiles => input).uri + "\n" + when /chemical\/x-inchi/ + OpenTox::Compound.new(:inchi => input).uri + "\n" + when /chemical\/x-mdl-sdfile|chemical\/x-mdl-molfile/ + OpenTox::Compound.new(:sdf => input).uri + "\n" + when /text\/plain/ + OpenTox::Compound.new(:name => input).uri + "\n" + else + status 400 + "Unsupported MIME type '#{request.content_type}'" + end + rescue + status 400 + "Cannot process request '#{input}' for content type '#{request.content_type}'" + end end |