summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristoph Helma <helma@in-silico.ch>2012-01-11 21:00:20 +0100
committerChristoph Helma <helma@in-silico.ch>2012-01-11 21:00:20 +0100
commite84a1b439e63ae3ed3b4bc3bc78261f95daf9ab7 (patch)
treef8b7e156e91802d74ce0c78c1cdf0813b71df00b
parent442aa6f6647756d10d57cd7869cb3d27c87b24a8 (diff)
basic rest post get delete test working
-rw-r--r--Rakefile34
-rw-r--r--lib/opentox.rb59
-rw-r--r--lib/overwrite.rb1
-rw-r--r--lib/parser.rb29
-rw-r--r--lib/rest_client_wrapper.rb1
-rw-r--r--test/rest.rb23
6 files changed, 88 insertions, 59 deletions
diff --git a/Rakefile b/Rakefile
index 7e0bcf9..b670f39 100644
--- a/Rakefile
+++ b/Rakefile
@@ -11,37 +11,7 @@ begin
gem.homepage = "http://github.com/opentox/opentox-ruby-minimal"
gem.authors = ["Christoph Helma, Martin Guetlein, Andreas Maunz, Micha Rautenberg, David Vorgrimmler"]
# dependencies with versions
-# gem.add_dependency "sinatra", "=1.2.6"
-# gem.add_dependency "emk-sinatra-url-for", "=0.2.1"
-# gem.add_dependency "sinatra-respond_to", "=0.7.0"
-# gem.add_dependency "sinatra-static-assets", "=0.5.0"
- gem.add_dependency "rest-client", "=1.6.1"
-# gem.add_dependency "rack", "=1.3.0"
-# gem.add_dependency "rack-contrib", "=1.1.0"
-# gem.add_dependency "rack-flash", "=0.1.1"
- gem.add_dependency "nokogiri", "=1.4.4"
-# gem.add_dependency "rubyzip", "=0.9.4"
- gem.add_dependency "roo", "=1.9.3"
- gem.add_dependency "spreadsheet", "=0.6.5.4"
- gem.add_dependency "google-spreadsheet-ruby", "=0.1.5"
- gem.add_dependency "yajl-ruby", "=0.8.2"
- #gem.add_dependency "mail", "=2.3.0"
-# gem.add_dependency "rinruby", "=2.0.2"
-# gem.add_dependency "ohm", "=0.1.3"
-# gem.add_dependency "ohm-contrib", "=0.1.1"
-# gem.add_dependency "SystemTimer", "=1.2.3"
-# gem.add_dependency "rjb", "=1.3.4"
-# gem.add_dependency "haml", "=3.1.1"
- #valiation-gems
-# gem.add_dependency "dm-core", "=1.1.0"
-# gem.add_dependency "dm-serializer", "=1.1.0"
-# gem.add_dependency "dm-timestamps", "=1.1.0"
-# gem.add_dependency "dm-types", "=1.1.0"
-# gem.add_dependency "dm-migrations", "=1.1.0"
-# gem.add_dependency "dm-validations", "=1.1.0"
-# gem.add_dependency "dm-sqlite-adapter", "=1.1.0"
-# gem.add_dependency "ruby-plot", "=0.5.0"
-
+ gem.add_dependency "rest-client"
gem.add_development_dependency 'jeweler'
gem.files = FileList["[A-Z]*", "{bin,generators,lib,test}/**/*", 'lib/jeweler/templates/.gitignore']
end
@@ -74,7 +44,7 @@ task :test => :check_dependencies
task :default => :test
-require 'rake/rdoctask'
+require 'rdoc/task'
Rake::RDocTask.new do |rdoc|
if File.exist?('VERSION')
version = File.read('VERSION')
diff --git a/lib/opentox.rb b/lib/opentox.rb
index dbe2360..b0ffcb1 100644
--- a/lib/opentox.rb
+++ b/lib/opentox.rb
@@ -1,13 +1,18 @@
-require "./parser.rb"
-require "./rest_client_wrapper.rb"
-require "./error.rb"
-
+require 'rdf'
+require 'rdf/raptor'
+#require "parser.rb"
+require "rest_client_wrapper.rb"
+require "overwrite.rb"
+require "error.rb"
+
+RDF::OT = RDF::Vocabulary.new 'http://www.opentox.org/api/1.1#'
+RDF::OTA = RDF::Vocabulary.new 'http://www.opentox.org/algorithmTypes.owl#'
SERVICES = ["Compound", "Feature", "Dataset", "Algorithm", "Model", "Validation", "Task"]
module OpenTox
- attr_accessor :subjectid, :uri
- attr_writer :metadata
+ attr_accessor :subjectid, :uri #, :service_uri
+ #attr_writer :metadata
# Initialize OpenTox object with optional subjectid
# @param [optional, String] subjectid
@@ -17,7 +22,13 @@ module OpenTox
end
def metadata
- @metadata ||= Parser::Owl::Generic.from_rdf get(:accept => "application/rdf+xml")
+ metadata = {}
+ RDF::Reader.open(@uri) do |reader|
+ reader.each_statement do |statement|
+ metadata[statement.predicate] = statement.object if statement.subject == @uri
+ end
+ end
+ metadata
end
# REST API
@@ -31,7 +42,7 @@ module OpenTox
# @return [OpenTox::WrapperResult] a String containing the result-body of the REST call
def get headers={}, wait=true
headers[:subjectid] = @subjectid
- RestClientWrapper.get(@uri, headers, nil, wait).chomp
+ RestClientWrapper.get(@uri.to_s, headers, nil, wait).chomp
end
# performs a POST REST call
@@ -41,9 +52,9 @@ module OpenTox
# @param [optional,Hash] headers contains params like accept-header
# @param [wait,Boolean] wait set to false to NOT wait for task if result is task
# @return [OpenTox::WrapperResult] a String containing the result-body of the REST call
- def post payload=nil, headers={}, wait=true
+ def post payload={}, headers={}, wait=true
headers[:subjectid] = @subjectid
- RestClientWrapper.post(@uri, payload, headers, nil, wait).chomp
+ RestClientWrapper.post(@uri.to_s, payload, headers, nil, wait).chomp
end
# performs a PUT REST call
@@ -51,40 +62,33 @@ module OpenTox
# @param [optional,String] payload data put to the service
# @param [optional,Hash] headers contains params like accept-header
# @return [OpenTox::WrapperResult] a String containing the result-body of the REST call
- def put payload=nil, headers={}
+ def put payload={}, headers={}
headers[:subjectid] = @subjectid
- RestClientWrapper.put(@uri, payload, headers).chomp
+ RestClientWrapper.put(@uri.to_s, payload, headers).chomp
end
# performs a DELETE REST call
# raises OpenTox::Error if call fails (rescued in overwrite.rb -> halt 502)
# @return [OpenTox::WrapperResult] a String containing the result-body of the REST call
def delete
- RestClientWrapper.delete(@uri,:subjectid => @subjectid)
+ RestClientWrapper.delete(@uri.to_s,:subjectid => @subjectid)
end
- # Tools
+ # create default classes
+ SERVICES.each { |s| eval "class #{s}; include OpenTox; end" }
- # Get OWL-DL representation in RDF/XML format
- # @return [application/rdf+xml] RDF/XML representation
- def to_rdfxml
- s = Serializer::Owl.new
- s.add_metadata(@uri,@metadata)
- s.to_rdfxml
- end
+=begin
+ # Tools
def uri_available?
url = URI.parse(@uri)
- #TODO: move subjectid to header
- subjectidstr = @subjectid ? "?subjectid=#{CGI.escape @subjectid}" : ""
- Net::HTTP.start(url.host, url.port) do |http|
+ req = Net::HTTP.new(url.host,url.port)
+ req['subjectid'] = @subjectid if @subjectid
+ req.start(url.host, url.port) do |http|
return http.head("#{url.request_uri}#{subjectidstr}").code == "200"
end
end
- # create default classes
- SERVICES.each { |s| eval "class #{s}; include OpenTox; end" }
-
module Collection
include OpenTox
@@ -115,6 +119,7 @@ module OpenTox
SERVICES.each { |s| eval "class #{s}; include Collection; end" }
end
+=end
end
diff --git a/lib/overwrite.rb b/lib/overwrite.rb
index efc570d..d541b61 100644
--- a/lib/overwrite.rb
+++ b/lib/overwrite.rb
@@ -1,3 +1,4 @@
+require 'uri'
=begin
# class overwrites aka monkey patches
# hack: store sinatra instance in global var $url_provider to make url_for and halt methods accessible
diff --git a/lib/parser.rb b/lib/parser.rb
index 580f6f7..7475d6d 100644
--- a/lib/parser.rb
+++ b/lib/parser.rb
@@ -1,6 +1,35 @@
#require 'spreadsheet'
#require 'roo'
+# OWL Namespaces
+class OwlNamespace
+
+ attr_accessor :uri
+ def initialize(uri)
+ @uri = uri
+ end
+
+ def [](property)
+ @uri+property.to_s
+ end
+
+ def type # for RDF.type
+ "#{@uri}type"
+ end
+
+ def method_missing(property)
+ @uri+property.to_s
+ end
+
+end
+
+RDF = OwlNamespace.new 'http://www.w3.org/1999/02/22-rdf-syntax-ns#'
+OWL = OwlNamespace.new 'http://www.w3.org/2002/07/owl#'
+DC = OwlNamespace.new 'http://purl.org/dc/elements/1.1/'
+OT = OwlNamespace.new 'http://www.opentox.org/api/1.1#'
+OTA = OwlNamespace.new 'http://www.opentox.org/algorithmTypes.owl#'
+XSD = OwlNamespace.new 'http://www.w3.org/2001/XMLSchema#'
+
class String
# Split RDF statement into triples
diff --git a/lib/rest_client_wrapper.rb b/lib/rest_client_wrapper.rb
index 3dd3eff..30f04cc 100644
--- a/lib/rest_client_wrapper.rb
+++ b/lib/rest_client_wrapper.rb
@@ -1,3 +1,4 @@
+require 'rest-client'
module OpenTox
class WrapperResult < String
diff --git a/test/rest.rb b/test/rest.rb
new file mode 100644
index 0000000..576e712
--- /dev/null
+++ b/test/rest.rb
@@ -0,0 +1,23 @@
+$LOAD_PATH << File.expand_path( File.dirname(__FILE__) + '/../lib' )
+require 'rubygems'
+require 'opentox.rb'
+require 'test/unit'
+
+class RestTest < Test::Unit::TestCase
+
+ def test_post_get_delete
+ uristring = "http://ot-dev.in-silico.ch/dataset"
+ uri = uristring
+ dataset_service = OpenTox::Dataset.new uri
+ assert_match /#{uristring}/, dataset_service.get
+ dataset_uri = dataset_service.post
+ assert_match /#{uristring}/, dataset_uri.to_s
+ dataset = OpenTox::Dataset.new dataset_uri
+ assert_equal dataset_uri, dataset.uri
+ metadata = dataset.metadata
+ assert_equal RDF::OT.Dataset, metadata[RDF.type]
+ assert_equal dataset.uri, metadata[RDF::XSD.anyURI]
+ dataset.delete
+ end
+
+end