diff options
Diffstat (limited to 'application.rb')
-rw-r--r-- | application.rb | 56 |
1 files changed, 14 insertions, 42 deletions
diff --git a/application.rb b/application.rb index 7920b92..eb927e0 100644 --- a/application.rb +++ b/application.rb @@ -1,60 +1,32 @@ -[ 'rubygems', 'sinatra', 'rest_client', 'sinatra/url_for', 'sinatra/respond_to', 'openbabel' ].each do |lib| - require lib -end +require 'rubygems' +require 'opentox-ruby-api-wrapper' +require 'sinatra/respond_to' -mime :uid, "text/plain" mime :smiles, "chemical/x-daylight-smiles" mime :inchi, "chemical/x-inchi" mime :sdf, "chemical/x-mdl-sdfile" mime :image, "image/gif" mime :names, "text/plain" -CACTUS_URI="http://cactus.nci.nih.gov/chemical/structure/" - set :default_content, :smiles -get '/*/match/*' do - smiles = URI.decode(params[:splat][0]) - smarts = URI.decode(params[:splat][1]) - smi2mol = OpenBabel::OBConversion.new - smi2mol.set_in_format('smi') - obmol = OpenBabel::OBMol.new - smi2mol.read_string(obmol,smiles) - obmol.add_hydrogens - smarts_pattern = OpenBabel::OBSmartsPattern.new - smarts_pattern.init(smarts) - if smarts_pattern.match(obmol) - 'true' - else - 'false' - end -end - -get %r{/(.+)} do |cansmi| # catches all remaining get requests +get %r{/(.+)} do |inchi| # catches all remaining get requests + inchi = URI.unescape request.env['REQUEST_URI'].sub(/^\//,'') # hack to avoid sinatra's URI/CGI unescaping, splitting, ... respond_to do |format| - format.uid { URI.escape(cansmi, /[^#{URI::PATTERN::UNRESERVED}]/) } - format.smiles { URI.unescape(cansmi).chomp } - format.names { RestClient.get "#{CACTUS_URI}#{cansmi}/names" } - format.inchi { RestClient.get "#{CACTUS_URI}#{cansmi}/stdinchi" } - format.sdf { RestClient.get "#{CACTUS_URI}#{cansmi}/sdf" } - format.image { "#{CACTUS_URI}#{cansmi}/image" } + format.smiles { OpenTox::Compound.new(:inchi => inchi).smiles } + format.names { RestClient.get "#{CACTUS_URI}#{inchi}/names" } + format.inchi { inchi } + format.sdf { RestClient.get "#{CACTUS_URI}#{inchi}/sdf" } + format.image { "#{CACTUS_URI}#{inchi}/image" } end end post '/?' do if params[:smiles] - cansmi = canonical_smiles(URI.unescape(params[:smiles]),'smi') + OpenTox::Compound.new(:smiles => params[:smiles]).uri + elsif params[:inchi] + OpenTox::Compound.new(:inchi => params[:inchi]).uri elsif params[:name] - cansmi = RestClient.get "#{CACTUS_URI}#{params[:name]}/smiles" + OpenTox::Compound.new(:name => params[:name]).uri end - url_for("/", :full) + URI.escape(cansmi.gsub(/\s+/,''), /[^#{URI::PATTERN::UNRESERVED}]/) -end - -def canonical_smiles(identifier,format) - conversion = OpenBabel::OBConversion.new - conversion.set_in_and_out_formats format, 'can' - mol = OpenBabel::OBMol.new - conversion.read_string mol, identifier - conversion.write_string mol end - |