From f801199e5d17c95f6ae3da7917ff5ddcdf63b86c Mon Sep 17 00:00:00 2001 From: Christoph Helma Date: Tue, 6 Oct 2009 09:52:59 +0200 Subject: Passes tests in opentox-test --- Rakefile | 4 +++- application.rb | 56 ++++++++++++++------------------------------------------ config.ru | 15 ++++++++++++++- test.rb | 37 ------------------------------------- 4 files changed, 31 insertions(+), 81 deletions(-) delete mode 100644 test.rb diff --git a/Rakefile b/Rakefile index e8ed9f4..b804237 100644 --- a/Rakefile +++ b/Rakefile @@ -1,5 +1,7 @@ require 'rubygems' require 'rake' +require 'opentox-ruby-api-wrapper' +require 'tasks/opentox' @gems = "sinatra rest-client emk-sinatra-url-for cehoffman-sinatra-respond_to" @@ -36,6 +38,6 @@ end desc "Run tests" task :test do - load 'test.rb' + load 'test/test.rb' end 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 - diff --git a/config.ru b/config.ru index 0ca30c5..63dd2ce 100644 --- a/config.ru +++ b/config.ru @@ -1,10 +1,23 @@ require 'rubygems' require 'sinatra' require 'application.rb' +require 'rack' +require 'rack/contrib' FileUtils.mkdir_p 'log' unless File.exists?('log') -log = File.new("log/sinatra.log", "a") +log = File.new("log/#{ENV["RACK_ENV"]}.log", "a") $stdout.reopen(log) $stderr.reopen(log) + +if ENV['RACK_ENV'] == 'production' + use Rack::MailExceptions do |mail| + mail.to 'helma@in-silico.ch' + mail.subject '[ERROR] %s' + end +elsif ENV['RACK_ENV'] == 'development' + use Rack::Reloader + use Rack::ShowExceptions +end run Sinatra::Application + diff --git a/test.rb b/test.rb deleted file mode 100644 index 9a84276..0000000 --- a/test.rb +++ /dev/null @@ -1,37 +0,0 @@ -require 'application' -require 'test/unit' -require 'rack/test' - - -class CompoundsTest < Test::Unit::TestCase - include Rack::Test::Methods - - def app - Sinatra::Application - end - - def test_uri_generation_from_smiles - post '/', :smiles => 'CC(=O)CC(C)C#N' - assert last_response.body.include?('CC%28CC%28%3DO%29C%29C%23N') - end - - def test_uri_generation_from_name - post '/', :name => 'Benzene' - assert last_response.body.include?('c1ccccc1') - end - - def test_smiles - get '/CC%28CC%28%3DO%29C%29C%23N' - assert last_response.body.include?('CC(CC(=O)C)C#N') - end - - def test_smarts_match_true - get '/CC%28CC%28%3DO%29C%29C%23N/match/CC' - assert last_response.body.include?('true') - end - - def test_smarts_match_false - get '/CC%28CC%28%3DO%29C%29C%23N/match/Cl' - assert last_response.body.include?('false') - end -end -- cgit v1.2.3