bio-fastqc 0.1.0 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
[![Build Status](https://secure.travis-ci.org/inutano/bioruby-fastqc.png)](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
|