From 2d935206eacec241a52713d1fe319cc78189d97d Mon Sep 17 00:00:00 2001 From: Christoph Helma Date: Fri, 21 Aug 2009 09:58:05 +0200 Subject: environment.rb and templates added --- Rakefile | 2 +- lib/environment.rb | 44 ++++++++++++++++++++++++++++++++++++++++ lib/opentox-ruby-api-wrapper.rb | 22 ++++++++------------ lib/tasks/opentox.rb | 29 +++++++++++++++----------- lib/templates/config.yaml | 13 ++++++++++++ opentox-ruby-api-wrapper.gemspec | 4 +++- 6 files changed, 86 insertions(+), 28 deletions(-) create mode 100644 lib/environment.rb create mode 100644 lib/templates/config.yaml diff --git a/Rakefile b/Rakefile index 881e0b8..87da98d 100644 --- a/Rakefile +++ b/Rakefile @@ -11,7 +11,7 @@ begin gem.homepage = "http://github.com/helma/opentox-ruby-api-wrapper" gem.authors = ["Christoph Helma"] gem.add_dependency "rest-client" - gem.files.include %w(lib/tasks/opentox.rb) + gem.files.include %w(lib/tasks/opentox.rb, lib/environment.rb, lib/templates/*) #gem.files = FileList["[A-Z]*", "{bin,generators,lib,test}/**/*", 'lib/jeweler/templates/.gitignore'] # gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings end diff --git a/lib/environment.rb b/lib/environment.rb new file mode 100644 index 0000000..b22e8e5 --- /dev/null +++ b/lib/environment.rb @@ -0,0 +1,44 @@ +require 'yaml' +config_file = File.join(ENV['HOME'], '.opentox/config.yaml') + +if File.exist?(config_file) + config = YAML.load_file(config_file) +else + FileUtils.mkdir_p File.dirname(config_file) + FileUtils.cp(File.join(File.dirname(__FILE__), 'templates/config.yaml'), config_file) + puts "Please edit #{config_file} and restart your application." + exit +end + +puts config + +@environment = "development" unless @environment = ENV['OPENTOX'] +@config = config[@environment] + +port = 5000 +@services = {} +begin + `killall thin` if @environment == "development" +rescue +end +config["services"].each do |service| + dir = File.join(@config["base_dir"], service) + case @environment + when "development|test" + @services[dir] = "http://localhost:#{port}/" + Dir.chdir dir + `thin --debug --rackup config.ru start -p #{port} -e #{@environment} &` + #pid = fork {`urxvt -title #{service} -e thin --debug --rackup config.ru start -p #{port} -e development`} + #Process.detach(pid) + port += 1 + when "production" + @services[dir] = "http://#{@config['base_uri']}/#{service}/v#{major_version}/" + `touch #{File.join(dir,"tmp/restart.txt")}` + else + "Puts environment #{ENV['OPENTOX']} not supported." + end +end + +def major_version + File.open(File.join(File.dirname(__FILE__), '../VERSION')).each_line.first.split(/\./)[0] +end diff --git a/lib/opentox-ruby-api-wrapper.rb b/lib/opentox-ruby-api-wrapper.rb index db46149..4ee6fd3 100644 --- a/lib/opentox-ruby-api-wrapper.rb +++ b/lib/opentox-ruby-api-wrapper.rb @@ -1,13 +1,7 @@ -['rubygems', 'rest_client', 'spork' ].each do |lib| +['rubygems', 'rest_client', 'spork', 'environment'].each do |lib| require lib end -ENV['OPENTOX_COMPOUND'] = 'http://webservices.in-silico.ch/compound/v0/' unless ENV['OPENTOX_COMPOUND'] -ENV['OPENTOX_FEATURE'] = 'http://webservices.in-silico.ch/feature/v0/' unless ENV['OPENTOX_FEATURE'] -ENV['OPENTOX_DATASET'] = 'http://webservices.in-silico.ch/dataset/v0/' unless ENV['OPENTOX_DATASET'] -ENV['OPENTOX_FMINER'] = 'http://webservices.in-silico.ch/fminer/v0/' unless ENV['OPENTOX_FMINER'] -ENV['OPENTOX_LAZAR'] = 'http://webservices.in-silico.ch/lazar/v0/' unless ENV['OPENTOX_LAZAR'] - module OpenTox class OpenTox @@ -42,9 +36,9 @@ module OpenTox if params[:uri] @uri = params[:uri].to_s elsif params[:smiles] - @uri = RestClient.post ENV['OPENTOX_COMPOUND'] ,:smiles => uri_escape(params[:smiles]) + @uri = RestClient.post @services['opentox-compound'] ,:smiles => uri_escape(params[:smiles]) elsif params[:name] - @uri = RestClient.post ENV['OPENTOX_COMPOUND'] ,:name => uri_escape(params[:name]) + @uri = RestClient.post @services['opentox-compound'] ,:name => uri_escape(params[:name]) end end @@ -76,7 +70,7 @@ module OpenTox if params[:uri] @uri = params[:uri].to_s else - @uri = ENV['OPENTOX_FEATURE'] + uri_escape(params[:name]) + @uri = @services['opentox-feature']+ uri_escape(params[:name]) params[:values].each do |k,v| @uri += '/' + k.to_s + '/' + v.to_s end @@ -97,9 +91,9 @@ module OpenTox if params[:uri] @uri = params[:uri].to_s elsif params[:name] and params[:filename] - @uri = `curl -X POST -F file=@#{params[:filename]} -F name="#{params[:name]}" #{ENV['OPENTOX_DATASET']}` + @uri = `curl -X POST -F file=@#{params[:filename]} -F name="#{params[:name]}" #{@services['opentox-dataset']}` elsif params[:name] - @uri = RestClient.post ENV['OPENTOX_DATASET'], :name => params[:name] + @uri = RestClient.post @services['opentox-dataset'], :name => params[:name] end end @@ -139,7 +133,7 @@ module OpenTox # Create a new dataset with BBRC features def initialize(training_dataset) - @dataset_uri = RestClient.post ENV['OPENTOX_FMINER'], :dataset_uri => training_dataset.uri + @dataset_uri = RestClient.post @services['opentox-fminer'], :dataset_uri => training_dataset.uri end def dataset @@ -155,7 +149,7 @@ module OpenTox if params[:uri] @uri = params[:uri] elsif params[:dataset_uri] - @uri = RestClient.post ENV['OPENTOX_LAZAR'] + 'models' , :dataset_uri => params[:dataset_uri] + @uri = RestClient.post @services['opentox-lazar']+ 'models' , :dataset_uri => params[:dataset_uri] end end diff --git a/lib/tasks/opentox.rb b/lib/tasks/opentox.rb index c44ceb6..59fc16c 100644 --- a/lib/tasks/opentox.rb +++ b/lib/tasks/opentox.rb @@ -1,15 +1,20 @@ -desc "Install required gems" -task :install do - puts `sudo gem install #{@gems}` -end +require File.join(File.dirname(__FILE__), '../..', 'test/opentox-ruby-api-wrapper_test.rb') -desc "Update gems" -task :update do - puts `sudo gem update #{@gems}` -end +namespace :opentox do -desc "Run tests" -task :test do - load 'test.rb' -end + desc "Install required gems" + task :install do + puts `sudo gem install #{@gems}` + end + desc "Update gems" + task :update do + puts `sudo gem update #{@gems}` + end + + desc "Run tests" + task :test do + load 'test.rb' + end + +end diff --git a/lib/templates/config.yaml b/lib/templates/config.yaml new file mode 100644 index 0000000..bae9dc6 --- /dev/null +++ b/lib/templates/config.yaml @@ -0,0 +1,13 @@ +development: + base_dir: ~/webservices + +production: + base_uri: webservices.in-silico.ch + base_dir: /var/www/webservices + +services: + - opentox-feature + - opentox-compound + - opentox-dataset + - opentox-fminer + - opentox-lazar diff --git a/opentox-ruby-api-wrapper.gemspec b/opentox-ruby-api-wrapper.gemspec index 5118641..9d30d93 100644 --- a/opentox-ruby-api-wrapper.gemspec +++ b/opentox-ruby-api-wrapper.gemspec @@ -9,7 +9,7 @@ Gem::Specification.new do |s| s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version= s.authors = ["Christoph Helma"] - s.date = %q{2009-08-17} + s.date = %q{2009-08-21} s.description = %q{Ruby wrapper for the OpenTox REST API (http://www.opentox.org)} s.email = %q{helma@in-silico.ch} s.extra_rdoc_files = [ @@ -26,6 +26,8 @@ Gem::Specification.new do |s| "lib/helper.rb", "lib/opentox-ruby-api-wrapper.rb", "lib/spork.rb", + "lib/tasks/opentox.rb", + "lib/templates/config.yaml", "opentox-ruby-api-wrapper.gemspec", "test/hamster_carcinogenicity.csv", "test/opentox-ruby-api-wrapper_test.rb", -- cgit v1.2.3