diff options
author | Christoph Helma <helma@in-silico.de> | 2009-09-02 17:42:54 +0200 |
---|---|---|
committer | Christoph Helma <helma@in-silico.de> | 2009-09-02 17:42:54 +0200 |
commit | 7eb5449788d55bd268d3dab6025a2cabc26c248a (patch) | |
tree | 394b9fb72a097ec685f99af4abd4628d4140a932 /application.rb | |
parent | 34124d5b002f15980bf1c36ddfa837e8d123991f (diff) |
dataset class separated from application
Diffstat (limited to 'application.rb')
-rw-r--r-- | application.rb | 161 |
1 files changed, 48 insertions, 113 deletions
diff --git a/application.rb b/application.rb index f26d664..a23b52a 100644 --- a/application.rb +++ b/application.rb @@ -14,106 +14,12 @@ when 'test' end set :default_content, :yaml - -class Dataset - - include OpenTox::Utils - attr_reader :uri, :name - - def initialize(uri) - @name = File.basename(uri) - @uri = uri - end - - def self.create(uri) - dataset = Dataset.new(uri) - dataset.save - dataset - end - - def self.find(uri) - if @@redis.set_member? "datasets", uri - Dataset.new(uri) - else - nil - end - end - - def self.exists?(uri) - @@redis.set_member? "datasets", uri - end - - def self.find_all_uris - @@redis.set_members("datasets") - end - - def save - @@redis.set_add "datasets", uri - end - - def destroy - @@redis.set_members(@uri + '::compounds').each do |compound_uri| - @@redis.delete @uri + '::' + compound_uri - end - @@redis.delete @uri + '::compounds' - @@redis.set_members(@uri + '::features').each do |feature_uri| - @@redis.delete @uri + '::' + feature_uri - end - @@redis.delete @uri + '::features' - @@redis.set_delete "datasets", @uri - end - - def add(compound_uri,feature_uri) - @@redis.set_add @uri + '::compounds', compound_uri - @@redis.set_add @uri + '::features', feature_uri - @@redis.set_add @uri + '::' + compound_uri + '::features', feature_uri - @@redis.set_add @uri + '::' + feature_uri + '::compounds', compound_uri - end - - def compound_uris - @@redis.set_members(@uri + "::compounds") - end - - def feature_uris - @@redis.set_members(@uri + "::features") - end - - def feature_uris_for_compound(compound_uri) - @@redis.set_members(@uri + '::' + compound_uri + '::features') - end - - def compound_uris_for_feature(feature_uri) - @@redis.set_members(@uri + '::' + feature_uri + '::compounds') - end - - def tanimoto(compound_uris) - raise "Exactly 2 compounds are needed for similarity calculations" unless compound_uris.size == 2 - compound_keys = compound_uris.collect{ |c| @uri + '::' + c + "::features" } - union_size = @@redis.set_union(compound_keys[0], compound_keys[1]).size - intersect_size = @@redis.set_intersect(compound_keys[0], compound_keys[1]).size - intersect_size.to_f/union_size.to_f - end - - def weighted_tanimoto(compound_uris) - raise "Exactly 2 compounds are needed for similarity calculations" unless compound_uris.size == 2 - compound_keys = compound_uris.collect{ |c| @uri + '::' + c + "::features" } - union = @@redis.set_union(compound_keys[0], compound_keys[1]) - intersect = @@redis.set_intersect(compound_keys[0], compound_keys[1]) - - p_sum_union = 0.0 - p_sum_intersect = 0.0 - - union.each{ |f| p_sum_union += gauss(OpenTox::Feature.new(:uri => f).value('p_value').to_f) } - intersect.each{ |f| p_sum_intersect += gauss(OpenTox::Feature.new(:uri => f).value('p_value').to_f) } - "#{p_sum_intersect/p_sum_union}" - end - -end +load File.join(File.dirname(__FILE__), 'dataset.rb') helpers do def not_found? - halt 404, "Dataset \"#{params[:name]}\" not found." unless Dataset.exists? uri(params[:name]) + halt 404, "Dataset \"#{params[:name]}\" not found." unless @dataset = Dataset.find(uri(params[:name])) end def uri(name) @@ -122,15 +28,23 @@ helpers do end +=begin +# current sinatra version does not halt in before filter, should be resolved in future versions +before do + if params[:name] and !request.post? + halt 404, "Dataset \"#{params[:name]}\" not found." unless @dataset = Dataset.find(url_for("/", :full) + name.gsub(/\s|\n/,'_')) + end +end +=end + ## REST API get '/?' do - Dataset.find_all_uris.join("\n") + Dataset.find_all.join("\n") end get '/:name' do not_found? - @dataset = Dataset.find(uri params[:name]) respond_to do |format| format.yaml { @dataset.to_yaml } format.xml { builder :dataset } @@ -144,35 +58,35 @@ end get '/:name/compounds' do not_found? - Dataset.find(uri params[:name]).compound_uris.join("\n") + @dataset.compound_uris.join("\n") end get '/:name/features' do not_found? - Dataset.find(uri params[:name]).feature_uris.join("\n") + @dataset.feature_uris.join("\n") end get '/:name/compound/*/features' do not_found? compound_uri = params[:splat].first.gsub(/ /,'+') - Dataset.find(uri params[:name]).feature_uris_for_compound(compound_uri).join("\n") + @dataset.feature_uris_for_compound(compound_uri).join("\n") end get '/:name/feature/*/compounds' do not_found? - Dataset.find(uri params[:name]).compound_uris_for_feature(params[:splat].first).join("\n") + @dataset.compound_uris_for_feature(params[:splat].first).join("\n") end -get '/:name/tanimoto/compound/*/compound/*/?' do - not_found? +get '/tanimoto/:name0/compound/*/:name1/compound/*/?' do compound_uris = params[:splat].collect{ |c| c.gsub(/ /,'+') } - "#{Dataset.find(uri params[:name]).tanimoto(compound_uris)}" + features = [ {:dataset_uri => uri(params[:name0]), :compound_uri => compound_uris[0]}, {:dataset_uri => uri(params[:name1]), :compound_uri => compound_uris[1]} ] + "#{Dataset.tanimoto(features)}" end -get '/:name/weighted_tanimoto/compound/*/compound/*/?' do - not_found? +get '/weighted_tanimoto/:name0/compound/*/:name1/compound/*/?' do compound_uris = params[:splat].collect{ |c| c.gsub(/ /,'+') } - Dataset.find(uri params[:name]).weighted_tanimoto(compound_uris) + features = [ {:dataset_uri => uri(params[:name0]), :compound_uri => compound_uris[0]}, {:dataset_uri => uri(params[:name1]), :compound_uri => compound_uris[1]} ] + Dataset.weighted_tanimoto(features) end post '/?' do @@ -195,15 +109,36 @@ end put '/:name/?' do #protected! not_found? - dataset = Dataset.find(uri params[:name]) - dataset.add(params[:compound_uri],params[:feature_uri]) - dataset.uri + " sucessfully updated." + @dataset.add(params[:compound_uri],params[:feature_uri]) + @dataset.uri + " sucessfully updated." end delete '/:name/?' do - # dangerous, because other datasets might refer to it #protected! not_found? - Dataset.find(uri params[:name]).destroy + @dataset.destroy "Successfully deleted dataset \"#{params[:name]}\"." end + +# Dataset collections +get '/collections/?' do + DatasetCollection.find_all.join("\n") +end + +get '/collection/:name/?' do + @collection = DatasetCollection.find(uri params[:name]) + respond_to do |format| + format.yaml { @collection.to_yaml } + format.xml { builder :collection } + end +end + +post '/collections/?' do + halt 403, "Dataset collection \"#{name}\" exists - please choose another name." if DatasetCollection.exists?(uri params[:name]) + DatasetCollection.create(uri params[:name], :dataset_uris => params[:datasets]).uri +end + +delete '/collection/:name/?' do + DatasetCollection.find(uri params[:name]).destroy + "Successfully deleted dataset collection \"#{params[:name]}\"." +end |