bio-krona 0.0.1 → 0.1.0
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.
- data/.travis.yml +1 -1
- data/Rakefile +3 -4
- data/VERSION +1 -1
- data/lib/bio-krona/krona.rb +12 -7
- data/spec/bio-krona_spec.rb +0 -58
- data/spec/bio-krona_wrapper_spec.rb +71 -0
- metadata +61 -20
data/.travis.yml
CHANGED
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
|
-
|
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
|
+
0.1.0
|
data/lib/bio-krona/krona.rb
CHANGED
@@ -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
|
data/spec/bio-krona_spec.rb
CHANGED
@@ -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
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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.
|
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
|