parse_fasta 1.5.2 → 1.6.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,15 +1,7 @@
1
1
  ---
2
- !binary "U0hBMQ==":
3
- metadata.gz: !binary |-
4
- ZjMxNWQyOTFiMjkwYTM4YjlkMjZjYzU0ZTgyMDkwNTUzNTc3MmNlZQ==
5
- data.tar.gz: !binary |-
6
- MTI3NDc4ODFiZjcwOGQ0NTRkMjM2NDE5NzI5YjgwOTczNTY3Nzg4NQ==
2
+ SHA1:
3
+ metadata.gz: 2f6ccbf7f40297b5bc4604e15c7ef47ffb573d44
4
+ data.tar.gz: f95cffcff55c9789eabb563095319154ca21ec99
7
5
  SHA512:
8
- metadata.gz: !binary |-
9
- MjExMDMyN2JhMjhlYmFjZTcyODk5YjAzNWJkMDQ1ZWJkNTY1NTAyZjU5OTBm
10
- NzAwMWUwOTNiYjAyMDU2Y2UyOTIzMjIyZjQ1YzIzM2Y5ZmM1M2JhN2JhNzdi
11
- MzBjYzYwMzNjYjIzMGU2MWZiOTlhYzNiNTVkY2Y1OWQ4YjU1OTY=
12
- data.tar.gz: !binary |-
13
- N2VkZWE3OTk3NTg2NDM4YmFiOTdlMjgzZjAzODVmZGE4Y2Q2MzJjZjY2MzU4
14
- YTA2OWFiZGU4YjllNTVmYTJlZWMwYjE2Y2YxMzc3ODNiYzgyODNkNGI2MmM4
15
- OTJhZTFhYWIyMDU1OWM1ZmU1N2IwZGE4ZTM3ZjY0MThlZDcyOWE=
6
+ metadata.gz: 1cdd0c880390a6666bafa57190eb37672188abfe64e24048277e759cdfd48eedca35c0e6a2251426bfe071aedc9c0bddb00b220ba140f87fdf1de1f8ae0b67b5
7
+ data.tar.gz: 92734f57cc2da98f1a705c5e60b568c67c47b152efd6a114e523c51fc982c55f1f8aa4edf6df6b143fc11a3a910ec0b448158f4010438a7b292c25bf0154fafa
data/.coveralls.yml ADDED
@@ -0,0 +1 @@
1
+ service_name: travis-ci
data/.travis.yml ADDED
@@ -0,0 +1,18 @@
1
+ language: ruby
2
+ cache: bundler
3
+
4
+ rvm:
5
+ - 1.9.3
6
+ - 2.0
7
+ - 2.1
8
+ - 2.2.0
9
+ - 2.2.2
10
+
11
+ script: 'bundle exec rake'
12
+
13
+ notifications:
14
+ email:
15
+ recipients:
16
+ - moorer@udel.edu
17
+ on_failure: change
18
+ on_success: never
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # parse_fasta #
2
2
 
