bio-krona 0.0.1 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
data/.travis.yml CHANGED
@@ -9,4 +9,4 @@ rvm:
9
9
  # - rbx-18mode
10
10
 
11
11
  # uncomment this line if your project needs to run something other than `rake`:
12
- # script: bundle exec rspec spec
12
+ script: bundle exec rake test_without_wrapper
data/Rakefile CHANGED
@@ -30,12 +30,11 @@ require 'rspec/core/rake_task'
30
30
  RSpec::Core::RakeTask.new(:spec) do |spec|
31
31
  spec.pattern = FileList['spec/**/*_spec.rb']
32
32
  end
33
-
34
- RSpec::Core::RakeTask.new(:rcov) do |spec|
35
- spec.pattern = 'spec/**/*_spec.rb'
36
- spec.rcov = true
33
+ RSpec::Core::RakeTask.new(:test_without_wrapper) do |spec|
34
+ spec.pattern = FileList['spec/**/*_spec.rb'].reject{|f| f=='spec/bio-krona_wrapper_spec.rb'}
37
35
  end
38
36
 
37
+
39
38
  require 'cucumber/rake/task'
40
39
  Cucumber::Rake::Task.new(:features)
41
40
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.1
1
+ 0.1.0
@@ -7,41 +7,46 @@ module Bio
7
7
  # * count_hash: hash of Array => Numeric, where the array is a list of descriptors (e.g. [Eukaryota, Metazoa, Chordata]), and the Numeric is a count for the number of observations of that description
8
8
  # * options:
9
9
  # ** :krona_path: path to the ktImportText script in the krona directory (default 'ktImportText' i.e. assuming it is already in the PATH)
10
+ # ** :resources_url: URL of krona resources (i.e. the -u option of ktImportText)
10
11
  def self.html(count_hash, options={})
11
12
  raise unless count_hash.kind_of?(Hash)
12
13
  options[:krona_path] ||= %(ktImportText)
13
-
14
+
14
15
  Tempfile.open('krona') do |tempfile|
15
16
  count_hash.each do |array, count|
16
17
  raise unless array.kind_of?(Array)
17
18
  raise unless count.kind_of?(Numeric)
18
-
19
+
19
20
  tempfile.puts [
20
21
  count,
21
22
  array
22
23
  ].flatten.join("\t")
23
24
  end
24
25
  tempfile.close
25
-
26
+
26
27
  Tempfile.open('krona_out') do |output|
27
28
  output.close
28
-
29
+
29
30
  command = [
30
31
  options[:krona_path],
31
32
  '-o',
32
33
  output.path,
33
34
  tempfile.path,
34
35
  ].flatten
36
+ if options[:resources_url]
37
+ command.push '-u'
38
+ command.push options[:resources_url]
39
+ end
35
40
  Bio::Command.call_command_open3(command) do |stdin, stdout, stderr|
36
41
  err = stderr.read
37
42
  raise err unless err==''
38
43
  end
39
-
44
+
40
45
  return File.open(output.path).read
41
46
  end
42
47
  end
43
48
  end
44
-
49
+
45
50
  # Take a count_hash (hash of Array => Numeric), and collapse the array down to some maximum number of levels. In krona, the collapsed output would now have less (max_level) rings.
46
51
  #
47
52
  # Returns the collapsed count_hash
@@ -51,7 +56,7 @@ module Bio
51
56
  count_hash.each do |array, count|
52
57
  raise unless array.kind_of?(Array)
53
58
  raise unless count.kind_of?(Numeric)
54
-
59
+
55
60
  new_count_hash[array[0...max_level]] ||= 0
56
61
  new_count_hash[array[0...max_level]] += count
57
62
  end
@@ -1,64 +1,6 @@
1
1
  require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
2
 
3
3
  describe "BioKrona" do
