scaffolder 0.4.4 → 0.5.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 +15 -0
- data/.gitignore +22 -0
- data/.travis.yml +2 -0
- data/Gemfile +2 -17
- data/README.rdoc +12 -6
- data/Rakefile +12 -23
- data/lib/scaffolder.rb +3 -2
- data/lib/scaffolder/version.rb +5 -0
- data/scaffolder.gemspec +29 -87
- data/spec/helper.rb +8 -0
- data/spec/insert_spec.rb +75 -0
- data/spec/region_spec.rb +148 -0
- data/spec/scaffolder_spec.rb +112 -0
- data/spec/sequences_spec.rb +110 -0
- data/spec/unresolved_spec.rb +17 -0
- metadata +75 -86
- data/test/helper.rb +0 -30
- data/test/test_insert.rb +0 -77
- data/test/test_region.rb +0 -151
- data/test/test_scaffolder.rb +0 -116
- data/test/test_sequence.rb +0 -107
- data/test/test_unresolved.rb +0 -23
@@ -0,0 +1,112 @@
|
|
1
|
+
require 'helper'
|
2
|
+
|
3
|
+
describe Scaffolder do
|
4
|
+
|
5
|
+
Scaffolder::Region::Mock = Class.new(Scaffolder::Region)
|
6
|
+
|
7
|
+
before do
|
8
|
+
@sequence = nil
|
9
|
+
@data = [{'mock' => Hash.new}]
|
10
|
+
end
|
11
|
+
|
12
|
+
describe 'parsing a scaffold file' do
|
13
|
+
|
14
|
+
before do
|
15
|
+
Bio::FlatFile.stubs(:auto).with(@sequence).returns({})
|
16
|
+
end
|
17
|
+
|
18
|
+
it "should fetch correct region class type" do
|
19
|
+
Scaffolder::Region.expects(:'[]').with('mock').returns(Scaffolder::Region::Mock)
|
20
|
+
Scaffolder.new(@data,@sequence)
|
21
|
+
end
|
22
|
+
|
23
|
+
it "should pass data to region object" do
|
24
|
+
Scaffolder::Region::Mock.expects(:generate).with(@data.first['mock'])
|
25
|
+
Scaffolder.new(@data,@sequence)
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
29
|
+
|
30
|
+
context 'parsing a scaffold file with a source keyword' do
|
31
|
+
|
32
|
+
before do
|
33
|
+
Bio::FlatFile.stubs(:auto).with(@sequence).returns([
|
34
|
+
stub(:definition => 'seq1', :seq => 'ATGC')])
|
35
|
+
end
|
36
|
+
|
37
|
+
it "should should also pass raw_sequence from flat file" do
|
38
|
+
@data.first['mock']['source'] = 'seq1'
|
39
|
+
Scaffolder::Region::Mock.any_instance.expects(:source).with('seq1')
|
40
|
+
Scaffolder::Region::Mock.any_instance.expects(:raw_sequence).with('ATGC')
|
41
|
+
Scaffolder.new(@data,@sequence)
|
42
|
+
end
|
43
|
+
|
44
|
+
end
|
45
|
+
|
46
|
+
context 'updating each data hash with raw_sequence attributes' do
|
47
|
+
|
48
|
+
before do
|
49
|
+
@seqs = {'seq1' => 'AAA'}
|
50
|
+
@expected = {'source' => 'seq1', 'raw_sequence' => @seqs['seq1']}
|
51
|
+
end
|
52
|
+
|
53
|
+
it "should do nothing when no source keyword" do
|
54
|
+
test = {'something' => 'nothing'}
|
55
|
+
Scaffolder.update_with_sequence(test,@seqs).should == test
|
56
|
+
end
|
57
|
+
|
58
|
+
it "should add raw_sequence to simple hash" do
|
59
|
+
test = {'source' => 'seq1'}
|
60
|
+
Scaffolder.update_with_sequence(test,@seqs).should == @expected
|
61
|
+
end
|
62
|
+
|
63
|
+
it "should add raw_sequence to a nested hash" do
|
64
|
+
test = {'something' => {'source' => 'seq1'}}
|
65
|
+
expected = {'something' => @expected}
|
66
|
+
Scaffolder.update_with_sequence(test,@seqs).should == expected
|
67
|
+
end
|
68
|
+
|
69
|
+
it "should add raw_sequence to a twice nested hash" do
|
70
|
+
test = {'something' => {'other' => {'source' => 'seq1'}}}
|
71
|
+
expected = {'something' => {'other' => @expected}}
|
72
|
+
Scaffolder.update_with_sequence(test,@seqs).should == expected
|
73
|
+
end
|
74
|
+
|
75
|
+
it "should add raw_sequence to simple hash inside an array" do
|
76
|
+
test = [{'source' => 'seq1'}]
|
77
|
+
expected = [@expected]
|
78
|
+
Scaffolder.update_with_sequence(test,@seqs).should == expected
|
79
|
+
end
|
80
|
+
|
81
|
+
it "should add raw_sequence to a nested hash inside an array" do
|
82
|
+
test = {'something' => [{'source' => 'seq1'}]}
|
83
|
+
expected = {'something' => [@expected]}
|
84
|
+
Scaffolder.update_with_sequence(test,@seqs).should == expected
|
85
|
+
end
|
86
|
+
|
87
|
+
it "should add raw_sequence to two nested hashes inside an array" do
|
88
|
+
test = {'something' => [{'source' => 'seq1'},{'source' => 'seq1'}]}
|
89
|
+
expected = {'something' => [@expected,@expected]}
|
90
|
+
Scaffolder.update_with_sequence(test,@seqs).should == expected
|
91
|
+
end
|
92
|
+
|
93
|
+
it "should add raw_sequence to a hash inside a hash inside an array" do
|
94
|
+
test = {'something' => [{'else' => {'source' => 'seq1'}}]}
|
95
|
+
expected = {'something' => [{'else' => @expected}]}
|
96
|
+
Scaffolder.update_with_sequence(test,@seqs).should == expected
|
97
|
+
end
|
98
|
+
|
99
|
+
it "should add raw_sequence to a twice nested (hash inside an array)" do
|
100
|
+
test = {'something' => [{'else' => [{'source' => 'seq1'}]}]}
|
101
|
+
expected = {'something' => [{'else' => [@expected]}]}
|
102
|
+
Scaffolder.update_with_sequence(test,@seqs).should == expected
|
103
|
+
end
|
104
|
+
|
105
|
+
it "should throw an UnknownSequenceError when no matching sequence" do
|
106
|
+
test = {'source' => 'non_existent_sequence'}
|
107
|
+
lambda{ Scaffolder.update_with_sequence(test,@seqs)}.should raise_error(Scaffolder::Errors::UnknownSequenceError)
|
108
|
+
end
|
109
|
+
|
110
|
+
end
|
111
|
+
|
112
|
+
end
|
@@ -0,0 +1,110 @@
|
|
1
|
+
require 'helper'
|
2
|
+
|
3
|
+
describe Scaffolder::Region::Sequence do
|
4
|
+
|
5
|
+
its(:class){ should respond_to(:attribute)}
|
6
|
+
it{ should respond_to :source, :inserts}
|
7
|
+
|
8
|
+
describe "insert attribute method" do
|
9
|
+
|
10
|
+
let(:coordinates) do
|
11
|
+
{'open' => 2, 'close' => 3}
|
12
|
+
end
|
13
|
+
|
14
|
+
let(:insert) do
|
15
|
+
i = Scaffolder::Region::Insert.new
|
16
|
+
i.open coordinates['open']
|
17
|
+
i.close coordinates['close']
|
18
|
+
i
|
19
|
+
end
|
20
|
+
|
21
|
+
it "should return empty array as default value" do
|
22
|
+
subject.inserts.should be_empty
|
23
|
+
end
|
24
|
+
|
25
|
+
it "should allow array of inserts to be set as value" do
|
26
|
+
subject.inserts [insert]
|
27
|
+
subject.inserts.first.should == insert
|
28
|
+
end
|
29
|
+
|
30
|
+
it "should process insert data hash into an array of inserts" do
|
31
|
+
subject.inserts [coordinates]
|
32
|
+
ins = subject.inserts.first
|
33
|
+
ins.should be_instance_of Scaffolder::Region::Insert
|
34
|
+
|
35
|
+
ins.close.should == coordinates['close']
|
36
|
+
ins.open.should == coordinates['open']
|
37
|
+
end
|
38
|
+
|
39
|
+
it "should process mixed insert data into an array of inserts" do
|
40
|
+
subject.inserts [coordinates,insert]
|
41
|
+
|
42
|
+
subject.inserts.each do |ins|
|
43
|
+
ins.should be_instance_of Scaffolder::Region::Insert
|
44
|
+
ins.close.should == coordinates['close']
|
45
|
+
ins.open.should == coordinates['open']
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
end
|
50
|
+
|
51
|
+
describe "with inserts added" do
|
52
|
+
|
53
|
+
before do
|
54
|
+
subject.raw_sequence 'ATGCCAGATAACTGACTAGCATG'
|
55
|
+
end
|
56
|
+
|
57
|
+
let(:insert) do
|
58
|
+
ins = Scaffolder::Region::Insert.new
|
59
|
+
ins.raw_sequence 'GGTAGTA'
|
60
|
+
ins.open 5
|
61
|
+
ins.close 10
|
62
|
+
ins
|
63
|
+
end
|
64
|
+
|
65
|
+
it "should raise when the insert open is after the sequence stop" do
|
66
|
+
insert.open 24
|
67
|
+
insert.close 25
|
68
|
+
subject.inserts [insert]
|
69
|
+
lambda{subject.sequence}.should raise_error(Scaffolder::Errors::CoordinateError)
|
70
|
+
end
|
71
|
+
|
72
|
+
it "should raise when the insert close is before the sequence start" do
|
73
|
+
insert.open -5
|
74
|
+
insert.close 0
|
75
|
+
subject.inserts [insert]
|
76
|
+
lambda{subject.sequence}.should raise_error(Scaffolder::Errors::CoordinateError)
|
77
|
+
end
|
78
|
+
|
79
|
+
it "should raise when the insert open is greater than the insert close" do
|
80
|
+
insert.open 11
|
81
|
+
subject.inserts [insert]
|
82
|
+
lambda{subject.sequence}.should raise_error(Scaffolder::Errors::CoordinateError)
|
83
|
+
end
|
84
|
+
|
85
|
+
it "should update the sequence with a simple insert" do
|
86
|
+
subject.inserts [insert]
|
87
|
+
subject.sequence.should == 'ATGCGGTAGTAACTGACTAGCATG'
|
88
|
+
end
|
89
|
+
|
90
|
+
it "should update the sequence with a simple insert with repeated method calls" do
|
91
|
+
subject.inserts [insert]
|
92
|
+
subject.sequence.should == 'ATGCGGTAGTAACTGACTAGCATG'
|
93
|
+
subject.sequence.should == 'ATGCGGTAGTAACTGACTAGCATG'
|
94
|
+
end
|
95
|
+
|
96
|
+
it "should update the sequence stop position after adding a simple insert" do
|
97
|
+
subject.inserts [insert]
|
98
|
+
subject.stop.should == 24
|
99
|
+
end
|
100
|
+
|
101
|
+
it "should update the sequence with inserts in reverse order" do
|
102
|
+
insert_two = insert.clone
|
103
|
+
insert_two.open 12
|
104
|
+
insert_two.close 15
|
105
|
+
subject.inserts [insert,insert_two]
|
106
|
+
subject.sequence.should == "ATGCGGTAGTAAGGTAGTACTAGCATG"
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
110
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'helper'
|
2
|
+
|
3
|
+
describe Scaffolder::Region::Unresolved do
|
4
|
+
|
5
|
+
its(:class){ should respond_to(:attribute)}
|
6
|
+
it{ should respond_to :length}
|
7
|
+
|
8
|
+
it "should return unresolved sequence when given length" do
|
9
|
+
subject.length 5
|
10
|
+
subject.sequence.should == ('N' * 5)
|
11
|
+
end
|
12
|
+
|
13
|
+
it "raise an error if length is unspecified" do
|
14
|
+
lambda{ subject.sequence }.should raise_error(Scaffolder::Errors::CoordinateError)
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
metadata
CHANGED
@@ -1,137 +1,135 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: scaffolder
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
5
|
-
prerelease:
|
4
|
+
version: 0.5.0
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Michael Barton
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date:
|
13
|
-
default_executable:
|
11
|
+
date: 2013-08-12 00:00:00.000000000 Z
|
14
12
|
dependencies:
|
15
13
|
- !ruby/object:Gem::Dependency
|
16
|
-
name:
|
17
|
-
requirement:
|
18
|
-
none: false
|
14
|
+
name: rake
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
19
16
|
requirements:
|
20
17
|
- - ~>
|
21
18
|
- !ruby/object:Gem::Version
|
22
|
-
version:
|
19
|
+
version: 10.1.0
|
23
20
|
type: :runtime
|
24
21
|
prerelease: false
|
25
|
-
version_requirements:
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ~>
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 10.1.0
|
26
27
|
- !ruby/object:Gem::Dependency
|
27
28
|
name: bundler
|
28
|
-
requirement:
|
29
|
-
none: false
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - ~>
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version:
|
34
|
-
type: :
|
33
|
+
version: 1.3.0
|
34
|
+
type: :runtime
|
35
35
|
prerelease: false
|
36
|
-
version_requirements:
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ~>
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 1.3.0
|
37
41
|
- !ruby/object:Gem::Dependency
|
38
|
-
name:
|
39
|
-
requirement:
|
40
|
-
none: false
|
42
|
+
name: bio
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
41
44
|
requirements:
|
42
45
|
- - ~>
|
43
46
|
- !ruby/object:Gem::Version
|
44
|
-
version:
|
45
|
-
type: :
|
47
|
+
version: 1.4.0
|
48
|
+
type: :runtime
|
46
49
|
prerelease: false
|
47
|
-
version_requirements:
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ~>
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 1.4.0
|
48
55
|
- !ruby/object:Gem::Dependency
|
49
56
|
name: rspec
|
50
|
-
requirement:
|
51
|
-
none: false
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
52
58
|
requirements:
|
53
59
|
- - ~>
|
54
60
|
- !ruby/object:Gem::Version
|
55
|
-
version:
|
61
|
+
version: 2.14.0
|
56
62
|
type: :development
|
57
63
|
prerelease: false
|
58
|
-
version_requirements:
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ~>
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: 2.14.0
|
59
69
|
- !ruby/object:Gem::Dependency
|
60
70
|
name: mocha
|
61
|
-
requirement:
|
62
|
-
none: false
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
63
72
|
requirements:
|
64
73
|
- - ~>
|
65
74
|
- !ruby/object:Gem::Version
|
66
|
-
version:
|
75
|
+
version: 0.14.0
|
67
76
|
type: :development
|
68
77
|
prerelease: false
|
69
|
-
version_requirements:
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ~>
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: 0.14.0
|
70
83
|
- !ruby/object:Gem::Dependency
|
71
84
|
name: yard
|
72
|
-
requirement:
|
73
|
-
none: false
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
74
86
|
requirements:
|
75
87
|
- - ~>
|
76
88
|
- !ruby/object:Gem::Version
|
77
|
-
version:
|
89
|
+
version: 0.8.0
|
78
90
|
type: :development
|
79
91
|
prerelease: false
|
80
|
-
version_requirements:
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ~>
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: 0.8.0
|
81
97
|
- !ruby/object:Gem::Dependency
|
82
98
|
name: cucumber
|
83
|
-
requirement:
|
84
|
-
none: false
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
85
100
|
requirements:
|
86
101
|
- - ~>
|
87
102
|
- !ruby/object:Gem::Version
|
88
|
-
version:
|
103
|
+
version: 1.3.0
|
89
104
|
type: :development
|
90
105
|
prerelease: false
|
91
|
-
version_requirements:
|
92
|
-
- !ruby/object:Gem::Dependency
|
93
|
-
name: aruba
|
94
|
-
requirement: &2153741780 !ruby/object:Gem::Requirement
|
95
|
-
none: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
96
107
|
requirements:
|
97
108
|
- - ~>
|
98
109
|
- !ruby/object:Gem::Version
|
99
|
-
version:
|
100
|
-
type: :development
|
101
|
-
prerelease: false
|
102
|
-
version_requirements: *2153741780
|
110
|
+
version: 1.3.0
|
103
111
|
- !ruby/object:Gem::Dependency
|
104
|
-
name:
|
105
|
-
requirement:
|
106
|
-
none: false
|
112
|
+
name: aruba
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
107
114
|
requirements:
|
108
115
|
- - ~>
|
109
116
|
- !ruby/object:Gem::Version
|
110
|
-
version:
|
117
|
+
version: 0.5.3
|
111
118
|
type: :development
|
112
119
|
prerelease: false
|
113
|
-
version_requirements:
|
114
|
-
- !ruby/object:Gem::Dependency
|
115
|
-
name: mynyml-redgreen
|
116
|
-
requirement: &2153740340 !ruby/object:Gem::Requirement
|
117
|
-
none: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
118
121
|
requirements:
|
119
122
|
- - ~>
|
120
123
|
- !ruby/object:Gem::Version
|
121
|
-
version: 0.
|
122
|
-
|
123
|
-
prerelease: false
|
124
|
-
version_requirements: *2153740340
|
125
|
-
description: Organise sequence contigs into genome scaffolds using simple human-readable
|
126
|
-
YAML files.
|
124
|
+
version: 0.5.3
|
125
|
+
description: Turns scaffolded contigs and annotations into a genome.
|
127
126
|
email: mail@next.gs
|
128
127
|
executables: []
|
129
128
|
extensions: []
|
130
|
-
extra_rdoc_files:
|
131
|
-
- LICENSE
|
132
|
-
- README.rdoc
|
129
|
+
extra_rdoc_files: []
|
133
130
|
files:
|
134
131
|
- .document
|
132
|
+
- .gitignore
|
135
133
|
- .travis.yml
|
136
134
|
- Gemfile
|
137
135
|
- LICENSE
|
@@ -149,47 +147,38 @@ files:
|
|
149
147
|
- lib/scaffolder/region/insert.rb
|
150
148
|
- lib/scaffolder/region/sequence.rb
|
151
149
|
- lib/scaffolder/region/unresolved.rb
|
150
|
+
- lib/scaffolder/version.rb
|
152
151
|
- scaffolder.gemspec
|
153
|
-
-
|
154
|
-
-
|
155
|
-
-
|
156
|
-
-
|
157
|
-
-
|
158
|
-
-
|
152
|
+
- spec/helper.rb
|
153
|
+
- spec/insert_spec.rb
|
154
|
+
- spec/region_spec.rb
|
155
|
+
- spec/scaffolder_spec.rb
|
156
|
+
- spec/sequences_spec.rb
|
157
|
+
- spec/unresolved_spec.rb
|
159
158
|
- yard/attribute_handler.rb
|
160
|
-
has_rdoc: true
|
161
159
|
homepage: http://next.gs
|
162
160
|
licenses:
|
163
161
|
- MIT
|
162
|
+
metadata: {}
|
164
163
|
post_install_message:
|
165
164
|
rdoc_options: []
|
166
165
|
require_paths:
|
167
166
|
- lib
|
168
167
|
required_ruby_version: !ruby/object:Gem::Requirement
|
169
|
-
none: false
|
170
168
|
requirements:
|
171
169
|
- - ! '>='
|
172
170
|
- !ruby/object:Gem::Version
|
173
171
|
version: '0'
|
174
|
-
segments:
|
175
|
-
- 0
|
176
|
-
hash: -4011958643952341412
|
177
172
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
178
|
-
none: false
|
179
173
|
requirements:
|
180
174
|
- - ! '>='
|
181
175
|
- !ruby/object:Gem::Version
|
182
|
-
version:
|
176
|
+
version: 1.8.0
|
183
177
|
requirements: []
|
184
|
-
rubyforge_project:
|
185
|
-
rubygems_version:
|
178
|
+
rubyforge_project: scaffolder
|
179
|
+
rubygems_version: 2.0.3
|
186
180
|
signing_key:
|
187
|
-
specification_version:
|
188
|
-
summary:
|
189
|
-
test_files:
|
190
|
-
|
191
|
-
- test/test_insert.rb
|
192
|
-
- test/test_region.rb
|
193
|
-
- test/test_scaffolder.rb
|
194
|
-
- test/test_sequence.rb
|
195
|
-
- test/test_unresolved.rb
|
181
|
+
specification_version: 4
|
182
|
+
summary: Build genome output files
|
183
|
+
test_files: []
|
184
|
+
has_rdoc:
|