bio-publisci 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (95) hide show
  1. data/.document +5 -0
  2. data/.rspec +1 -0
  3. data/.travis.yml +13 -0
  4. data/Gemfile +24 -0
  5. data/LICENSE.txt +20 -0
  6. data/README.md +47 -0
  7. data/README.rdoc +48 -0
  8. data/Rakefile +70 -0
  9. data/bin/bio-publisci +83 -0
  10. data/features/create_generator.feature +25 -0
  11. data/features/integration.feature +12 -0
  12. data/features/integration_steps.rb +10 -0
  13. data/features/orm.feature +60 -0
  14. data/features/orm_steps.rb +74 -0
  15. data/features/reader.feature +25 -0
  16. data/features/reader_steps.rb +60 -0
  17. data/features/step_definitions/bio-publisci_steps.rb +0 -0
  18. data/features/store.feature +27 -0
  19. data/features/store_steps.rb +42 -0
  20. data/features/support/env.rb +13 -0
  21. data/features/writer.feature +9 -0
  22. data/features/writer_steps.rb +17 -0
  23. data/lib/bio-publisci/analyzer.rb +57 -0
  24. data/lib/bio-publisci/dataset/ORM/data_cube_orm.rb +219 -0
  25. data/lib/bio-publisci/dataset/ORM/observation.rb +20 -0
  26. data/lib/bio-publisci/dataset/data_cube.rb +308 -0
  27. data/lib/bio-publisci/dataset/interactive.rb +57 -0
  28. data/lib/bio-publisci/loader.rb +36 -0
  29. data/lib/bio-publisci/metadata/metadata.rb +105 -0
  30. data/lib/bio-publisci/parser.rb +64 -0
  31. data/lib/bio-publisci/query/query_helper.rb +114 -0
  32. data/lib/bio-publisci/r_client.rb +54 -0
  33. data/lib/bio-publisci/readers/arff.rb +87 -0
  34. data/lib/bio-publisci/readers/big_cross.rb +119 -0
  35. data/lib/bio-publisci/readers/cross.rb +72 -0
  36. data/lib/bio-publisci/readers/csv.rb +54 -0
  37. data/lib/bio-publisci/readers/dataframe.rb +66 -0
  38. data/lib/bio-publisci/readers/r_matrix.rb +152 -0
  39. data/lib/bio-publisci/store.rb +56 -0
  40. data/lib/bio-publisci/writers/arff.rb +66 -0
  41. data/lib/bio-publisci/writers/dataframe.rb +81 -0
  42. data/lib/bio-publisci.rb +36 -0
  43. data/lib/r2rdf.rb +226 -0
  44. data/lib/template_bak/publisci.rb +3 -0
  45. data/lib/template_bak.rb +12 -0
  46. data/lib/vocabs/cc.rb +18 -0
  47. data/lib/vocabs/cert.rb +13 -0
  48. data/lib/vocabs/dc.rb +63 -0
  49. data/lib/vocabs/dc11.rb +23 -0
  50. data/lib/vocabs/doap.rb +45 -0
  51. data/lib/vocabs/exif.rb +168 -0
  52. data/lib/vocabs/foaf.rb +69 -0
  53. data/lib/vocabs/geo.rb +13 -0
  54. data/lib/vocabs/http.rb +26 -0
  55. data/lib/vocabs/ma.rb +78 -0
  56. data/lib/vocabs/owl.rb +59 -0
  57. data/lib/vocabs/rdfs.rb +17 -0
  58. data/lib/vocabs/rsa.rb +12 -0
  59. data/lib/vocabs/rss.rb +14 -0
  60. data/lib/vocabs/sioc.rb +93 -0
  61. data/lib/vocabs/skos.rb +36 -0
  62. data/lib/vocabs/wot.rb +21 -0
  63. data/lib/vocabs/xhtml.rb +9 -0
  64. data/lib/vocabs/xsd.rb +58 -0
  65. data/resources/queries/codes.rq +13 -0
  66. data/resources/queries/dataset.rq +7 -0
  67. data/resources/queries/dimension_ranges.rq +8 -0
  68. data/resources/queries/dimensions.rq +7 -0
  69. data/resources/queries/measures.rq +7 -0
  70. data/resources/queries/observations.rq +12 -0
  71. data/resources/queries/test.rq +3 -0
  72. data/resources/weather.numeric.arff +23 -0
  73. data/spec/analyzer_spec.rb +36 -0
  74. data/spec/bio-publisci_spec.rb +7 -0
  75. data/spec/csv/bacon.csv +4 -0
  76. data/spec/csv/moar_bacon.csv +11 -0
  77. data/spec/data_cube_spec.rb +166 -0
  78. data/spec/generators/csv_spec.rb +44 -0
  79. data/spec/generators/dataframe_spec.rb +44 -0
  80. data/spec/generators/r_matrix_spec.rb +35 -0
  81. data/spec/queries/integrity/1.rq +21 -0
  82. data/spec/queries/integrity/11.rq +29 -0
  83. data/spec/queries/integrity/12.rq +37 -0
  84. data/spec/queries/integrity/14.rq +25 -0
  85. data/spec/queries/integrity/19_1.rq +21 -0
  86. data/spec/queries/integrity/19_2.rq +15 -0
  87. data/spec/queries/integrity/2.rq +22 -0
  88. data/spec/queries/integrity/3.rq +19 -0
  89. data/spec/queries/integrity/4.rq +13 -0
  90. data/spec/queries/integrity/5.rq +14 -0
  91. data/spec/r_builder_spec.rb +33 -0
  92. data/spec/spec_helper.rb +17 -0
  93. data/spec/turtle/bacon +149 -0
  94. data/spec/turtle/reference +2066 -0
  95. metadata +259 -0
data/.document ADDED
@@ -0,0 +1,5 @@
1
+ lib/**/*.rb
2
+ bin/*
3
+ -
4
+ features/**/*.feature
5
+ LICENSE.txt
data/.rspec ADDED
@@ -0,0 +1 @@
1
+ --color
data/.travis.yml ADDED
@@ -0,0 +1,13 @@
1
+ language: ruby
2
+ rvm:
3
+ - 1.9.2
4
+ - 1.9.3
5
+ - jruby-19mode # JRuby in 1.9 mode
6
+
7
+ # - rbx-19mode
8
+ # - 1.8.7
9
+ # - jruby-18mode # JRuby in 1.8 mode
10
+ # - rbx-18mode
11
+ #
12
+ # uncomment this line if your project needs to run something other than `rake`:
13
+ # script: bundle exec rspec spec
data/Gemfile ADDED
@@ -0,0 +1,24 @@
1
+ source "http://rubygems.org"
2
+ # Add dependencies required to use your gem here.
3
+ # Example:
4
+ # gem "activesupport", ">= 2.3.5"
5
+
6
+ # Add dependencies to develop your gem here.
7
+ # Include everything needed to run rake, tests, features, etc.
8
+ group :development do
9
+ gem "rspec", "~> 2.8.0"
10
+ gem "rdoc", "~> 3.12"
11
+ gem "cucumber", ">= 0"
12
+ gem "jeweler", "~> 1.8.4", :git => "https://github.com/technicalpickles/jeweler.git"
13
+ gem "bundler", ">= 1.0.21"
14
+ gem "bio", ">= 1.4.2"
15
+ gem "rdoc", "~> 3.12"
16
+ end
17
+
18
+ group :production do
19
+ gem 'rdf'
20
+ gem 'rdf-4store'
21
+ gem 'rdf-turtle'
22
+ gem 'rserve-client'
23
+ gem 'sparql'
24
+ end
data/LICENSE.txt ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2013 wstrinz
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,47 @@
1
+ # bio-publisci
2
+
3
+ [![Build Status](https://secure.travis-ci.org/wstrinz/bioruby-publisci.png)](http://travis-ci.org/wstrinz/bioruby-publisci)
4
+
5
+ Full description goes here
6
+
7
+ Note: this software is under active development!
8
+
9
+ ## Installation
10
+
11
+ ```sh
12
+ gem install bio-publisci
13
+ ```
14
+
15
+ ## Usage
16
+
17
+ ```ruby
18
+ require 'bio-publisci'
19
+ ```
20
+
21
+ The API doc is online. For more code examples see the test files in
22
+ the source tree.
23
+
24
+ ## Project home page
25
+
26
+ Information on the source tree, documentation, examples, issues and
27
+ how to contribute, see
28
+
29
+ http://github.com/wstrinz/bioruby-publisci
30
+
31
+ The BioRuby community is on IRC server: irc.freenode.org, channel: #bioruby.
32
+
33
+ ## Cite
34
+
35
+ If you use this software, please cite one of
36
+
37
+ * [BioRuby: bioinformatics software for the Ruby programming language](http://dx.doi.org/10.1093/bioinformatics/btq475)
38
+ * [Biogem: an effective tool-based approach for scaling up open source software development in bioinformatics](http://dx.doi.org/10.1093/bioinformatics/bts080)
39
+
40
+ ## Biogems.info
41
+
42
+ This Biogem is published at (http://biogems.info/index.html#bio-publisci)
43
+
44
+ ## Copyright
45
+
46
+ Copyright (c) 2013 wstrinz. See LICENSE.txt for further details.
47
+
data/README.rdoc ADDED
@@ -0,0 +1,48 @@
1
+ = bio-publisci
2
+
3
+ {<img
4
+ src="https://secure.travis-ci.org/wstrinz/bioruby-publisci.png"
5
+ />}[http://travis-ci.org/#!/wstrinz/bioruby-publisci]
6
+
7
+ Full description goes here
8
+
9
+ Note: this software is under active development!
10
+
11
+ == Installation
12
+
13
+ gem install bio-publisci
14
+
15
+ == Usage
16
+
17
+ == Developers
18
+
19
+ To use the library
20
+
21
+ require 'bio-publisci'
22
+
23
+ The API doc is online. For more code examples see also the test files in
24
+ the source tree.
25
+
26
+ == Project home page
27
+
28
+ Information on the source tree, documentation, issues and how to contribute, see
29
+
30
+ http://github.com/wstrinz/bioruby-publisci
31
+
32
+ The BioRuby community is on IRC server: irc.freenode.org, channel: #bioruby.
33
+
34
+ == Cite
35
+
36
+ If you use this software, please cite one of
37
+
38
+ * [BioRuby: bioinformatics software for the Ruby programming language](http://dx.doi.org/10.1093/bioinformatics/btq475)
39
+ * [Biogem: an effective tool-based approach for scaling up open source software development in bioinformatics](http://dx.doi.org/10.1093/bioinformatics/bts080)
40
+
41
+ == Biogems.info
42
+
43
+ This Biogem is published at http://biogems.info/index.html#bio-publisci
44
+
45
+ == Copyright
46
+
47
+ Copyright (c) 2013 wstrinz. See LICENSE.txt for further details.
48
+
data/Rakefile ADDED
@@ -0,0 +1,70 @@
1
+ # encoding: utf-8
2
+
3
+ require 'rubygems'
4
+ require 'bundler'
5
+ begin
6
+ Bundler.setup(:default, :development)
7
+ rescue Bundler::BundlerError => e
8
+ $stderr.puts e.message
9
+ $stderr.puts "Run `bundle install` to install missing gems"
10
+ exit e.status_code
11
+ end
12
+ require 'rake'
13
+
14
+ require 'jeweler'
15
+ Jeweler::Tasks.new do |gem|
16
+ # gem is a Gem::Specification... see http://docs.rubygems.org/read/chapter/20 for more options
17
+ gem.name = "bio-publisci"
18
+ gem.homepage = "http://github.com/wstrinz/bioruby-publisci"
19
+ gem.license = "MIT"
20
+ gem.summary = %Q{Publish science data using semantic web ontologies}
21
+ gem.description = %Q{A toolkit for publishing scientific results and datasets using RDF and related technologies }
22
+ gem.email = "wstrinz@gmail.com"
23
+ gem.authors = ["wstrinz"]
24
+ gem.version = "0.0.1"
25
+ # dependencies defined in Gemfile
26
+ end
27
+ Jeweler::RubygemsDotOrgTasks.new
28
+
29
+ require 'rspec/core'
30
+ require 'rspec/core/rake_task'
31
+ RSpec::Core::RakeTask.new(:spec) do |spec|
32
+ spec.pattern = FileList['spec/**/*_spec.rb']
33
+ end
34
+
35
+ RSpec::Core::RakeTask.new(:rcov) do |spec|
36
+ spec.pattern = 'spec/**/*_spec.rb'
37
+ spec.rcov = true
38
+ end
39
+
40
+
41
+ require 'cucumber/rake/task'
42
+ Cucumber::Rake::Task.new(:features)
43
+
44
+ # task :default => :spec
45
+
46
+ task :default => [] do
47
+ begin
48
+ Rake::Task[:spec].invoke
49
+ rescue
50
+ end
51
+ Rake::Task[:features].invoke
52
+ end
53
+
54
+ task :test => [] do
55
+ begin
56
+ Rake::Task[:spec].invoke
57
+ rescue
58
+ end
59
+ Rake::Task[:features].invoke
60
+ end
61
+
62
+ require 'rdoc/task'
63
+ Rake::RDocTask.new do |rdoc|
64
+ version = File.exist?('VERSION') ? File.read('VERSION') : "0.0.1"
65
+
66
+ rdoc.rdoc_dir = 'rdoc'
67
+ rdoc.title = "bio-publisci #{version}"
68
+ rdoc.rdoc_files.include('README*')
69
+ rdoc.rdoc_files.include('lib/**/*.rb')
70
+ end
data/bin/bio-publisci ADDED
@@ -0,0 +1,83 @@
1
+ #!/usr/bin/env ruby
2
+ #
3
+ # BioRuby bio-publisci Plugin BioPublisci
4
+ # Author:: wstrinz
5
+ # Copyright:: 2013
6
+
7
+ USAGE = "Describe bio-publisci"
8
+
9
+ gempath = File.dirname(File.dirname(__FILE__))
10
+ $: << File.join(gempath,'lib')
11
+
12
+ VERSION_FILENAME=File.join(gempath,'VERSION')
13
+ version = File.new(VERSION_FILENAME).read.chomp
14
+
15
+ # print banner
16
+ print "bio-publisci #{version} by wstrinz 2013\n"
17
+
18
+ if ARGV.size == 0
19
+ print USAGE
20
+ end
21
+
22
+ require 'bio-publisci'
23
+ require 'optparse'
24
+
25
+ # Uncomment when using the bio-logger
26
+ # require 'bio-logger'
27
+ # Bio::Log::CLI.logger('stderr')
28
+ # Bio::Log::CLI.trace('info')
29
+
30
+ options = {:example_switch=>false,:show_help=>false}
31
+ opts = OptionParser.new do |o|
32
+ o.banner = "Usage: #{File.basename($0)} [options] reponame\ne.g. #{File.basename($0)} the-perfect-gem"
33
+
34
+ o.on('--example_parameter [EXAMPLE_PARAMETER]', 'TODO: put a description for the PARAMETER') do |example_parameter|
35
+ # TODO: your logic here, below an example
36
+ options[:example_parameter] = 'this is a parameter'
37
+ end
38
+
39
+ o.separator ""
40
+ o.on("--switch-example", 'TODO: put a description for the SWITCH') do
41
+ # TODO: your logic here, below an example
42
+ self[:example_switch] = true
43
+ end
44
+
45
+ # Uncomment the following when using the bio-logger
46
+ # o.separator ""
47
+ # o.on("--logger filename",String,"Log to file (default stderr)") do | name |
48
+ # Bio::Log::CLI.logger(name)
49
+ # end
50
+ #
51
+ # o.on("--trace options",String,"Set log level (default INFO, see bio-logger)") do | s |
52
+ # Bio::Log::CLI.trace(s)
53
+ # end
54
+ #
55
+ # o.on("-q", "--quiet", "Run quietly") do |q|
56
+ # Bio::Log::CLI.trace('error')
57
+ # end
58
+ #
59
+ # o.on("-v", "--verbose", "Run verbosely") do |v|
60
+ # Bio::Log::CLI.trace('info')
61
+ # end
62
+ #
63
+ # o.on("--debug", "Show debug messages") do |v|
64
+ # Bio::Log::CLI.trace('debug')
65
+ # end
66
+
67
+ o.separator ""
68
+ o.on_tail('-h', '--help', 'display this help and exit') do
69
+ options[:show_help] = true
70
+ end
71
+ end
72
+
73
+ begin
74
+ opts.parse!(ARGV)
75
+
76
+ # Uncomment the following when using the bio-logger
77
+ # Bio::Log::CLI.configure('bio-publisci')
78
+
79
+ # TODO: your code here
80
+ # use options for your logic
81
+ rescue OptionParser::InvalidOption => e
82
+ options[:invalid_argument] = e.message
83
+ end
@@ -0,0 +1,25 @@
1
+ Feature: create generators
2
+
3
+ In order to check that objects conform to a common interface
4
+ I want to be able to call a generate method on various classes
5
+
6
+ Scenario: create a Dataframe generator
7
+ Given a Dataframe generator
8
+ Then I should be able to call its generate_n3 method
9
+
10
+ Scenario: create a CSV generator
11
+ Given a CSV generator
12
+ Then I should be able to call its generate_n3 method
13
+
14
+ Scenario: create a RMatrix generator
15
+ Given a RMatrix generator
16
+ Then I should be able to call its generate_n3 method
17
+
18
+ Scenario: create a Cross generator
19
+ Given a Cross generator
20
+ Then I should be able to call its generate_n3 method
21
+
22
+ Scenario: create a BigCross generator
23
+ Given a BigCross generator
24
+ Then I should be able to call its generate_n3 method
25
+
@@ -0,0 +1,12 @@
1
+ Feature: Integrate with other GSOC projects
2
+
3
+ In order to leverage the data sharing and comprehension power of RDF
4
+ I want to integrate my code with that of other GSOC students
5
+
6
+ Scenario: Integrate with Ruby Mining
7
+ Given a CSV generator
8
+ When I provide the reference file spec/csv/moar_bacon.csv and the label "moar_bacon" and the options {dimensions:["producer","pricerange"]}
9
+ And generate a turtle string from it
10
+ Given a ARFF writer
11
+ When I call its from_turtle method on the turtle string
12
+ Then I should be able to cluster the result and print statistics
@@ -0,0 +1,10 @@
1
+ Then(/^I should be able to cluster the result and print statistics$/) do
2
+ require 'ruby_mining'
3
+ f=Tempfile.open('arff'); f.write @result; f.close
4
+ clustering = Weka::Clusterer::SimpleKMeans::Base
5
+ clustering.set_options "-N 5"
6
+ clustering.set_data(Core::Parser::parse_ARFF(f.path))
7
+ f.unlink
8
+ clustered = clustering.new
9
+ puts clustered
10
+ end
@@ -0,0 +1,60 @@
1
+ Feature: generate data using ORM
2
+
3
+ In order to make the generator simpler and more accessible to ruby users
4
+ I want to implement an ORM (OTM? OGM?) to assist creation of datacube objects
5
+
6
+ Scenario: build data cube and export turtle
7
+ Given an ORM::DataCube entitled "cats"
8
+ When I add a "size" dimension
9
+ And I add a "breed" dimension
10
+ And I add a "fluffiness" measure
11
+ And I add the observation {size: "big", breed: "American Shorthair", fluffiness: 100}
12
+ And I add the observation {size: "huge", breed: "Maine Coon", fluffiness: 9001}
13
+ And I add the observation {size: "little", breed: "American Shorthair", fluffiness: 15}
14
+ Then the to_n3 method should return a string
15
+
16
+ Scenario: load from turtle string
17
+ Given a turtle string from file spec/turtle/bacon
18
+ When I call the ORM::DataCube class method load on it
19
+ Then I should receive an ORM::DataCube object
20
+ And the to_n3 method should return a string
21
+
22
+ Scenario: load from endpoint
23
+ Given the URI string "http://localhost:8080"
24
+ When I call the ORM::DataCube class method load on it
25
+ Then I should receive an ORM::DataCube object
26
+ And the to_n3 method should return a string
27
+
28
+ Scenario: raise error when unknown components are used
29
+ Given an ORM::DataCube entitled "animals"
30
+ When I add a "robustness" dimension
31
+ And I add a "species" measure
32
+ And I add the observation {species: "Balaenoptera musculus", robustness: 25}
33
+ And I add the observation {species: "Hypsibius dujardini", robustness: 9001}
34
+ Then the to_n3 method should return a string
35
+ When I add the observation {species: "Deinococcus radiodurans", robustness: 350, chunkiness: 9}
36
+ Then the to_n3 method should raise error UnknownProperty ["chunkiness"]
37
+
38
+ Scenario: raise error when components are missing
39
+ Given an ORM::DataCube entitled "animals"
40
+ When I add a "robustness" dimension
41
+ And I add a "species" measure
42
+ And I add the observation {species: "Felis catus"}
43
+ Then the to_n3 method should raise error MissingValues for ["robustness"]
44
+
45
+ Scenario: raise error when components are missing
46
+ Given an ORM::DataCube entitled "animals" with the following options:
47
+ | key | value |
48
+ | :validate_each | true |
49
+ When I add a "robustness" dimension
50
+ And I add a "species" measure
51
+ Then adding the observation {species: "Caenorhabditis elegans"} should raise error MissingValues for ["robustness"]
52
+
53
+ Scenario: add metadata
54
+ Given an ORM::DataCube entitled "meta"
55
+ When I add a "robustness" dimension
56
+ And I add a "species" measure
57
+ And I add the observation {species: "Hypsibius dujardini", robustness: 9001}
58
+ And I call the cubes add_publisher method with the arguments "Moss Piglets Unlimited", "http://mosspiglet.org/"
59
+ Then the to_n3 method should return a string with a "dct:publisher"
60
+
@@ -0,0 +1,74 @@
1
+ require_relative '../lib/bio-publisci.rb'
2
+
3
+ Given /^an ORM::DataCube entitled "(.*?)"$/ do |name|
4
+ @cube = R2RDF::Dataset::ORM::DataCube.new(name: name)
5
+ end
6
+
7
+ Given /^an ORM::DataCube entitled "(.*?)" with the following options:$/ do |name, opts|
8
+ options_hash = {name: name}
9
+ opts.hashes.map{|hash|
10
+ k = hash["key"]
11
+ k = k[1..-1].to_sym if k[0] == ":"
12
+
13
+ v = hash["value"]
14
+ v = v[1..-1].to_sym if k[0] == ":"
15
+
16
+ v = true if v =="true"
17
+ v = false if v =="false"
18
+
19
+ options_hash[k] = v
20
+ }
21
+ @cube = R2RDF::Dataset::ORM::DataCube.new(options_hash)
22
+ end
23
+
24
+ Given(/^a turtle string from file (.*)$/) do |file|
25
+ @string = IO.read(file)
26
+ end
27
+
28
+ Given(/^the URI string "(.*?)"$/) do |uri|
29
+ @string = uri
30
+ end
31
+
32
+ When(/^I call the ORM::DataCube class method load on it$/) do
33
+ @cube = R2RDF::Dataset::ORM::DataCube.load(@string)
34
+ end
35
+
36
+ When /^I add a "(.*?)" dimension$/ do |dim|
37
+ @cube.add_dimension(dim)
38
+ end
39
+
40
+ When /^I add a "(.*?)" measure$/ do |meas|
41
+ @cube.add_measure(meas)
42
+ end
43
+
44
+ When /^I add the observation (.*)$/ do |obs|
45
+ data = eval(obs)
46
+ # obs.split(',').map{|entry| data[entry.chomp.strip.split(':')[0].to_s] = eval(entry.chomp.strip.split(':')[1])}
47
+ @cube.add_observation(data)
48
+ end
49
+
50
+ When /^adding the observation (.*) should raise error (.*)$/ do |obs,err|
51
+ data = eval(obs)
52
+ expect { @cube.add_observation(data) }.to raise_error(err)
53
+ end
54
+
55
+ When /^I call the cubes (.*) method with the arguments (.*)$/ do |method,args|
56
+ eval("args = #{args}")
57
+ @cube.send(method.to_sym, *args)
58
+ end
59
+
60
+ Then /^the to_n3 method should return a string$/ do
61
+ @cube.to_n3.is_a?(String).should be true
62
+ end
63
+
64
+ Then /^the to_n3 method should raise error (.*?)$/ do |err|
65
+ expect { @cube.to_n3 }.to raise_error(err)
66
+ end
67
+
68
+ Then /^the to_n3 method should return a string with a "(.*?)"$/ do |search|
69
+ @cube.to_n3[search].should_not be nil
70
+ end
71
+
72
+ Then(/^I should receive an ORM::DataCube object$/) do
73
+ @cube.is_a?(R2RDF::Dataset::ORM::DataCube).should == true
74
+ end
@@ -0,0 +1,25 @@
1
+ Feature: generate RDF
2
+
3
+ In order to test the generators
4
+ I want to be able to create turtle strings from various objects
5
+
6
+ Scenario: generate turtle RDF from a Dataframe
7
+ Given a Dataframe generator
8
+ When I provide an R dataframe and the label "mr"
9
+ And generate a turtle string from it
10
+ Then the result should contain a "qb:dataSet"
11
+ And the result should contain some "qb:Observation"s
12
+
13
+ Scenario: generate turtle RDF from a CSV
14
+ Given a CSV generator
15
+ When I provide the reference file spec/csv/bacon.csv and the label "bacon"
16
+ And generate a turtle string from it
17
+ Then the result should contain a "qb:dataSet"
18
+ And the result should contain some "qb:Observation"s
19
+
20
+ Scenario: generate turtle RDF from an ARFF file
21
+ Given a ARFF generator
22
+ When I provide the file resources/weather.numeric.arff
23
+ And generate a turtle string from it
24
+ Then the result should contain a "qb:dataSet"
25
+ And the result should contain some "qb:Observation"s
@@ -0,0 +1,60 @@
1
+ require_relative '../lib/bio-publisci.rb'
2
+
3
+ Given /^a (.*) generator$/ do |generator|
4
+ @generator = R2RDF::Reader.const_get(generator).new
5
+ end
6
+
7
+ When /^I ask for its methods$/ do
8
+ @methods = @generator.methods
9
+ end
10
+
11
+ When /^I provide an R (.*) and the label "(.*?)"$/ do |type, label|
12
+ if type == "dataframe"
13
+ r = Rserve::Connection.new
14
+ r.eval <<-EOF
15
+ library(qtl)
16
+ data(listeria)
17
+ mr = scanone(listeria,method="mr")
18
+ EOF
19
+ rexp = r.eval 'mr'
20
+ @attr = rexp,label
21
+ else
22
+ raise "Unknown object #{type}"
23
+ end
24
+
25
+ end
26
+
27
+ When /^I provide the.* file (.*) and the label "(.*?)"$/ do |file, label|
28
+ raise "Cant find #{file}" unless File.exist? file
29
+ @attr = file,label
30
+ end
31
+
32
+ When /^I provide the.* file (.*) and the label "(.*?)" and the options (.*)$/ do |file, label, opts|
33
+ raise "Cant find #{file}" unless File.exist? file
34
+ @attr = file,label,eval(opts)
35
+ end
36
+
37
+ When /^I provide the.* file (\S+)$/ do |file|
38
+ raise "Cant find #{file}" unless File.exist? file
39
+ @attr = file
40
+ end
41
+
42
+ When /^generate a turtle string from it$/ do
43
+ @turtle_string = @generator.send :generate_n3, *@attr
44
+ end
45
+
46
+ Then /^I should have access to a (.*) method$/ do |method|
47
+ @methods.include?(method).should == true
48
+ end
49
+
50
+ Then /^I should be able to call its (.*) method$/ do |method|
51
+ @generator.methods.include?(:"#{method}").should == true
52
+ end
53
+
54
+ Then /^the result should contain a "(.*?)"$/ do |search|
55
+ @turtle_string[search].should_not be nil
56
+ end
57
+
58
+ Then /^the result should contain some "(.*?)"s$/ do |search|
59
+ @turtle_string[search].size.should > 1
60
+ end
File without changes
@@ -0,0 +1,27 @@
1
+ Feature: load triples into a store
2
+
3
+ In order to query and share data
4
+ I want to be able load the output into a variety of store
5
+
6
+ Scenario: Use an RDF::Graph to store data
7
+ Given a store of type graph
8
+ When I call the stores add method with the turtle file spec/turtle/bacon and an RDF::Repository
9
+ Then I should recieve a non-empty graph
10
+
11
+ Scenario: Use 4store to store data
12
+ Given a store of type fourstore
13
+ When I call the stores add method with the turtle file spec/turtle/bacon and the graph name "test"
14
+ Then I should receive an info string
15
+
16
+ Scenario: Run queries on store
17
+ Given a store of type fourstore
18
+ When I call the query method using the text in file spec/queries/integrity/1.rq
19
+ Then I should receive 0 results
20
+ When I call the query method using the text in file resources/queries/test.rq
21
+ Then I should receive 10 results
22
+
23
+ Scenario: Run queries on graph based store
24
+ Given a store of type graph
25
+ When I call the stores add method with the turtle file spec/turtle/bacon and an RDF::Repository
26
+ Then calling the query method using the text in file spec/queries/integrity/1.rq should return 0 results
27
+ And calling the query method using the text in file resources/queries/test.rq should return 10 results
@@ -0,0 +1,42 @@
1
+ require_relative '../lib/bio-publisci.rb'
2
+
3
+ Given /a store of type (.*?)$/ do |type|
4
+ @store = R2RDF::Store.new(type: :"#{type}")
5
+ end
6
+
7
+ When /^I call the stores add method with the turtle file (.*?) and an RDF::(.*?)$/ do |file,graph|
8
+ graph = RDF.const_get(graph).new #rescue graph
9
+ @graph = @store.add(file,graph)
10
+ end
11
+
12
+ When /^I call the stores add method with the turtle file (.*?) and the graph name "(.*?)"$/ do |file,graph|
13
+ @graph = @store.add(file,graph)
14
+ end
15
+
16
+
17
+ When /^I call the query method using the text in file (.*)$/ do |file|
18
+ query_string = IO.read(file)
19
+ @query_result = @store.query(query_string)
20
+ end
21
+
22
+ Then /^calling the query method using the text in file (.*) should return (.*) results$/ do |file, num|
23
+ query_string = IO.read(file)
24
+ @store.query(query_string) #.size.should == num
25
+ end
26
+
27
+ Then /^I should recieve a non-empty graph$/ do
28
+ @graph.is_a?(RDF::Repository).should be true
29
+ @graph.size.should > 0
30
+ end
31
+
32
+ Then /^I should receive an info string$/ do
33
+ @graph.is_a?(String).should be true
34
+ end
35
+
36
+ Then /^I should receive (.*) results$/ do |num|
37
+ @query_result.size.should == num.to_i
38
+ end
39
+
40
+ # Then /^raise the result$/ do
41
+ # raise "got @graph"
42
+ # end
@@ -0,0 +1,13 @@
1
+ require 'bundler'
2
+ begin
3
+ Bundler.setup(:default, :development)
4
+ rescue Bundler::BundlerError => e
5
+ $stderr.puts e.message
6
+ $stderr.puts "Run `bundle install` to install missing gems"
7
+ exit e.status_code
8
+ end
9
+
10
+ $LOAD_PATH.unshift(File.dirname(__FILE__) + '/../../lib')
11
+ require 'bio-publisci'
12
+
13
+ require 'rspec/expectations'