4
- it "should give a html when you give it a simple hash" do
5
- html = Bio::Krona.html({
6
- ['Sponge','Amphimedon']=>3,
7
- ['Sponge','Calciums']=>4,
8
- })
9
- expected = <<EOF
10
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
11
- <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
12
- <head>
13
- <meta charset="utf-8"/>
14
- <link rel="shortcut icon" href="http://krona.sourceforge.net/img/favicon.ico"/>
15
- <script id="notfound">window.onload=function(){document.body.innerHTML="Could not get resources from \\"http://krona.sourceforge.net\\"."}</script>
16
- <script src="http://krona.sourceforge.net/src/krona-2.0.js"></script>
17
- </head>
18
- <body>
19
- <img id="hiddenImage" src="http://krona.sourceforge.net/img/hidden.png" style="display:none"/>
20
- <img id="loadingImage" src="http://krona.sourceforge.net/img/loading.gif" style="display:none"/>
21
- <noscript>Javascript must be enabled to view this page.</noscript>
22
- <div style="display:none">
23
- <krona collapse="true" key="true">
24
- <attributes magnitude="magnitude">
25
- <list>members</list>
26
- <attribute display="Total">magnitude</attribute>
27
- </attributes>
28
- <datasets>
29
- <dataset>input</dataset>
30
- </datasets>
31
- <node name="all">
32
- <magnitude><val>7</val></magnitude>
33
- <node name="Sponge">
34
- <magnitude><val>7</val></magnitude>
35
- <node name="Amphimedon">
36
- <magnitude><val>3</val></magnitude>
37
- </node>
38
- <node name="Calciums">
39
- <magnitude><val>4</val></magnitude>
40
- </node>
41
- </node>
42
- </node>
43
- </krona>
44
- </div></body></html>
45
- EOF
46
- make_comparable = lambda do |string|
47
- string.split("\n").reject{|line| line.match(/<dataset>/)}
48
- end
49
- expected = make_comparable.call(expected)
50
- html = make_comparable.call(html)
51
-
52
- html.should eq(expected)
53
- end
54
-
55
- # it "should give back the html split up for re-use" do
56
- # h = Bio::Krona.reusable_html_chunks({
57
- # ['Sponge','Amphimedon']=>3,
58
- # ['Sponge','Calciums']=>4,
59
- # })
60
- # end
61
-
62
4
  it "should collapse hashes right" do
63
5
  big = {%w(a b c)=>2, %w(a b f)=>4, %w(g)=>5}
64
6
 
@@ -0,0 +1,71 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
+
3
+ describe "BioKronaWrapper" do
4
+ it "should give a html when you give it a simple hash" do
5
+ html = Bio::Krona.html({
6
+ ['Sponge','Amphimedon']=>3,
7
+ ['Sponge','Calciums']=>4,
8
+ })
9
+ expected = <<EOF
10
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
11
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
12
+ <head>
13
+ <meta charset="utf-8"/>
14
+ <link rel="shortcut icon" href="http://krona.sourceforge.net/img/favicon.ico"/>
15
+ <script id="notfound">window.onload=function(){document.body.innerHTML="Could not get resources from \\"http://krona.sourceforge.net\\"."}</script>
16
+ <script src="http://krona.sourceforge.net/src/krona-2.0.js"></script>
17
+ </head>
18
+ <body>
19
+ <img id="hiddenImage" src="http://krona.sourceforge.net/img/hidden.png" style="display:none"/>
20
+ <img id="loadingImage" src="http://krona.sourceforge.net/img/loading.gif" style="display:none"/>
21
+ <img id="logo" src="http://krona.sourceforge.net/img/logo.png" style="display:none"/>
22
+ <noscript>Javascript must be enabled to view this page.</noscript>
23
+ <div style="display:none">
24
+ <krona collapse="true" key="true">
25
+ <attributes magnitude="magnitude">
26
+ <list>members</list>
27
+ <attribute display="Total">magnitude</attribute>
28
+ </attributes>
29
+ <datasets>
30
+ <dataset>input</dataset>
31
+ </datasets>
32
+ <node name="all">
33
+ <magnitude><val>7</val></magnitude>
34
+ <node name="Sponge">
35
+ <magnitude><val>7</val></magnitude>
36
+ <node name="Amphimedon">
37
+ <magnitude><val>3</val></magnitude>
38
+ </node>
39
+ <node name="Calciums">
40
+ <magnitude><val>4</val></magnitude>
41
+ </node>
42
+ </node>
43
+ </node>
44
+ </krona>
45
+ </div></body></html>
46
+ EOF
47
+ make_comparable = lambda do |string|
48
+ string.split("\n").reject{|line| line.match(/<dataset>/)}
49
+ end
50
+ expected = make_comparable.call(expected)
51
+ html = make_comparable.call(html)
52
+
53
+ html.should eq(expected)
54
+ end
55
+
56
+ # it "should give back the html split up for re-use" do
57
+ # h = Bio::Krona.reusable_html_chunks({
58
+ # ['Sponge','Amphimedon']=>3,
59
+ # ['Sponge','Calciums']=>4,
60
+ # })
61
+ # end
62
+
63
+ it 'should use a specified URL for the krona assets when set to' do
64
+ html = Bio::Krona.html({
65
+ ['Sponge','Amphimedon']=>3,
66
+ ['Sponge','Calciums']=>4,
67
+ }, :resources_url => 'http://dummy.com')
68
+
69
+ html.should match('script src="http://dummy.com')
70
+ end
71
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bio-krona
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.1.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-08-08 00:00:00.000000000 Z
12
+ date: 2013-07-17 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bio
16
- requirement: &75478020 !ruby/object:Gem::Requirement
16
+ requirement: !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,15 @@ dependencies:
21
21
  version: '0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *75478020
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
25
30
  - !ruby/object:Gem::Dependency
26
31
  name: rspec
27
- requirement: &75477510 !ruby/object:Gem::Requirement
32
+ requirement: !ruby/object:Gem::Requirement
28
33
  none: false
29
34
  requirements:
30
35
  - - ~>
@@ -32,10 +37,15 @@ dependencies:
32
37
  version: 2.8.0
33
38
  type: :development
34
39
  prerelease: false
35
- version_requirements: *75477510
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ~>
44
+ - !ruby/object:Gem::Version
45
+ version: 2.8.0
36
46
  - !ruby/object:Gem::Dependency
37
47
  name: yard
38
- requirement: &75477060 !ruby/object:Gem::Requirement
48
+ requirement: !ruby/object:Gem::Requirement
39
49
  none: false
40
50
  requirements:
41
51
  - - ~>
@@ -43,10 +53,15 @@ dependencies:
43
53
  version: '0.7'
44
54
  type: :development
45
55
  prerelease: false
46
- version_requirements: *75477060
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ~>
60
+ - !ruby/object:Gem::Version
61
+ version: '0.7'
47
62
  - !ruby/object:Gem::Dependency
48
63
  name: rdoc
49
- requirement: &75547720 !ruby/object:Gem::Requirement
64
+ requirement: !ruby/object:Gem::Requirement
50
65
  none: false
51
66
  requirements:
52
67
  - - ~>
@@ -54,10 +69,15 @@ dependencies:
54
69
  version: '3.12'
55
70
  type: :development
56
71
  prerelease: false
57
- version_requirements: *75547720
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ~>
76
+ - !ruby/object:Gem::Version
77
+ version: '3.12'
58
78
  - !ruby/object:Gem::Dependency
59
79
  name: cucumber
60
- requirement: &75546890 !ruby/object:Gem::Requirement
80
+ requirement: !ruby/object:Gem::Requirement
61
81
  none: false
62
82
  requirements:
63
83
  - - ! '>='
@@ -65,10 +85,15 @@ dependencies:
65
85
  version: '0'
66
86
  type: :development
67
87
  prerelease: false
68
- version_requirements: *75546890
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ! '>='
92
+ - !ruby/object:Gem::Version
93
+ version: '0'
69
94
  - !ruby/object:Gem::Dependency
70
95
  name: jeweler
71
- requirement: &75546480 !ruby/object:Gem::Requirement
96
+ requirement: !ruby/object:Gem::Requirement
72
97
  none: false
73
98
  requirements:
74
99
  - - ~>
@@ -76,10 +101,15 @@ dependencies:
76
101
  version: 1.8.3
77
102
  type: :development
78
103
  prerelease: false
79
- version_requirements: *75546480
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ~>
108
+ - !ruby/object:Gem::Version
109
+ version: 1.8.3
80
110
  - !ruby/object:Gem::Dependency
81
111
  name: bundler
82
- requirement: &75545940 !ruby/object:Gem::Requirement
112
+ requirement: !ruby/object:Gem::Requirement
83
113
  none: false
84
114
  requirements:
85
115
  - - ! '>='
@@ -87,10 +117,15 @@ dependencies:
87
117
  version: 1.0.21
88
118
  type: :development
89
119
  prerelease: false
90
- version_requirements: *75545940
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ none: false
122
+ requirements:
123
+ - - ! '>='
124
+ - !ruby/object:Gem::Version
125
+ version: 1.0.21
91
126
  - !ruby/object:Gem::Dependency
92
127
  name: rdoc
93
- requirement: &75545420 !ruby/object:Gem::Requirement
128
+ requirement: !ruby/object:Gem::Requirement
94
129
  none: false
95
130
  requirements:
96
131
  - - ~>
@@ -98,7 +133,12 @@ dependencies:
98
133
  version: '3.12'
99
134
  type: :development
100
135
  prerelease: false
101
- version_requirements: *75545420
136
+ version_requirements: !ruby/object:Gem::Requirement
137
+ none: false
138
+ requirements:
139
+ - - ~>
140
+ - !ruby/object:Gem::Version
141
+ version: '3.12'
102
142
  description: This biogem is built around Krona, a flashy way of representing hierarchical
103
143
  data.
104
144
  email: donttrustben near gmail.com
@@ -119,6 +159,7 @@ files:
119
159
  - lib/bio-krona.rb
120
160
  - lib/bio-krona/krona.rb
121
161
  - spec/bio-krona_spec.rb
162
+ - spec/bio-krona_wrapper_spec.rb
122
163
  - spec/data/krona/input.txt
123
164
  - spec/data/krona/input.txt.krona
124
165
  - spec/spec_helper.rb
@@ -137,7 +178,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
137
178
  version: '0'
138
179
  segments:
139
180
  - 0
140
- hash: 415100237
181
+ hash: -576254847
141
182
  required_rubygems_version: !ruby/object:Gem::Requirement
142
183
  none: false
143
184
  requirements:
@@ -146,7 +187,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
146
187
  version: '0'
147
188
  requirements: []
148
189
  rubyforge_project:
149
- rubygems_version: 1.8.17
190
+ rubygems_version: 1.8.25
150
191
  signing_key:
151
192
  specification_version: 3
152
193
  summary: This biogem is built around Krona, a flashy way of representing hierarchical