bio-fastqc 0.1.0 → 0.2.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.
- checksums.yaml +4 -4
- data/.rspec +2 -0
- data/Gemfile +13 -8
- data/README.md +14 -8
- data/Rakefile +7 -11
- data/VERSION +1 -1
- data/bin/fastqc-util +3 -0
- data/lib/bio-fastqc.rb +5 -3
- data/lib/bio/fastqc.rb +4 -0
- data/lib/bio/fastqc/cli.rb +19 -0
- data/lib/bio/fastqc/data.rb +36 -0
- data/lib/bio/fastqc/parser.rb +232 -0
- data/spec/bio-fastqc_spec.rb +19 -0
- data/spec/example_fastqc.zip +0 -0
- data/spec/spec_helper.rb +2 -0
- metadata +85 -30
- data/lib/bio-fastqc/fastqc.rb +0 -3
- data/test/helper.rb +0 -34
- data/test/test_bio-fastqc.rb +0 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: eadb40fda6d28b9a545f14241ba2faec3b3a6125
|
4
|
+
data.tar.gz: 22920fae6a3f69315e7ef1d497816b00efb2518f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 37fb1d7b6e7124ff9c3678ca01402d9cb68422b5630bb55fd15df4e57c3697acac118e53e5d7b4a753487be693fcfd53c67e62f9d5442a2a0b350ddf1719a670
|
7
|
+
data.tar.gz: 71ecd9ac350ef2aecdd8048de2f76faeb5371b0c468f781eb71f934ae5a2cd1bbecb8a4a66db8a24c0d1a022bcc74aa06291c5795f651ba6b179b0dc6fda8d7c
|
data/.rspec
ADDED
data/Gemfile
CHANGED
@@ -3,16 +3,21 @@ source "http://rubygems.org"
|
|
3
3
|
# Example:
|
4
4
|
# gem "activesupport", ">= 2.3.5"
|
5
5
|
|
6
|
-
gem 'rubyzip',
|
7
|
-
gem 'thor', "
|
6
|
+
gem 'rubyzip', '~> 1.1', '>= 1.1.0'
|
7
|
+
gem 'thor', "~> 0.19.1"
|
8
8
|
|
9
9
|
# Add dependencies to develop your gem here.
|
10
10
|
# Include everything needed to run rake, tests, features, etc.
|
11
11
|
group :development do
|
12
|
-
gem
|
13
|
-
gem
|
14
|
-
gem
|
15
|
-
gem
|
16
|
-
gem
|
17
|
-
|
12
|
+
gem 'bundler', '~> 1.10'
|
13
|
+
gem 'rake', '~> 10.0'
|
14
|
+
gem 'rspec', '~> 3.3'
|
15
|
+
gem 'jeweler', '~> 2.0'
|
16
|
+
gem 'rdoc', '~> 3.12'
|
17
|
+
|
18
|
+
gem 'shoulda', '~> 3.5'
|
19
|
+
gem 'simplecov', '~> 0.10'
|
20
|
+
|
21
|
+
gem 'pry', '~> 0.10'
|
22
|
+
gem 'bio-fastqc'
|
18
23
|
end
|
data/README.md
CHANGED
@@ -2,9 +2,7 @@
|
|
2
2
|
|
3
3
|
[](http://travis-ci.org/inutano/bioruby-fastqc)
|
4
4
|
|
5
|
-
|
6
|
-
|
7
|
-
Note: this software is under active development!
|
5
|
+
A ruby parser for [FastQC](http://www.bioinformatics.babraham.ac.uk/projects/fastqc/) data.
|
8
6
|
|
9
7
|
## Installation
|
10
8
|
|
@@ -16,11 +14,20 @@ gem install bio-fastqc
|
|
16
14
|
|
17
15
|
```ruby
|
18
16
|
require 'bio-fastqc'
|
17
|
+
|
18
|
+
# extract data from zipfile
|
19
|
+
zip_file = "/path/to/data_fastqc.zip"
|
20
|
+
data = Bio::FastQC::Data.read(zip_file)
|
21
|
+
parser = Bio::FastQC::Parser.new(data)
|
22
|
+
parser.summary
|
23
|
+
```
|
24
|
+
|
25
|
+
Parse FastQC data as json format by command line tool:
|
26
|
+
|
27
|
+
```sh
|
28
|
+
$ fastqc-util parse /path/to/data_fastqc.zip
|
19
29
|
```
|
20
30
|
|
21
|
-
The API doc is online. For more code examples see the test files in
|
22
|
-
the source tree.
|
23
|
-
|
24
31
|
## Project home page
|
25
32
|
|
26
33
|
Information on the source tree, documentation, examples, issues and
|
@@ -33,7 +40,7 @@ The BioRuby community is on IRC server: irc.freenode.org, channel: #bioruby.
|
|
33
40
|
## Cite
|
34
41
|
|
35
42
|
If you use this software, please cite one of
|
36
|
-
|
43
|
+
|
37
44
|
* [BioRuby: bioinformatics software for the Ruby programming language](http://dx.doi.org/10.1093/bioinformatics/btq475)
|
38
45
|
* [Biogem: an effective tool-based approach for scaling up open source software development in bioinformatics](http://dx.doi.org/10.1093/bioinformatics/bts080)
|
39
46
|
|
@@ -44,4 +51,3 @@ This Biogem is published at (http://biogems.info/index.html#bio-fastqc)
|
|
44
51
|
## Copyright
|
45
52
|
|
46
53
|
Copyright (c) 2015 Tazro Inutano Ohta. See LICENSE.txt for further details.
|
47
|
-
|
data/Rakefile
CHANGED
@@ -2,6 +2,11 @@
|
|
2
2
|
|
3
3
|
require 'rubygems'
|
4
4
|
require 'bundler'
|
5
|
+
require 'rake'
|
6
|
+
require 'jeweler'
|
7
|
+
require 'rspec/core/rake_task'
|
8
|
+
require 'rdoc/task'
|
9
|
+
|
5
10
|
begin
|
6
11
|
Bundler.setup(:default, :development)
|
7
12
|
rescue Bundler::BundlerError => e
|
@@ -9,9 +14,7 @@ rescue Bundler::BundlerError => e
|
|
9
14
|
$stderr.puts "Run `bundle install` to install missing gems"
|
10
15
|
exit e.status_code
|
11
16
|
end
|
12
|
-
require 'rake'
|
13
17
|
|
14
|
-
require 'jeweler'
|
15
18
|
Jeweler::Tasks.new do |gem|
|
16
19
|
# gem is a Gem::Specification... see http://guides.rubygems.org/specification-reference/ for more options
|
17
20
|
gem.name = "bio-fastqc"
|
@@ -25,12 +28,8 @@ Jeweler::Tasks.new do |gem|
|
|
25
28
|
end
|
26
29
|
Jeweler::RubygemsDotOrgTasks.new
|
27
30
|
|
28
|
-
|
29
|
-
|
30
|
-
test.libs << 'lib' << 'test'
|
31
|
-
test.pattern = 'test/**/test_*.rb'
|
32
|
-
test.verbose = true
|
33
|
-
end
|
31
|
+
RSpec::Core::RakeTask.new(:spec)
|
32
|
+
task :default => :spec
|
34
33
|
|
35
34
|
desc "Code coverage detail"
|
36
35
|
task :simplecov do
|
@@ -38,9 +37,6 @@ task :simplecov do
|
|
38
37
|
Rake::Task['test'].execute
|
39
38
|
end
|
40
39
|
|
41
|
-
task :default => :test
|
42
|
-
|
43
|
-
require 'rdoc/task'
|
44
40
|
Rake::RDocTask.new do |rdoc|
|
45
41
|
version = File.exist?('VERSION') ? File.read('VERSION') : ""
|
46
42
|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.2.0
|
data/bin/fastqc-util
ADDED
data/lib/bio-fastqc.rb
CHANGED
@@ -2,11 +2,13 @@
|
|
2
2
|
# bioruby directory tree.
|
3
3
|
#
|
4
4
|
# For example, say you have a plugin named bio-plugin, the only uncommented
|
5
|
-
# line in this file would be
|
5
|
+
# line in this file would be
|
6
6
|
#
|
7
7
|
# require 'bio/bio-plugin/plugin'
|
8
8
|
#
|
9
9
|
# In this file only require other files. Avoid other source code.
|
10
10
|
|
11
|
-
require 'bio
|
12
|
-
|
11
|
+
require 'bio/fastqc/data'
|
12
|
+
require 'bio/fastqc/cli'
|
13
|
+
require 'bio/fastqc/parser'
|
14
|
+
require 'bio/fastqc'
|
data/lib/bio/fastqc.rb
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
|
3
|
+
require 'thor'
|
4
|
+
require 'json'
|
5
|
+
|
6
|
+
module Bio
|
7
|
+
module FastQC
|
8
|
+
class CLI < Thor
|
9
|
+
desc "parse [filename]...", "parse fastqc data in fastqc directory or zipfile, output in json format"
|
10
|
+
def parse(*files)
|
11
|
+
files.each do |file|
|
12
|
+
puts JSON.dump(Parser.new(Data.read(file)).summary)
|
13
|
+
end
|
14
|
+
rescue
|
15
|
+
puts "Wrong input file type: specify fastqc result data, directory or zipfile"
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
|
3
|
+
require 'zip'
|
4
|
+
|
5
|
+
module Bio
|
6
|
+
module FastQC
|
7
|
+
class Data
|
8
|
+
class << self
|
9
|
+
def read(file)
|
10
|
+
read_zipfile(file)
|
11
|
+
rescue Zip::Error
|
12
|
+
read_flatfile(file)
|
13
|
+
rescue Errno::EISDIR
|
14
|
+
read_dir(file)
|
15
|
+
end
|
16
|
+
|
17
|
+
def read_zipfile(file)
|
18
|
+
Zip::File.open(file) do |zipfile|
|
19
|
+
zipfile.glob('*/fastqc_data.txt').first.get_input_stream.read
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def read_flatfile(file)
|
24
|
+
open(file).read
|
25
|
+
end
|
26
|
+
|
27
|
+
def read_dir(file)
|
28
|
+
open(File.join(file, "fastqc_data.txt")).read
|
29
|
+
rescue Errno::ENOENT
|
30
|
+
puts "FastQC data file fastqc_data.txt not found"
|
31
|
+
exit
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,232 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
|
3
|
+
module Bio
|
4
|
+
module FastQC
|
5
|
+
class Parser
|
6
|
+
def initialize(fastqc_data_txt)
|
7
|
+
@data = fastqc_data_txt
|
8
|
+
@object = parse(@data)
|
9
|
+
@base = self.basic_statistics
|
10
|
+
end
|
11
|
+
|
12
|
+
def parse(data)
|
13
|
+
modules = data.split(">>END_MODULE\n")
|
14
|
+
modules.map do |node|
|
15
|
+
lines = node.split("\n")
|
16
|
+
rm_header = lines.map do |line|
|
17
|
+
if line !~ /^\#/ || line =~ /^#Total Duplicate Percentage/
|
18
|
+
line.split("\t")
|
19
|
+
end
|
20
|
+
end
|
21
|
+
rm_header.compact
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def basic_statistics
|
26
|
+
Hash[*@object.select{|a| a.first.first == ">>Basic Statistics" }.flatten]
|
27
|
+
end
|
28
|
+
|
29
|
+
def filename
|
30
|
+
@base["Filename"]
|
31
|
+
end
|
32
|
+
|
33
|
+
def file_type
|
34
|
+
@base["File type"]
|
35
|
+
end
|
36
|
+
|
37
|
+
def encoding
|
38
|
+
@base["Encoding"]
|
39
|
+
end
|
40
|
+
|
41
|
+
def total_sequences
|
42
|
+
@base["Total Sequences"].to_i
|
43
|
+
end
|
44
|
+
|
45
|
+
def filtered_sequences
|
46
|
+
@base["Filtered Sequences"].to_i
|
47
|
+
end
|
48
|
+
|
49
|
+
def sequence_length
|
50
|
+
@base["Sequence length"]
|
51
|
+
end
|
52
|
+
|
53
|
+
def min_length
|
54
|
+
l = @base["Sequence length"]
|
55
|
+
if l =~ /\d-\d/
|
56
|
+
l.sub(/-\d+$/,"").to_i
|
57
|
+
else
|
58
|
+
l.to_i
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
def max_length
|
63
|
+
l = @base["Sequence length"]
|
64
|
+
if l =~ /\d-\d/
|
65
|
+
l.sub(/^\d+-/,"").to_i
|
66
|
+
else
|
67
|
+
l.to_i
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
def percent_gc
|
72
|
+
@base["%GC"].to_i
|
73
|
+
end
|
74
|
+
|
75
|
+
def per_base_sequence_quality
|
76
|
+
node = @object.select{|a| a.first.first == ">>Per base sequence quality" }
|
77
|
+
node.first.select{|n| n.first != ">>Per base sequence quality" }
|
78
|
+
end
|
79
|
+
|
80
|
+
## Custom module: overall mean base call quality indicator
|
81
|
+
def overall_mean_quality_score
|
82
|
+
per_base = self.per_base_sequence_quality
|
83
|
+
v = per_base.map{|c| (10**(c[1].to_f/-10)).to_f }
|
84
|
+
-10 * Math.log10(v.reduce(:+) / v.size)
|
85
|
+
end
|
86
|
+
|
87
|
+
## Custom module: overall median base call quality indicator
|
88
|
+
def overall_median_quality_score
|
89
|
+
per_base = self.per_base_sequence_quality
|
90
|
+
v = per_base.map{|c| (10**(c[2].to_f/-10)).to_f }
|
91
|
+
-10 * Math.log10(v.reduce(:+) / v.size)
|
92
|
+
end
|
93
|
+
|
94
|
+
def per_tile_sequence_quality
|
95
|
+
node = @object.select{|a| a.first.first == ">>Per tile sequence quality" }
|
96
|
+
node.first.select{|n| n.first != ">>Per tile sequence quality" }
|
97
|
+
rescue
|
98
|
+
[]
|
99
|
+
end
|
100
|
+
|
101
|
+
def per_sequence_quality_scores
|
102
|
+
node = @object.select{|a| a.first.first == ">>Per sequence quality scores" }
|
103
|
+
node.first.select{|n| n.first != ">>Per sequence quality scores" }
|
104
|
+
end
|
105
|
+
|
106
|
+
def per_base_sequence_content
|
107
|
+
node = @object.select{|a| a.first.first == ">>Per base sequence content" }
|
108
|
+
node.first.select{|n| n.first != ">>Per base sequence content" }
|
109
|
+
end
|
110
|
+
|
111
|
+
def per_sequence_gc_content
|
112
|
+
node = @object.select{|a| a.first.first == ">>Per sequence GC content" }
|
113
|
+
node.first.select{|n| n.first != ">>Per sequence GC content" }
|
114
|
+
end
|
115
|
+
|
116
|
+
def per_sequence_gc_content
|
117
|
+
node = @object.select{|a| a.first.first == ">>Per sequence GC content" }
|
118
|
+
node.first.select{|n| n.first != ">>Per sequence GC content" }
|
119
|
+
end
|
120
|
+
|
121
|
+
def per_base_n_content
|
122
|
+
node = @object.select{|a| a.first.first == ">>Per base N content" }
|
123
|
+
node.first.select{|n| n.first != ">>Per base N content" }
|
124
|
+
end
|
125
|
+
|
126
|
+
## Custom module: overall N content
|
127
|
+
def overall_n_content
|
128
|
+
per_base = self.per_base_n_content
|
129
|
+
v = per_base.map{|c| c[1].to_f }
|
130
|
+
v.reduce(:+) / v.size
|
131
|
+
end
|
132
|
+
|
133
|
+
def sequence_length_distribution
|
134
|
+
node = @object.select{|a| a.first.first == ">>Sequence Length Distribution" }
|
135
|
+
node.first.select{|n| n.first != ">>Sequence Length Distribution" }
|
136
|
+
end
|
137
|
+
|
138
|
+
## Custom module: mean sequence length calculated from distribution
|
139
|
+
def mean_sequence_length
|
140
|
+
distribution = self.sequence_length_distribution
|
141
|
+
sum = distribution.map do |length_count|
|
142
|
+
length = length_count[0]
|
143
|
+
count = length_count[1].to_f
|
144
|
+
if length =~ /\d-\d/
|
145
|
+
f = length.sub(/-\d+$/,"").to_i
|
146
|
+
b = length.sub(/^\d+-/,"").to_i
|
147
|
+
mean = (f + b) / 2
|
148
|
+
mean * count
|
149
|
+
else
|
150
|
+
length.to_i * count
|
151
|
+
end
|
152
|
+
end
|
153
|
+
sum.reduce(:+) / self.total_sequences
|
154
|
+
end
|
155
|
+
|
156
|
+
## Custom module: median sequence length calculated from distribution
|
157
|
+
def median_sequence_length
|
158
|
+
distribution = self.sequence_length_distribution
|
159
|
+
array = distribution.map do |length_count|
|
160
|
+
length = length_count[0]
|
161
|
+
count = length_count[1].to_i
|
162
|
+
if length =~ /\d-\d/
|
163
|
+
f = length.sub(/-\d+$/,"").to_i
|
164
|
+
b = length.sub(/^\d+-/,"").to_i
|
165
|
+
mean = (f + b) / 2
|
166
|
+
[mean] * count
|
167
|
+
else
|
168
|
+
[length.to_i] * count
|
169
|
+
end
|
170
|
+
end
|
171
|
+
sorted = array.flatten.sort
|
172
|
+
quot = sorted.size / 2
|
173
|
+
if !sorted.size.even?
|
174
|
+
sorted[quot]
|
175
|
+
else
|
176
|
+
f = sorted[quot]
|
177
|
+
b = sorted[quot - 1]
|
178
|
+
(f + b) / 2
|
179
|
+
end
|
180
|
+
end
|
181
|
+
|
182
|
+
def sequence_duplication_levels
|
183
|
+
node = @object.select{|a| a.first.first == ">>Sequence Duplication Levels" }
|
184
|
+
node.first.select{|n| n.first != ">>Sequence Duplication Levels" && n.first != "\#Total Duplicate Percentage" }
|
185
|
+
end
|
186
|
+
|
187
|
+
def total_duplicate_percentage
|
188
|
+
node = @object.select{|a| a.first.first == ">>Sequence Duplication Levels" }
|
189
|
+
node.first.select{|n| n.first == "\#Total Duplicate Percentage" }.flatten[1].to_f
|
190
|
+
end
|
191
|
+
|
192
|
+
def overrepresented_sequences
|
193
|
+
node = @object.select{|a| a.first.first == ">>Overrepresented sequences" }
|
194
|
+
node.first.select{|n| n.first != ">>Overrepresented sequences" }
|
195
|
+
end
|
196
|
+
|
197
|
+
def kmer_content
|
198
|
+
node = @object.select{|a| a.first.first == ">>Kmer Content" }
|
199
|
+
node.first.select{|n| n.first != ">>Kmer Content" }
|
200
|
+
end
|
201
|
+
|
202
|
+
def summary
|
203
|
+
{
|
204
|
+
filename: self.filename,
|
205
|
+
file_type: self.file_type,
|
206
|
+
encoding: self.encoding,
|
207
|
+
total_sequences: self.total_sequences,
|
208
|
+
filtered_sequences: self.filtered_sequences,
|
209
|
+
sequence_length: self.sequence_length,
|
210
|
+
percent_gc: self.percent_gc,
|
211
|
+
per_base_sequence_quality: self.per_base_sequence_quality,
|
212
|
+
per_tile_sequence_quality: self.per_tile_sequence_quality,
|
213
|
+
per_sequnce_quality_scores: self.per_sequence_quality_scores,
|
214
|
+
per_base_sequence_content: self.per_base_sequence_content,
|
215
|
+
per_sequence_gc_content: self.per_sequence_gc_content,
|
216
|
+
per_base_n_content: self.per_base_n_content,
|
217
|
+
sequence_length_distribution: self.sequence_length_distribution,
|
218
|
+
total_duplicate_percentage: self.total_duplicate_percentage, sequence_duplication_levels: self.sequence_duplication_levels,
|
219
|
+
overrepresented_sequences: self.overrepresented_sequences,
|
220
|
+
kmer_content: self.kmer_content,
|
221
|
+
min_length: self.min_length,
|
222
|
+
max_length: self.max_length,
|
223
|
+
overall_mean_quality_score: self.overall_mean_quality_score,
|
224
|
+
overall_median_quality_score: self.overall_median_quality_score,
|
225
|
+
overall_n_content: self.overall_n_content,
|
226
|
+
mean_sequence_length: self.mean_sequence_length,
|
227
|
+
median_sequence_length: self.median_sequence_length,
|
228
|
+
}
|
229
|
+
end
|
230
|
+
end
|
231
|
+
end
|
232
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Bio::FastQC do
|
4
|
+
context "with an example data" do
|
5
|
+
before do
|
6
|
+
zipfile = File.join(__dir__, "example_fastqc.zip")
|
7
|
+
@data = Bio::FastQC::Data.read(zipfile)
|
8
|
+
end
|
9
|
+
|
10
|
+
it 'extracts data from zip file' do
|
11
|
+
expect(@data).not_to be_empty
|
12
|
+
end
|
13
|
+
|
14
|
+
it 'parses a fastqc data and returns json' do
|
15
|
+
p = Bio::FastQC::Parser.new(@data)
|
16
|
+
expect(p.summary).not_to be_empty
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
Binary file
|
data/spec/spec_helper.rb
ADDED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bio-fastqc
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tazro Inutano Ohta
|
@@ -17,6 +17,9 @@ dependencies:
|
|
17
17
|
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: 1.1.0
|
20
|
+
- - "~>"
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: '1.1'
|
20
23
|
type: :runtime
|
21
24
|
prerelease: false
|
22
25
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -24,34 +27,79 @@ dependencies:
|
|
24
27
|
- - ">="
|
25
28
|
- !ruby/object:Gem::Version
|
26
29
|
version: 1.1.0
|
30
|
+
- - "~>"
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '1.1'
|
27
33
|
- !ruby/object:Gem::Dependency
|
28
34
|
name: thor
|
29
35
|
requirement: !ruby/object:Gem::Requirement
|
30
36
|
requirements:
|
31
|
-
- - "
|
37
|
+
- - "~>"
|
32
38
|
- !ruby/object:Gem::Version
|
33
39
|
version: 0.19.1
|
34
40
|
type: :runtime
|
35
41
|
prerelease: false
|
36
42
|
version_requirements: !ruby/object:Gem::Requirement
|
37
43
|
requirements:
|
38
|
-
- - "
|
44
|
+
- - "~>"
|
39
45
|
- !ruby/object:Gem::Version
|
40
46
|
version: 0.19.1
|
41
47
|
- !ruby/object:Gem::Dependency
|
42
|
-
name:
|
48
|
+
name: bundler
|
43
49
|
requirement: !ruby/object:Gem::Requirement
|
44
50
|
requirements:
|
45
|
-
- - "
|
51
|
+
- - "~>"
|
46
52
|
- !ruby/object:Gem::Version
|
47
|
-
version: '
|
53
|
+
version: '1.10'
|
48
54
|
type: :development
|
49
55
|
prerelease: false
|
50
56
|
version_requirements: !ruby/object:Gem::Requirement
|
51
57
|
requirements:
|
52
|
-
- - "
|
58
|
+
- - "~>"
|
53
59
|
- !ruby/object:Gem::Version
|
54
|
-
version: '
|
60
|
+
version: '1.10'
|
61
|
+
- !ruby/object:Gem::Dependency
|
62
|
+
name: rake
|
63
|
+
requirement: !ruby/object:Gem::Requirement
|
64
|
+
requirements:
|
65
|
+
- - "~>"
|
66
|
+
- !ruby/object:Gem::Version
|
67
|
+
version: '10.0'
|
68
|
+
type: :development
|
69
|
+
prerelease: false
|
70
|
+
version_requirements: !ruby/object:Gem::Requirement
|
71
|
+
requirements:
|
72
|
+
- - "~>"
|
73
|
+
- !ruby/object:Gem::Version
|
74
|
+
version: '10.0'
|
75
|
+
- !ruby/object:Gem::Dependency
|
76
|
+
name: rspec
|
77
|
+
requirement: !ruby/object:Gem::Requirement
|
78
|
+
requirements:
|
79
|
+
- - "~>"
|
80
|
+
- !ruby/object:Gem::Version
|
81
|
+
version: '3.3'
|
82
|
+
type: :development
|
83
|
+
prerelease: false
|
84
|
+
version_requirements: !ruby/object:Gem::Requirement
|
85
|
+
requirements:
|
86
|
+
- - "~>"
|
87
|
+
- !ruby/object:Gem::Version
|
88
|
+
version: '3.3'
|
89
|
+
- !ruby/object:Gem::Dependency
|
90
|
+
name: jeweler
|
91
|
+
requirement: !ruby/object:Gem::Requirement
|
92
|
+
requirements:
|
93
|
+
- - "~>"
|
94
|
+
- !ruby/object:Gem::Version
|
95
|
+
version: '2.0'
|
96
|
+
type: :development
|
97
|
+
prerelease: false
|
98
|
+
version_requirements: !ruby/object:Gem::Requirement
|
99
|
+
requirements:
|
100
|
+
- - "~>"
|
101
|
+
- !ruby/object:Gem::Version
|
102
|
+
version: '2.0'
|
55
103
|
- !ruby/object:Gem::Dependency
|
56
104
|
name: rdoc
|
57
105
|
requirement: !ruby/object:Gem::Requirement
|
@@ -67,65 +115,66 @@ dependencies:
|
|
67
115
|
- !ruby/object:Gem::Version
|
68
116
|
version: '3.12'
|
69
117
|
- !ruby/object:Gem::Dependency
|
70
|
-
name:
|
118
|
+
name: shoulda
|
71
119
|
requirement: !ruby/object:Gem::Requirement
|
72
120
|
requirements:
|
73
|
-
- - "
|
121
|
+
- - "~>"
|
74
122
|
- !ruby/object:Gem::Version
|
75
|
-
version: '
|
123
|
+
version: '3.5'
|
76
124
|
type: :development
|
77
125
|
prerelease: false
|
78
126
|
version_requirements: !ruby/object:Gem::Requirement
|
79
127
|
requirements:
|
80
|
-
- - "
|
128
|
+
- - "~>"
|
81
129
|
- !ruby/object:Gem::Version
|
82
|
-
version: '
|
130
|
+
version: '3.5'
|
83
131
|
- !ruby/object:Gem::Dependency
|
84
|
-
name:
|
132
|
+
name: simplecov
|
85
133
|
requirement: !ruby/object:Gem::Requirement
|
86
134
|
requirements:
|
87
|
-
- - "
|
135
|
+
- - "~>"
|
88
136
|
- !ruby/object:Gem::Version
|
89
|
-
version: '0'
|
137
|
+
version: '0.10'
|
90
138
|
type: :development
|
91
139
|
prerelease: false
|
92
140
|
version_requirements: !ruby/object:Gem::Requirement
|
93
141
|
requirements:
|
94
|
-
- - "
|
142
|
+
- - "~>"
|
95
143
|
- !ruby/object:Gem::Version
|
96
|
-
version: '0'
|
144
|
+
version: '0.10'
|
97
145
|
- !ruby/object:Gem::Dependency
|
98
|
-
name:
|
146
|
+
name: pry
|
99
147
|
requirement: !ruby/object:Gem::Requirement
|
100
148
|
requirements:
|
101
|
-
- - "
|
149
|
+
- - "~>"
|
102
150
|
- !ruby/object:Gem::Version
|
103
|
-
version:
|
151
|
+
version: '0.10'
|
104
152
|
type: :development
|
105
153
|
prerelease: false
|
106
154
|
version_requirements: !ruby/object:Gem::Requirement
|
107
155
|
requirements:
|
108
|
-
- - "
|
156
|
+
- - "~>"
|
109
157
|
- !ruby/object:Gem::Version
|
110
|
-
version:
|
158
|
+
version: '0.10'
|
111
159
|
- !ruby/object:Gem::Dependency
|
112
|
-
name: bio
|
160
|
+
name: bio-fastqc
|
113
161
|
requirement: !ruby/object:Gem::Requirement
|
114
162
|
requirements:
|
115
163
|
- - ">="
|
116
164
|
- !ruby/object:Gem::Version
|
117
|
-
version:
|
165
|
+
version: '0'
|
118
166
|
type: :development
|
119
167
|
prerelease: false
|
120
168
|
version_requirements: !ruby/object:Gem::Requirement
|
121
169
|
requirements:
|
122
170
|
- - ">="
|
123
171
|
- !ruby/object:Gem::Version
|
124
|
-
version:
|
172
|
+
version: '0'
|
125
173
|
description: ruby parser for FastQC, a quality control software for high-throughput
|
126
174
|
sequencing data.
|
127
175
|
email: inutano@gmail.com
|
128
|
-
executables:
|
176
|
+
executables:
|
177
|
+
- fastqc-util
|
129
178
|
extensions: []
|
130
179
|
extra_rdoc_files:
|
131
180
|
- LICENSE.txt
|
@@ -133,6 +182,7 @@ extra_rdoc_files:
|
|
133
182
|
- README.rdoc
|
134
183
|
files:
|
135
184
|
- ".document"
|
185
|
+
- ".rspec"
|
136
186
|
- ".travis.yml"
|
137
187
|
- Gemfile
|
138
188
|
- LICENSE.txt
|
@@ -140,10 +190,15 @@ files:
|
|
140
190
|
- README.rdoc
|
141
191
|
- Rakefile
|
142
192
|
- VERSION
|
193
|
+
- bin/fastqc-util
|
143
194
|
- lib/bio-fastqc.rb
|
144
|
-
- lib/bio
|
145
|
-
-
|
146
|
-
-
|
195
|
+
- lib/bio/fastqc.rb
|
196
|
+
- lib/bio/fastqc/cli.rb
|
197
|
+
- lib/bio/fastqc/data.rb
|
198
|
+
- lib/bio/fastqc/parser.rb
|
199
|
+
- spec/bio-fastqc_spec.rb
|
200
|
+
- spec/example_fastqc.zip
|
201
|
+
- spec/spec_helper.rb
|
147
202
|
homepage: http://github.com/inutano/bioruby-fastqc
|
148
203
|
licenses:
|
149
204
|
- MIT
|
data/lib/bio-fastqc/fastqc.rb
DELETED
data/test/helper.rb
DELETED
@@ -1,34 +0,0 @@
|
|
1
|
-
require 'simplecov'
|
2
|
-
|
3
|
-
module SimpleCov::Configuration
|
4
|
-
def clean_filters
|
5
|
-
@filters = []
|
6
|
-
end
|
7
|
-
end
|
8
|
-
|
9
|
-
SimpleCov.configure do
|
10
|
-
clean_filters
|
11
|
-
load_adapter 'test_frameworks'
|
12
|
-
end
|
13
|
-
|
14
|
-
ENV["COVERAGE"] && SimpleCov.start do
|
15
|
-
add_filter "/.rvm/"
|
16
|
-
end
|
17
|
-
require 'rubygems'
|
18
|
-
require 'bundler'
|
19
|
-
begin
|
20
|
-
Bundler.setup(:default, :development)
|
21
|
-
rescue Bundler::BundlerError => e
|
22
|
-
$stderr.puts e.message
|
23
|
-
$stderr.puts "Run `bundle install` to install missing gems"
|
24
|
-
exit e.status_code
|
25
|
-
end
|
26
|
-
require 'test/unit'
|
27
|
-
require 'shoulda'
|
28
|
-
|
29
|
-
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
30
|
-
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
31
|
-
require 'bio-fastqc'
|
32
|
-
|
33
|
-
class Test::Unit::TestCase
|
34
|
-
end
|