gfa 0.1.2 → 0.3.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/Gemfile +8 -2
- data/LICENSE +2 -2
- data/README.md +23 -15
- data/Rakefile +9 -8
- data/lib/gfa/common.rb +39 -42
- data/lib/gfa/field/char.rb +2 -2
- data/lib/gfa/field/float.rb +17 -1
- data/lib/gfa/field/hex.rb +17 -1
- data/lib/gfa/field/json.rb +18 -0
- data/lib/gfa/field/numarray.rb +38 -5
- data/lib/gfa/field/sigint.rb +14 -2
- data/lib/gfa/field/string.rb +11 -3
- data/lib/gfa/field.rb +89 -19
- data/lib/gfa/generator.rb +32 -28
- data/lib/gfa/graph.rb +14 -16
- data/lib/gfa/parser.rb +31 -22
- data/lib/gfa/record/comment.rb +15 -0
- data/lib/gfa/record/containment.rb +19 -13
- data/lib/gfa/record/header.rb +11 -10
- data/lib/gfa/record/jump.rb +45 -0
- data/lib/gfa/record/link.rb +42 -42
- data/lib/gfa/record/path.rb +14 -13
- data/lib/gfa/record/segment.rb +22 -18
- data/lib/gfa/record/walk.rb +20 -0
- data/lib/gfa/record.rb +53 -33
- data/lib/gfa/record_set/comment_set.rb +3 -0
- data/lib/gfa/record_set/containment_set.rb +4 -0
- data/lib/gfa/record_set/header_set.rb +3 -0
- data/lib/gfa/record_set/jump_set.rb +3 -0
- data/lib/gfa/record_set/link_set.rb +3 -0
- data/lib/gfa/record_set/path_set.rb +4 -0
- data/lib/gfa/record_set/segment_set.rb +4 -0
- data/lib/gfa/record_set/walk_set.rb +3 -0
- data/lib/gfa/record_set.rb +99 -0
- data/lib/gfa/version.rb +1 -1
- data/lib/gfa.rb +4 -4
- data/test/common_test.rb +5 -5
- data/test/field_test.rb +52 -26
- data/test/parser_test.rb +57 -20
- data/test/record_test.rb +7 -0
- data/test/test_helper.rb +10 -5
- metadata +33 -21
@@ -0,0 +1,99 @@
|
|
1
|
+
|
2
|
+
require 'gfa/record'
|
3
|
+
|
4
|
+
class GFA::RecordSet
|
5
|
+
INDEX_FIELD = nil
|
6
|
+
TYPES = GFA::Record.TYPES.map { |i| :"#{i}Set" }
|
7
|
+
GFA::Record.TYPES.each { |t| require "gfa/record_set/#{t.downcase}_set" }
|
8
|
+
|
9
|
+
%i[TYPES].each do |x|
|
10
|
+
define_singleton_method(x) { const_get(x) }
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.code_class(code)
|
14
|
+
name = GFA::Record.CODES[code.to_sym]
|
15
|
+
raise "Unknown record type: #{code}." if name.nil?
|
16
|
+
name_class(name)
|
17
|
+
end
|
18
|
+
|
19
|
+
def self.name_class(name)
|
20
|
+
name = "#{name}Set" unless name =~ /Set$/
|
21
|
+
const_get(name)
|
22
|
+
end
|
23
|
+
|
24
|
+
# Instance-level
|
25
|
+
|
26
|
+
attr_reader :set, :gfa
|
27
|
+
|
28
|
+
def initialize(gfa)
|
29
|
+
@set = []
|
30
|
+
@index = {}
|
31
|
+
@gfa = gfa
|
32
|
+
end
|
33
|
+
|
34
|
+
def [](k)
|
35
|
+
return set[k] if k.is_a?(Integer)
|
36
|
+
find_index(k)
|
37
|
+
end
|
38
|
+
|
39
|
+
def type
|
40
|
+
GFA::Record.CODES[code]
|
41
|
+
end
|
42
|
+
|
43
|
+
def code
|
44
|
+
self.class.const_get(:CODE)
|
45
|
+
end
|
46
|
+
|
47
|
+
def index_field
|
48
|
+
self.class.const_get(:INDEX_FIELD)
|
49
|
+
end
|
50
|
+
|
51
|
+
%i[empty? hash size count length first last].each do |i|
|
52
|
+
define_method(i) { set.send(i) }
|
53
|
+
end
|
54
|
+
|
55
|
+
def to_s
|
56
|
+
set.map(&:to_s).join("\n")
|
57
|
+
end
|
58
|
+
|
59
|
+
def eql?(rec)
|
60
|
+
hash == rec.hash
|
61
|
+
end
|
62
|
+
|
63
|
+
alias == eql?
|
64
|
+
|
65
|
+
def <<(v)
|
66
|
+
v = v.split("\t") if v.is_a? String
|
67
|
+
v = GFA::Record.code_class(code).new(*v) if v.is_a? Array
|
68
|
+
raise "Not a GFA Record: #{v}" unless v.is_a? GFA::Record
|
69
|
+
raise "Wrong type of record: #{v.type}" if v.type != type
|
70
|
+
|
71
|
+
@set << v
|
72
|
+
index(v)
|
73
|
+
end
|
74
|
+
|
75
|
+
def index_id(v)
|
76
|
+
v[index_field]&.value
|
77
|
+
end
|
78
|
+
|
79
|
+
def index(v)
|
80
|
+
save_index(index_id(v), v) if index_field
|
81
|
+
|
82
|
+
# Whenever present, index also by ID
|
83
|
+
save_index(v[:ID].value, v) if v[:ID] && v[:ID].value =~ index_id(v)
|
84
|
+
end
|
85
|
+
|
86
|
+
def save_index(k, v)
|
87
|
+
return unless gfa.opts[:index] && k
|
88
|
+
|
89
|
+
if @index[k]
|
90
|
+
warn "#{type} already registered with field #{index_field}: #{k}"
|
91
|
+
end
|
92
|
+
@index[k] = v
|
93
|
+
end
|
94
|
+
|
95
|
+
def find_index(k)
|
96
|
+
k = k.value if k.is_a? GFA::Field
|
97
|
+
@index[k]
|
98
|
+
end
|
99
|
+
end
|
data/lib/gfa/version.rb
CHANGED
data/lib/gfa.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
require
|
2
|
-
require
|
3
|
-
require
|
4
|
-
require
|
1
|
+
require 'gfa/common'
|
2
|
+
require 'gfa/parser'
|
3
|
+
require 'gfa/generator'
|
4
|
+
require 'gfa/graph'
|
data/test/common_test.rb
CHANGED
@@ -4,10 +4,10 @@ class CommonTest < Test::Unit::TestCase
|
|
4
4
|
|
5
5
|
def test_assert_format
|
6
6
|
assert_raise do
|
7
|
-
GFA.assert_format(
|
7
|
+
GFA.assert_format('tsooq', /^.$/, 'Not a char')
|
8
8
|
end
|
9
9
|
assert_nothing_raised do
|
10
|
-
GFA.assert_format(
|
10
|
+
GFA.assert_format('z', /^.$/, 'Not a char')
|
11
11
|
end
|
12
12
|
end
|
13
13
|
|
@@ -20,15 +20,15 @@ class CommonTest < Test::Unit::TestCase
|
|
20
20
|
def test_record_getters
|
21
21
|
gfa = GFA.new
|
22
22
|
assert_respond_to(gfa, :headers)
|
23
|
-
assert_equal([], gfa.links)
|
23
|
+
assert_equal([], gfa.links.set)
|
24
24
|
assert_nil( gfa.segment(0) )
|
25
25
|
end
|
26
26
|
|
27
27
|
def test_record_setters
|
28
28
|
gfa = GFA.new
|
29
29
|
assert_respond_to(gfa, :add_path)
|
30
|
-
gfa.add_containment("zooq")
|
31
|
-
assert_equal(
|
30
|
+
gfa.add_containment("zooq\t+\ttsuk\t-\t1\t*")
|
31
|
+
assert_equal('zooq', gfa.records[:Containment].first.from.value)
|
32
32
|
end
|
33
33
|
|
34
34
|
end
|
data/test/field_test.rb
CHANGED
@@ -3,48 +3,74 @@ require "test_helper"
|
|
3
3
|
class FieldTest < Test::Unit::TestCase
|
4
4
|
|
5
5
|
def test_char
|
6
|
-
f = GFA::Field::Char.new(
|
7
|
-
assert_equal(
|
8
|
-
assert_raise
|
9
|
-
|
10
|
-
|
11
|
-
assert_raise do
|
12
|
-
GFA::Field::Char.new("")
|
13
|
-
end
|
14
|
-
assert_raise do
|
15
|
-
GFA::Field::Char.new("^.^")
|
16
|
-
end
|
6
|
+
f = GFA::Field::Char.new('%')
|
7
|
+
assert_equal('%', f.value)
|
8
|
+
assert_raise { GFA::Field::Char.new(' ') }
|
9
|
+
assert_raise { GFA::Field::Char.new('') }
|
10
|
+
assert_raise { GFA::Field::Char.new('^.^') }
|
17
11
|
end
|
18
12
|
|
19
13
|
def test_sigint
|
20
14
|
end
|
21
15
|
|
22
16
|
def test_float
|
23
|
-
f = GFA::Field::Float.new(
|
17
|
+
f = GFA::Field::Float.new('1.3e-5')
|
24
18
|
assert_equal(1.3e-5, f.value)
|
25
|
-
assert_raise
|
26
|
-
GFA::Field::Float.new("e-5")
|
27
|
-
end
|
19
|
+
assert_raise { GFA::Field::Float.new('e-5') }
|
28
20
|
end
|
29
21
|
|
30
22
|
def test_string
|
31
23
|
end
|
32
24
|
|
33
25
|
def test_hex
|
34
|
-
f = GFA::Field::Hex.new(
|
35
|
-
assert_equal(
|
36
|
-
assert_raise
|
37
|
-
GFA::Field::Hex.new("C3PO")
|
38
|
-
end
|
26
|
+
f = GFA::Field::Hex.new('C3F0')
|
27
|
+
assert_equal('C3F0', f.value)
|
28
|
+
assert_raise { GFA::Field::Hex.new('C3PO') }
|
39
29
|
end
|
40
30
|
|
41
31
|
def test_numarray
|
42
|
-
f = GFA::Field::NumArray.new(
|
43
|
-
assert_equal(
|
44
|
-
assert_equal(
|
45
|
-
assert_raise
|
46
|
-
GFA::Field::NumArray.new("c,1,e,3")
|
47
|
-
end
|
32
|
+
f = GFA::Field::NumArray.new('i,1,2,3')
|
33
|
+
assert_equal([1, 2, 3], f.array)
|
34
|
+
assert_equal('i', f.modifier)
|
35
|
+
assert_raise { GFA::Field::NumArray.new('c,1,e,3') }
|
48
36
|
end
|
49
37
|
|
38
|
+
def test_equal
|
39
|
+
f = GFA::Field::SigInt.new('123')
|
40
|
+
j = GFA::Field::String.new('123')
|
41
|
+
k = GFA::Field::Float.new('123')
|
42
|
+
assert(f == 123)
|
43
|
+
assert(123 == f)
|
44
|
+
assert(f != 123.0)
|
45
|
+
assert(f != '123')
|
46
|
+
assert(f.eql?(123))
|
47
|
+
assert(f != j)
|
48
|
+
assert(f != k)
|
49
|
+
assert(f != k.value)
|
50
|
+
assert(f.value == k.value)
|
51
|
+
end
|
52
|
+
|
53
|
+
def test_equivalent
|
54
|
+
# String comparisons
|
55
|
+
assert(GFA::Field['Z:a'].~ GFA::Field['A:a'])
|
56
|
+
assert(GFA::Field['Z:ab'] !~ GFA::Field['A:a'])
|
57
|
+
assert(GFA::Field['Z:{"a":1}'].~ GFA::Field['J:{"a":1}'])
|
58
|
+
assert(GFA::Field['J:{"a":1}'].~ GFA::Field['Z:{"a":1}'])
|
59
|
+
|
60
|
+
# Numeric comparisons
|
61
|
+
assert(GFA::Field['Z:123'].~ GFA::Field['i:123'])
|
62
|
+
assert(GFA::Field['Z:123'].~ GFA::Field['i:123'])
|
63
|
+
assert(GFA::Field['i:123'].~ GFA::Field['f:123'])
|
64
|
+
assert(GFA::Field['f:123'].~ GFA::Field['B:i,123'])
|
65
|
+
assert(GFA::Field['B:i,123'].~ GFA::Field['H:7B'])
|
66
|
+
assert(GFA::Field['H:7B'].~ GFA::Field['f:123.0'])
|
67
|
+
assert(GFA::Field['Z:123'] !~ GFA::Field['H:7B']) # In hex-space!
|
68
|
+
assert(GFA::Field['f:1e3'].~ GFA::Field['f:1000'])
|
69
|
+
assert(GFA::Field['f:1e3'].~ 1e3)
|
70
|
+
assert(GFA::Field['B:i,123,456'].~ [123, 456.0])
|
71
|
+
|
72
|
+
# Non-commutative
|
73
|
+
assert(GFA::Field['i:123'].~ GFA::Field['f:123.4'])
|
74
|
+
assert(GFA::Field['f:123.4'] !~ GFA::Field['i:123'])
|
75
|
+
end
|
50
76
|
end
|
data/test/parser_test.rb
CHANGED
@@ -2,46 +2,83 @@ require "test_helper"
|
|
2
2
|
require "gfa/parser"
|
3
3
|
|
4
4
|
class ParserTest < Test::Unit::TestCase
|
5
|
-
|
5
|
+
|
6
6
|
def test_load
|
7
|
-
sample_f = File.expand_path("../fixtures/sample.gfa",__FILE__)
|
8
7
|
assert_respond_to(GFA, :load)
|
9
|
-
|
10
|
-
|
11
|
-
|
8
|
+
|
9
|
+
# Can load files and close pointers properly
|
10
|
+
pre_fhs = ObjectSpace.each_object(IO).count { |i| not i.closed? }
|
11
|
+
assert_nothing_raised do
|
12
|
+
GFA.load(fixture_path('sample1.gfa'))
|
13
|
+
end
|
14
|
+
assert_nothing_raised do
|
15
|
+
GFA.load(fixture_path('sample2.gfa'))
|
16
|
+
end
|
17
|
+
assert_nothing_raised do
|
18
|
+
GFA.load(fixture_path('sample3.gfa'))
|
19
|
+
end
|
20
|
+
assert_raise do
|
21
|
+
GFA.load(fixture_path('sample4.gfa'))
|
22
|
+
end
|
23
|
+
post_fhs = ObjectSpace.each_object(IO).count { |i| not i.closed? }
|
12
24
|
assert_equal(pre_fhs, post_fhs)
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
25
|
+
end
|
26
|
+
|
27
|
+
def test_records
|
28
|
+
# Samples are properly parsed
|
29
|
+
sample1 = GFA.load(fixture_path('sample1.gfa'))
|
30
|
+
assert_equal(1, sample1.headers.size)
|
31
|
+
assert_equal(6, sample1.segments.size)
|
32
|
+
assert_equal(4, sample1.links.size)
|
33
|
+
assert(sample1.containments.empty?)
|
34
|
+
assert(sample1.paths.empty?)
|
35
|
+
assert_respond_to(sample1, :records)
|
36
|
+
end
|
37
|
+
|
38
|
+
def test_comments
|
39
|
+
path = fixture_path('sample2.gfa')
|
40
|
+
sample = GFA.load(path)
|
41
|
+
assert(sample.comments.empty?)
|
42
|
+
sample = GFA.load(path, comments: true)
|
43
|
+
assert(!sample.comments.empty?)
|
44
|
+
end
|
45
|
+
|
46
|
+
def test_index
|
47
|
+
path = fixture_path('sample3.gfa')
|
48
|
+
sample = GFA.load(path)
|
49
|
+
assert(sample.path('first').is_a?(GFA::Record))
|
50
|
+
assert(sample.paths['first'].is_a?(GFA::Record))
|
51
|
+
assert_equal('first', sample.path('first')[2]&.value)
|
52
|
+
sample = GFA.load(path, index: false)
|
53
|
+
assert_nil(sample.path('first'))
|
19
54
|
end
|
20
55
|
|
21
56
|
def test_version_suppport
|
22
57
|
gfa = GFA.new
|
23
|
-
assert_raise { gfa.set_gfa_version(
|
24
|
-
assert_raise { gfa.set_gfa_version(
|
25
|
-
assert_nothing_raised { gfa.set_gfa_version(
|
58
|
+
assert_raise { gfa.set_gfa_version('0.9') }
|
59
|
+
assert_raise { gfa.set_gfa_version('2.1') }
|
60
|
+
assert_nothing_raised { gfa.set_gfa_version('1.0') }
|
26
61
|
end
|
27
62
|
|
28
63
|
def test_line_by_line
|
29
64
|
gfa = GFA.new
|
30
65
|
assert_respond_to(gfa, :<<)
|
66
|
+
|
31
67
|
# Empty
|
32
|
-
gfa <<
|
68
|
+
gfa << ' '
|
33
69
|
assert(gfa.empty?)
|
34
|
-
gfa <<
|
70
|
+
gfa << 'H'
|
35
71
|
assert(gfa.empty?)
|
72
|
+
|
36
73
|
# Segment
|
37
74
|
assert_equal(0, gfa.segments.size)
|
38
|
-
gfa << "S\t1\tACTG"
|
75
|
+
gfa << "S\t1\tACTG\n"
|
39
76
|
assert(!gfa.empty?)
|
40
77
|
assert_equal(1, gfa.segments.size)
|
78
|
+
|
41
79
|
# Version
|
42
80
|
assert_nil(gfa.gfa_version)
|
43
|
-
gfa << GFA::Record::Header.new(
|
44
|
-
assert_equal(
|
81
|
+
gfa << GFA::Record::Header.new('VN:Z:1.0')
|
82
|
+
assert_equal('1.0', gfa.gfa_version)
|
45
83
|
end
|
46
|
-
|
47
84
|
end
|
data/test/record_test.rb
CHANGED
@@ -17,6 +17,13 @@ class RecordTest < Test::Unit::TestCase
|
|
17
17
|
assert_equal("P\ta\tb\t*", $rec_p.to_s)
|
18
18
|
end
|
19
19
|
|
20
|
+
def test_init_by_string
|
21
|
+
p = GFA::Record["P\ta\tb\t*"]
|
22
|
+
assert_equal('a', p.path_name&.value)
|
23
|
+
c = GFA::Record["# doink!\n"]
|
24
|
+
assert_equal(' doink!', c.comment&.value)
|
25
|
+
end
|
26
|
+
|
20
27
|
def test_hash
|
21
28
|
other_h = GFA::Record::Header.new("VN:Z:1.0")
|
22
29
|
assert_equal($rec_h.hash, other_h.hash)
|
data/test/test_helper.rb
CHANGED
@@ -1,6 +1,11 @@
|
|
1
|
-
require
|
2
|
-
|
1
|
+
require 'simplecov'
|
2
|
+
SimpleCov.start
|
3
|
+
|
4
|
+
require 'rubygems'
|
5
|
+
require 'test/unit'
|
6
|
+
require 'gfa/common'
|
7
|
+
|
8
|
+
def fixture_path(file)
|
9
|
+
File.expand_path("../fixtures/#{file}", __FILE__)
|
10
|
+
end
|
3
11
|
|
4
|
-
require "rubygems"
|
5
|
-
require "test/unit"
|
6
|
-
require "gfa/common"
|
metadata
CHANGED
@@ -1,55 +1,55 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gfa
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1
|
4
|
+
version: 0.3.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Luis M. Rodriguez-R
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2023-02-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rgl
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - ~>
|
17
|
+
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '0.5'
|
20
20
|
type: :runtime
|
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: '0.5'
|
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: '0'
|
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: '0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: test-unit
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- -
|
45
|
+
- - ">="
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: '0'
|
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: '0'
|
55
55
|
description: GFA is a graph representation of fragment assemblies
|
@@ -59,34 +59,47 @@ extensions: []
|
|
59
59
|
extra_rdoc_files:
|
60
60
|
- README.md
|
61
61
|
files:
|
62
|
+
- Gemfile
|
63
|
+
- LICENSE
|
64
|
+
- README.md
|
65
|
+
- Rakefile
|
66
|
+
- lib/gfa.rb
|
62
67
|
- lib/gfa/common.rb
|
68
|
+
- lib/gfa/field.rb
|
63
69
|
- lib/gfa/field/char.rb
|
64
70
|
- lib/gfa/field/float.rb
|
65
71
|
- lib/gfa/field/hex.rb
|
72
|
+
- lib/gfa/field/json.rb
|
66
73
|
- lib/gfa/field/numarray.rb
|
67
74
|
- lib/gfa/field/sigint.rb
|
68
75
|
- lib/gfa/field/string.rb
|
69
|
-
- lib/gfa/field.rb
|
70
76
|
- lib/gfa/generator.rb
|
71
77
|
- lib/gfa/graph.rb
|
72
78
|
- lib/gfa/parser.rb
|
79
|
+
- lib/gfa/record.rb
|
80
|
+
- lib/gfa/record/comment.rb
|
73
81
|
- lib/gfa/record/containment.rb
|
74
82
|
- lib/gfa/record/header.rb
|
83
|
+
- lib/gfa/record/jump.rb
|
75
84
|
- lib/gfa/record/link.rb
|
76
85
|
- lib/gfa/record/path.rb
|
77
86
|
- lib/gfa/record/segment.rb
|
78
|
-
- lib/gfa/record.rb
|
87
|
+
- lib/gfa/record/walk.rb
|
88
|
+
- lib/gfa/record_set.rb
|
89
|
+
- lib/gfa/record_set/comment_set.rb
|
90
|
+
- lib/gfa/record_set/containment_set.rb
|
91
|
+
- lib/gfa/record_set/header_set.rb
|
92
|
+
- lib/gfa/record_set/jump_set.rb
|
93
|
+
- lib/gfa/record_set/link_set.rb
|
94
|
+
- lib/gfa/record_set/path_set.rb
|
95
|
+
- lib/gfa/record_set/segment_set.rb
|
96
|
+
- lib/gfa/record_set/walk_set.rb
|
79
97
|
- lib/gfa/version.rb
|
80
|
-
- lib/gfa.rb
|
81
98
|
- test/common_test.rb
|
82
99
|
- test/field_test.rb
|
83
100
|
- test/parser_test.rb
|
84
101
|
- test/record_test.rb
|
85
102
|
- test/test_helper.rb
|
86
|
-
- Gemfile
|
87
|
-
- Rakefile
|
88
|
-
- README.md
|
89
|
-
- LICENSE
|
90
103
|
homepage: https://github.com/lmrodriguezr/gfa
|
91
104
|
licenses: []
|
92
105
|
metadata: {}
|
@@ -94,25 +107,24 @@ post_install_message:
|
|
94
107
|
rdoc_options:
|
95
108
|
- lib
|
96
109
|
- README.md
|
97
|
-
- --main
|
110
|
+
- "--main"
|
98
111
|
- README.md
|
99
|
-
- --title
|
112
|
+
- "--title"
|
100
113
|
- Graphical Fragment Assembly (GFA) for Ruby
|
101
114
|
require_paths:
|
102
115
|
- lib
|
103
116
|
required_ruby_version: !ruby/object:Gem::Requirement
|
104
117
|
requirements:
|
105
|
-
- -
|
118
|
+
- - ">="
|
106
119
|
- !ruby/object:Gem::Version
|
107
120
|
version: '0'
|
108
121
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
109
122
|
requirements:
|
110
|
-
- -
|
123
|
+
- - ">="
|
111
124
|
- !ruby/object:Gem::Version
|
112
125
|
version: '0'
|
113
126
|
requirements: []
|
114
|
-
|
115
|
-
rubygems_version: 2.0.14
|
127
|
+
rubygems_version: 3.1.6
|
116
128
|
signing_key:
|
117
129
|
specification_version: 4
|
118
130
|
summary: Graphical Fragment Assembly (GFA) for Ruby
|