summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristoph Helma <helma@in-silico.de>2009-10-06 09:52:59 +0200
committerChristoph Helma <helma@in-silico.de>2009-10-06 09:52:59 +0200
commitf801199e5d17c95f6ae3da7917ff5ddcdf63b86c (patch)
tree2e02ec02292a4c8b697399cd9a83949781279555
parent76948b1a6ac9f48edb783c8cb1126dbeed3df4b4 (diff)
Passes tests in opentox-test
-rw-r--r--Rakefile4
-rw-r--r--application.rb56
-rw-r--r--config.ru15
-rw-r--r--test.rb37
4 files changed, 31 insertions, 81 deletions
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