3
- [![Gem Version](https://badge.fury.io/rb/parse_fasta.svg)](http://badge.fury.io/rb/parse_fasta)
3
+ [![Gem Version](https://badge.fury.io/rb/parse_fasta.svg)](http://badge.fury.io/rb/parse_fasta) [![Build Status](https://travis-ci.org/mooreryan/parse_fasta.svg?branch=master)](https://travis-ci.org/mooreryan/parse_fasta) [![Coverage Status](https://coveralls.io/repos/mooreryan/parse_fasta/badge.svg)](https://coveralls.io/r/mooreryan/parse_fasta)
4
4
 
5
5
  So you want to parse a fasta file...
6
6
 
@@ -20,17 +20,15 @@ Or install it yourself as:
20
20
 
21
21
  ## Overview ##
22
22
 
23
- I wanted a simple, fast way to parse fasta and fastq files so I
24
- wouldn't have to keep writing annoying boilerplate parsing code
25
- everytime I go to do something with a fasta or fastq file. I will
26
- probably add more, but likely only tasks that I find myself doing over
27
- and over.
23
+ Provides nice, programmatic access to fasta and fastq files, as well
24
+ as providing Sequence and Quality helper classes. It's more
25
+ lightweight than BioRuby. And more fun! ;)
28
26
 
29
27
  ## Documentation ##
30
28
 
31
29
  Checkout
32
- [parse_fasta docs](http://rubydoc.info/gems/parse_fasta/1.5.0/frames)
33
- to see the full documentation.
30
+ [parse_fasta docs](http://rubydoc.info/gems/parse_fasta/1.6.0/frames)
31
+ for the full api documentation.
34
32
 
35
33
  ## Usage ##
36
34
 
@@ -40,36 +38,51 @@ A little script to print header and length of each record.
40
38
 
41
39
  require 'parse_fasta'
42
40
 
43
- FastaFile.open(ARGV.first, 'r').each_record do |header, sequence|
41
+ FastaFile.open(ARGV[0]).each_record do |header, sequence|
44
42
  puts [header, sequence.length].join("\t")
45
43
  end
46
44
 
47
45
  And here, a script to calculate GC content:
48
46
 
49
- FastaFile.open(ARGV.first, 'r').each_record do |header, sequence|
47
+ FastaFile.open(ARGV[0]).each_record do |header, sequence|
50
48
  puts [header, sequence.gc].join("\t")
51
49
  end
52
50
 
53
51
  Now we can parse fastq files as well!
54
52
 
55
- FastqFile.open(ARGV.first, 'r').each_record do |head, seq, desc, qual|
56
- puts [header, seq, desc, qual.qual_scores.join(',')].join("\t")
53
+ FastqFile.open(ARGV[0]).each_record do |head, seq, desc, qual|
54
+ puts [header, qual.qual_scores.join(',')].join("\t")
55
+ end
56
+
57
+ What if you don't care if the input is a fastA or a fastQ? No problem!
58
+
59
+ SeqFile.open(ARGV[0]).each_record do |head, seq|
60
+ puts [header, seq].join "\t"
57
61
  end
58
62
 
59
63
  ## Versions ##
60
64
 
61
- ### 1.5.0 ###
65
+ ### 1.6 ###
66
+
67
+ Added `SeqFile` class, which accepts either fastA or fastQ files. It
68
+ uses FastaFile and FastqFile internally. You can use this class if you
69
+ want your scripts to accept either fastA or fastQ files.
70
+
71
+ If you need the description and quality string, you should use
72
+ FastqFile instead.
73
+
74
+ ### 1.5 ###
62
75
 
63
76
  Now accepts gzipped files. Huzzah!
64
77
 
65
- ### 1.4.0 ###
78
+ ### 1.4 ###
66
79
 
67
80
  Added methods:
68
81
 
69
82
  Sequence.base_counts
70
83
  Sequence.base_frequencies
71
84
 
72
- ### 1.3.0 ###
85
+ ### 1.3 ###
73
86
 
74
87
  Add additional functionality to `each_record` method.
75
88
 
@@ -108,7 +121,7 @@ Then info will contain the following arrays
108
121
  ['fruits', ['pineapple', 'pear', 'peach']],
109
122
  ['veggies', ['peppers', 'parsnip', 'peas']]
110
123
 
111
- ### 1.2.0 ###
124
+ ### 1.2 ###
112
125
 
113
126
  Added `mean_qual` method to the `Quality` class.
114
127
 
@@ -119,11 +132,11 @@ Dropped Ruby requirement to 1.9.3
119
132
  (Note, if you want to build the docs with yard and you're using
120
133
  Ruby 1.9.3, you may have to install the redcarpet gem.)
121
134
 
122
- ### 1.1.0 ###
135
+ ### 1.1 ###
123
136
 
124
137
  Added: Fastq and Quality classes
125
138
 
126
- ### 1.0.0 ###
139
+ ### 1.0 ###
127
140
 
128
141
  Added: Fasta and Sequence classes
129
142
 
@@ -135,16 +148,17 @@ Last version with File monkey patch.
135
148
 
136
149
  ## Benchmark ##
137
150
 
138
- Take these with a grain of salt since `BioRuby` is a big module
139
- module with lots of features and error checking, whereas `parse_fasta`
140
- is meant to be lightweight and easy to use for my own research.
151
+ Perhaps this isn't exactly fair since `BioRuby` is a big module with
152
+ lots of features and error checking, whereas `parse_fasta` is meant to
153
+ be lightweight and easy to use for my own research. Oh well ;)
141
154
 
142
155
  ### FastaFile#each_record ###
143
156
 
144
- Just for fun, I wanted to compare the execution time to that of
145
- BioRuby. I calculated sequence length for each fasta record with both
146
- the `each_record` method from this gem and using the `FastaFormat`
147
- class from BioRuby. You can see the test script in `benchmark.rb`.
157
+ You're probably wondering...How does it compare to BioRuby in some
158
+ super accurate benchmarking tests? Lucky for you, I calculated
159
+ sequence length for each fasta record with both the `each_record`
160
+ method from this gem and using the `FastaFormat` class from
161
+ BioRuby. You can see the test script in `benchmark.rb`.
148
162
 
149
163
  The test file contained 2,009,897 illumina reads and the file size
150
164
  was 1.1 gigabytes. Here are the results from Ruby's `Benchmark` class:
@@ -153,8 +167,7 @@ was 1.1 gigabytes. Here are the results from Ruby's `Benchmark` class:
153
167
  parse_fasta 64.530000 1.740000 66.270000 ( 67.081502)
154
168
  bioruby 116.250000 2.260000 118.510000 (120.223710)
155
169
 
156
- I just wanted a nice, clean way to parse fasta files, but being nearly
157
- twice as fasta as BioRuby doesn't hurt either!
170
+ Hot dog! It's faster :)
158
171
 
159
172
  ### FastqFile#each_record ###
160
173
 
@@ -167,14 +180,11 @@ file containing 4,000,000 illumina reads.
167
180
 
168
181
  ### Sequence#gc ###
169
182
 
170
- I played around with a few different implementations for the `#gc`
171
- method and found this one to be the fastest.
172
-
173
- The test is done on random strings mating `/[AaCcTtGgUu]/`. `this_gc`
183
+ The test is done on random strings matcing `/[AaCcTtGgUu]/`. `this_gc`
174
184
  is `Sequence.new(str).gc`, and `bioruby_gc` is
175
185
  `Bio::Sequence::NA.new(str).gc_content`.
176
186
 
177
- To see how the methods scale, the test 1 string was 2,000,000 bases,
187
+ To see how the methods scales, the test 1 string was 2,000,000 bases,
178
188
  test 2 was 4,000,000 and test 3 was 8,000,000 bases.
179
189
 
180
190
  user system total real
@@ -189,7 +199,21 @@ test 2 was 4,000,000 and test 3 was 8,000,000 bases.
189
199
 
190
200
  Nice!
191
201
 
202
+ Troll: "But Ryan, when will you find the GC of an 8,000,000 base
203
+ sequence?"
204
+
205
+ Me: "Step off, troll!"
206
+
207
+ ## Test suite & docs ##
208
+
209
+ For a good time, you could clone this repo and run the test suite with
210
+ rspec! Or if you just don't trust that it works like it should. The
211
+ specs probably need a little clean up...so fork it and clean it up ;)
212
+
213
+ Same with the docs. Clone the repo and build them yourself with `yard`
214
+ if you are in need of some excitement.
215
+
192
216
  ## Notes ##
193
217
 
194
- Currently in doesn't check whether your file is actually a fasta file
195
- or anything, so watch out.
218
+ Only the `SeqFile` class actually checks to make sure that you passed
219
+ in a "proper" fastA or fastQ file, so watch out.
@@ -0,0 +1,82 @@
1
+ # Copyright 2014, 2015 Ryan Moore
2
+ # Contact: moorer@udel.edu
3
+ #
4
+ # This file is part of parse_fasta.
5
+ #
6
+ # parse_fasta is free software: you can redistribute it and/or modify
7
+ # it under the terms of the GNU General Public License as published by
8
+ # the Free Software Foundation, either version 3 of the License, or
9
+ # (at your option) any later version.
10
+ #
11
+ # parse_fasta is distributed in the hope that it will be useful,
12
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
+ # GNU General Public License for more details.
15
+ #
16
+ # You should have received a copy of the GNU General Public License
17
+ # along with parse_fasta. If not, see <http://www.gnu.org/licenses/>.
18
+
19
+ # Provides a class that will parse either fastA or fastQ files,
20
+ # depending on what the user provides. Handles, gzipped files.
21
+ class SeqFile < File
22
+
23
+ # Analagous to IO#each_line, #each_record will go through a fastA or
24
+ # fastQ file record by record.
25
+ #
26
+ # This #each_record is used in a similar fashion as
27
+ # FastaFile#each_record except that it yields the header and the
28
+ # sequence regardless of whether the input is a fastA file or a
29
+ # fastQ file.
30
+ #
31
+ # If the input is a fastQ file, this method will yield the header
32
+ # and the sequence and ignore the description and the quality
33
+ # string. This SeqFile class should only be used if your program
34
+ # needs to work on either fastA or fastQ files, thus it ignores the
35
+ # quality string and description and treats either file type as if
36
+ # it were a fastA file.
37
+ #
38
+ # If you need the description or quality, you should use
39
+ # FastqFile#each_record instead.
40
+ #
41
+ # @example Parse a gzipped fastA file
42
+ # SeqFile.open('reads.fa.gz').each_record do |head, seq|
43
+ # puts [head, seq.length].join "\t"
44
+ # end
45
+ #
46
+ # @example Parse an uncompressed fastQ file
47
+ # SeqFile.open('reads.fq.gz').each_record do |head, seq|
48
+ # puts [head, seq.length].join "\t"
49
+ # end
50
+ #
51
+ # @yieldparam header [String] The header of the record without the
52
+ # leading '>' or '@'
53
+ #
54
+ # @yieldparam sequence [Sequence] The sequence of the record.
55
+ def each_record
56
+ first_char = get_first_char(self)
57
+
58
+ if first_char == '>'
59
+ FastaFile.open(self).each_record do |header, sequence|
60
+ yield(header, sequence)
61
+ end
62
+ elsif first_char == '@'
63
+ FastqFile.open(self).each_record do |head, seq, desc, qual|
64
+ yield(head, seq)
65
+ end
66
+ else
67
+ raise ArgumentError, "Input does not look like FASTA or FASTQ"
68
+ end
69
+ end
70
+
71
+ private
72
+
73
+ def get_first_char(f)
74
+ begin
75
+ handle = Zlib::GzipReader.open(f)
76
+ rescue Zlib::GzipFile::Error => e
77
+ handle = f
78
+ end
79
+
80
+ handle.each_line.peek[0]
81
+ end
82
+ end
@@ -17,5 +17,5 @@
17
17
  # along with parse_fasta. If not, see <http://www.gnu.org/licenses/>.
18
18
 
19
19
  module ParseFasta
20
- VERSION = "1.5.2"
20
+ VERSION = "1.6.0"
21
21
  end
data/lib/parse_fasta.rb CHANGED
@@ -19,5 +19,6 @@
19
19
  require 'parse_fasta/version'
20
20
  require 'parse_fasta/fasta_file'
21
21
  require 'parse_fasta/fastq_file'
22
+ require 'parse_fasta/seq_file'
22
23
  require 'parse_fasta/sequence'
23
24
  require 'parse_fasta/quality'
data/parse_fasta.gemspec CHANGED
@@ -28,4 +28,5 @@ Gem::Specification.new do |spec|
28
28
  spec.add_development_dependency "rspec", "~> 2.14"
29
29
  spec.add_development_dependency "bio", "~> 1.4"
30
30
  spec.add_development_dependency "yard", "~> 0.8"
31
+ spec.add_development_dependency "coveralls", "~> 0.7"
31
32
  end
@@ -0,0 +1,150 @@
1
+ # Copyright 2014, 2015 Ryan Moore
2
+ # Contact: moorer@udel.edu
3
+ #
4
+ # This file is part of parse_fasta.
5
+ #
6
+ # parse_fasta is free software: you can redistribute it and/or modify
7
+ # it under the terms of the GNU General Public License as published by
8
+ # the Free Software Foundation, either version 3 of the License, or
9
+ # (at your option) any later version.
10
+ #
11
+ # parse_fasta is distributed in the hope that it will be useful,
12
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
+ # GNU General Public License for more details.
15
+ #
16
+ # You should have received a copy of the GNU General Public License
17
+ # along with parse_fasta. If not, see <http://www.gnu.org/licenses/>.
18
+
19
+ require 'spec_helper'
20
+
21
+ describe SeqFile do
22
+ describe "#each_record" do
23
+ let(:records) {
24
+ [["seq1 is fun", "AACTGGNNN"],
25
+ ["seq2", "AATCCTGNNN"],
26
+ ["seq3", "yyyyyyyyyyyyyyyNNN"]]
27
+ }
28
+
29
+ context "when input is a fasta file" do
30
+ let(:f_handle) { SeqFile.open(@fname).each_record { |s| } }
31
+
32
+ shared_examples_for "parsing a fasta file" do
33
+ it "yields proper header and sequence for each record" do
34
+ expect { |b|
35
+ SeqFile.open(@fname).each_record(&b)
36
+ }.to yield_successive_args(*records)
37
+ end
38
+
39
+ it "yields the sequence as a Sequence class" do
40
+ SeqFile.open(@fname).each_record do |_, seq|
41
+ expect(seq).to be_an_instance_of Sequence
42
+ end
43
+ end
44
+ end
45
+
46
+ context "with a gzipped file" do
47
+ before(:each) do
48
+ @fname = "#{File.dirname(__FILE__)}/../../test_files/test.fa.gz"
49
+ end
50
+
51
+ it_behaves_like "parsing a fasta file"
52
+
53
+ it "closes the GzipReader" do
54
+ expect(f_handle).to be_closed
55
+ end
56
+
57
+ it "returns GzipReader object" do
58
+ expect(f_handle).to be_an_instance_of Zlib::GzipReader
59
+ end
60
+ end
61
+
62
+ context "with a non-gzipped file" do
63
+ before(:each) do
64
+ @fname = "#{File.dirname(__FILE__)}/../../test_files/test.fa"
65
+ end
66
+
67
+ it_behaves_like "parsing a fasta file"
68
+
69
+ it "doesn't close the File (approx regular file behavior)" do
70
+ expect(f_handle).not_to be_closed
71
+ end
72
+
73
+ it "returns FastaFile object" do
74
+ expect(f_handle).to be_a FastaFile
75
+ end
76
+ end
77
+ end
78
+ end
79
+
80
+ context "when input is a fastq file" do
81
+ let(:records) {
82
+ [["seq1", "AACCTTGG"],
83
+ ["seq2 apples", "ACTG"]] }
84
+ let(:f_handle) { SeqFile.open(@fname).each_record { |s| } }
85
+
86
+ shared_examples_for "parsing a fastq file" do
87
+ it "yields only header & sequence" do
88
+ expect { |b|
89
+ SeqFile.open(@fname).each_record(&b)
90
+ }.to yield_successive_args(records[0], records[1])
91
+ end
92
+
93
+ it "yields the sequence as a Sequence class" do
94
+ SeqFile.open(@fname).each_record do |_, seq, _, _|
95
+ expect(seq).to be_an_instance_of Sequence
96
+ end
97
+ end
98
+ end
99
+
100
+ context "with a 4 line per record fastq file" do
101
+ describe "#each_record" do
102
+ context "with a gzipped file" do
103
+ before(:each) do
104
+ @fname =
105
+ "#{File.dirname(__FILE__)}/../../test_files/test.fq.gz"
106
+ end
107
+
108
+ it_behaves_like "parsing a fastq file"
109
+
110
+ it "closes the GzipReader" do
111
+ expect(f_handle).to be_closed
112
+ end
113
+
114
+ it "returns GzipReader object" do
115
+ expect(f_handle).to be_an_instance_of Zlib::GzipReader
116
+ end
117
+ end
118
+
119
+ context "with a non-gzipped file" do
120
+ before(:each) do
121
+ @fname =
122
+ "#{File.dirname(__FILE__)}/../../test_files/test.fq"
123
+ end
124
+
125
+ it_behaves_like "parsing a fastq file"
126
+
127
+ it "doesn't close the SeqFile (approx reg file behav)" do
128
+ expect(f_handle).not_to be_closed
129
+ end
130
+
131
+ it "returns FastqFile object" do
132
+ expect(f_handle).to be_a FastqFile
133
+ end
134
+ end
135
+ end
136
+ end
137
+ end
138
+
139
+ context "when input is bogus" do
140
+ it "raises an ArgumentError with message" do
141
+ fname = "#{File.dirname(__FILE__)}/../../test_files/bogus.txt"
142
+ err_msg = "Input does not look like FASTA or FASTQ"
143
+
144
+ expect { SeqFile.open(fname).each_record do |h, s|
145
+ puts [h, s].join ' '
146
+ end
147
+ }.to raise_error(ArgumentError, err_msg)
148
+ end
149
+ end
150
+ end
data/spec/spec_helper.rb CHANGED
@@ -16,4 +16,8 @@
16
16
  # You should have received a copy of the GNU General Public License
17
17
  # along with parse_fasta. If not, see <http://www.gnu.org/licenses/>.
18
18
 
19
+ require 'coveralls'
20
+ Coveralls.wear!
21
+
19
22
  require 'parse_fasta'
23
+
@@ -0,0 +1,2 @@
1
+ this header is missing the '>'
2
+ ACTGACTGATCGATCGTAGCTACGTAGCTACG
data/test_files/test.fa CHANGED
@@ -1,8 +1,10 @@
1
1
  >seq1 is fun
2
2
  AACTGGNNN
3
+
3
4
  >seq2
4
5
  AAT
5
6
  CCTGNNN
7
+
6
8
  >seq3
7
9
  yyyyyyyyyy
8
10
 
metadata CHANGED
@@ -1,85 +1,99 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: parse_fasta
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.5.2
4
+ version: 1.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ryan Moore
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-01-08 00:00:00.000000000 Z
11
+ date: 2015-04-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ~>
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
19
  version: '1.6'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ~>
24
+ - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '1.6'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ~>
31
+ - - "~>"
32
32
  - !ruby/object:Gem::Version
33
33
  version: '10.3'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - ~>
38
+ - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: '10.3'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rspec
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - ~>
45
+ - - "~>"
46
46
  - !ruby/object:Gem::Version
47
47
  version: '2.14'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - ~>
52
+ - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: '2.14'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: bio
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - ~>
59
+ - - "~>"
60
60
  - !ruby/object:Gem::Version
61
61
  version: '1.4'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - ~>
66
+ - - "~>"
67
67
  - !ruby/object:Gem::Version
68
68
  version: '1.4'
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: yard
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - ~>
73
+ - - "~>"
74
74
  - !ruby/object:Gem::Version
75
75
  version: '0.8'
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
- - - ~>
80
+ - - "~>"
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0.8'
83
+ - !ruby/object:Gem::Dependency
84
+ name: coveralls
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '0.7'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '0.7'
83
97
  description: Provides nice, programmatic access to fasta and fastq files, as well
84
98
  as providing Sequence and Quality helper classes. No need for BioRuby ;)
85
99
  email:
@@ -88,7 +102,9 @@ executables: []
88
102
  extensions: []
89
103
  extra_rdoc_files: []
90
104
  files:
91
- - .gitignore
105
+ - ".coveralls.yml"
106
+ - ".gitignore"
107
+ - ".travis.yml"
92
108
  - COPYING
93
109
  - Gemfile
94
110
  - README.md
@@ -97,22 +113,25 @@ files:
97
113
  - lib/parse_fasta/fasta_file.rb
98
114
  - lib/parse_fasta/fastq_file.rb
99
115
  - lib/parse_fasta/quality.rb
116
+ - lib/parse_fasta/seq_file.rb
100
117
  - lib/parse_fasta/sequence.rb
101
118
  - lib/parse_fasta/version.rb
102
119
  - parse_fasta.gemspec
103
120
  - spec/lib/fasta_file_spec.rb
104
121
  - spec/lib/fastq_file_spec.rb
105
122
  - spec/lib/quality_spec.rb
123
+ - spec/lib/seq_file_spec.rb
106
124
  - spec/lib/sequence_spec.rb
107
125
  - spec/spec_helper.rb
108
126
  - test_files/benchmark.rb
127
+ - test_files/bogus.txt
109
128
  - test_files/test.fa
110
129
  - test_files/test.fa.gz
111
130
  - test_files/test.fq
112
131
  - test_files/test.fq.gz
113
132
  homepage: https://github.com/mooreryan/parse_fasta
114
133
  licenses:
115
- - ! 'GPLv3: http://www.gnu.org/licenses/gpl.txt'
134
+ - 'GPLv3: http://www.gnu.org/licenses/gpl.txt'
116
135
  metadata: {}
117
136
  post_install_message:
118
137
  rdoc_options: []
@@ -120,17 +139,17 @@ require_paths:
120
139
  - lib
121
140
  required_ruby_version: !ruby/object:Gem::Requirement
122
141
  requirements:
123
- - - ! '>='
142
+ - - ">="
124
143
  - !ruby/object:Gem::Version
125
144
  version: 1.9.3
126
145
  required_rubygems_version: !ruby/object:Gem::Requirement
127
146
  requirements:
128
- - - ! '>='
147
+ - - ">="
129
148
  - !ruby/object:Gem::Version
130
149
  version: '0'
131
150
  requirements: []
132
151
  rubyforge_project:
133
- rubygems_version: 2.2.2
152
+ rubygems_version: 2.4.6
134
153
  signing_key:
135
154
  specification_version: 4
136
155
  summary: Easy-peasy parsing of fasta & fastq files!
@@ -138,6 +157,7 @@ test_files:
138
157
  - spec/lib/fasta_file_spec.rb
139
158
  - spec/lib/fastq_file_spec.rb
140
159
  - spec/lib/quality_spec.rb
160
+ - spec/lib/seq_file_spec.rb
141
161
  - spec/lib/sequence_spec.rb
142
162
  - spec/spec_helper.rb
143
163
  has_rdoc: