scaffolder 0.4.4 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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.4.4
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: 2011-08-11 00:00:00.000000000 -04:00
13
- default_executable:
11
+ date: 2013-08-12 00:00:00.000000000 Z
14
12
  dependencies:
15
13
  - !ruby/object:Gem::Dependency
16
- name: bio
17
- requirement: &2153752620 !ruby/object:Gem::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: '1.4'
19
+ version: 10.1.0
23
20
  type: :runtime
24
21
  prerelease: false
25
- version_requirements: *2153752620
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: &2153750940 !ruby/object:Gem::Requirement
29
- none: false
29
+ requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - ~>
32
32
  - !ruby/object:Gem::Version
33
- version: '1.0'
34
- type: :development
33
+ version: 1.3.0
34
+ type: :runtime
35
35
  prerelease: false
36
- version_requirements: *2153750940
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: shoulda
39
- requirement: &2153748000 !ruby/object:Gem::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: '2.11'
45
- type: :development
47
+ version: 1.4.0
48
+ type: :runtime
46
49
  prerelease: false
47
- version_requirements: *2153748000
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: &2153746760 !ruby/object:Gem::Requirement
51
- none: false
57
+ requirement: !ruby/object:Gem::Requirement
52
58
  requirements:
53
59
  - - ~>
54
60
  - !ruby/object:Gem::Version
55
- version: '2.4'
61
+ version: 2.14.0
56
62
  type: :development
57
63
  prerelease: false
58
- version_requirements: *2153746760
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: &2153746240 !ruby/object:Gem::Requirement
62
- none: false
71
+ requirement: !ruby/object:Gem::Requirement
63
72
  requirements:
64
73
  - - ~>
65
74
  - !ruby/object:Gem::Version
66
- version: '0.9'
75
+ version: 0.14.0
67
76
  type: :development
68
77
  prerelease: false
69
- version_requirements: *2153746240
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: &2153743100 !ruby/object:Gem::Requirement
73
- none: false
85
+ requirement: !ruby/object:Gem::Requirement
74
86
  requirements:
75
87
  - - ~>
76
88
  - !ruby/object:Gem::Version
77
- version: '0.6'
89
+ version: 0.8.0
78
90
  type: :development
79
91
  prerelease: false
80
- version_requirements: *2153743100
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: &2153742480 !ruby/object:Gem::Requirement
84
- none: false
99
+ requirement: !ruby/object:Gem::Requirement
85
100
  requirements:
86
101
  - - ~>
87
102
  - !ruby/object:Gem::Version
88
- version: '0.9'
103
+ version: 1.3.0
89
104
  type: :development
90
105
  prerelease: false
91
- version_requirements: *2153742480
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: '0.2'
100
- type: :development
101
- prerelease: false
102
- version_requirements: *2153741780
110
+ version: 1.3.0
103
111
  - !ruby/object:Gem::Dependency
104
- name: jeweler
105
- requirement: &2153741080 !ruby/object:Gem::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: '1.5'
117
+ version: 0.5.3
111
118
  type: :development
112
119
  prerelease: false
113
- version_requirements: *2153741080
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.7.1
122
- type: :development
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
- - test/helper.rb
154
- - test/test_insert.rb
155
- - test/test_region.rb
156
- - test/test_scaffolder.rb
157
- - test/test_sequence.rb
158
- - test/test_unresolved.rb
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: '0'
176
+ version: 1.8.0
183
177
  requirements: []
184
- rubyforge_project:
185
- rubygems_version: 1.6.2
178
+ rubyforge_project: scaffolder
179
+ rubygems_version: 2.0.3
186
180
  signing_key:
187
- specification_version: 3
188
- summary: Genome scaffolding for human beings.
189
- test_files:
190
- - test/helper.rb
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: