scaffolder 0.4.4 → 0.5.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
data/test/helper.rb
DELETED
@@ -1,30 +0,0 @@
|
|
1
|
-
require 'rubygems'
|
2
|
-
require 'test/unit'
|
3
|
-
require 'shoulda'
|
4
|
-
require 'redgreen'
|
5
|
-
require 'mocha'
|
6
|
-
|
7
|
-
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
8
|
-
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
9
|
-
|
10
|
-
require 'scaffolder'
|
11
|
-
|
12
|
-
class Test::Unit::TestCase
|
13
|
-
class << self
|
14
|
-
|
15
|
-
def should_have_method_attribute(klass)
|
16
|
-
should "have method #attribute" do
|
17
|
-
assert_respond_to( klass, :attribute )
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
def should_have_attribute(klass, *attributes)
|
22
|
-
attributes.each do |attribute|
|
23
|
-
should "have instance attribute #{attribute}" do
|
24
|
-
assert_respond_to( klass.new, attribute )
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
end
|
30
|
-
end
|
data/test/test_insert.rb
DELETED
@@ -1,77 +0,0 @@
|
|
1
|
-
require 'helper'
|
2
|
-
|
3
|
-
class TestInsert < Test::Unit::TestCase
|
4
|
-
context Scaffolder::Region::Insert do
|
5
|
-
|
6
|
-
context "attributes" do
|
7
|
-
|
8
|
-
should_have_attribute Scaffolder::Region::Insert, :source, :open, :close
|
9
|
-
|
10
|
-
setup do
|
11
|
-
@length = 15
|
12
|
-
@insert = Scaffolder::Region::Insert.new
|
13
|
-
@insert.raw_sequence('N' * @length)
|
14
|
-
end
|
15
|
-
|
16
|
-
should "return open plus sequence length as default close" do
|
17
|
-
@insert.open 5
|
18
|
-
assert_equal(@insert.close,@insert.open + @length - 1)
|
19
|
-
end
|
20
|
-
|
21
|
-
should "return close minus sequence length as default open" do
|
22
|
-
@insert.close 20
|
23
|
-
assert_equal(@insert.open,@insert.close - @length - 1)
|
24
|
-
end
|
25
|
-
|
26
|
-
should "include the insert position" do
|
27
|
-
@insert.open 5
|
28
|
-
@insert.close 10
|
29
|
-
assert_equal(@insert.position,4..9)
|
30
|
-
end
|
31
|
-
|
32
|
-
should "throw an error when neither open or close are provided" do
|
33
|
-
assert_raise(Scaffolder::Errors::CoordinateError){ @insert.position }
|
34
|
-
end
|
35
|
-
|
36
|
-
end
|
37
|
-
|
38
|
-
context "#size_diff" do
|
39
|
-
|
40
|
-
setup do
|
41
|
-
@insert = Scaffolder::Region::Insert.new
|
42
|
-
@insert.open 3
|
43
|
-
@insert.close 5
|
44
|
-
end
|
45
|
-
|
46
|
-
should "return a negative diff for a sequence smaller than insert site" do
|
47
|
-
@insert.raw_sequence 'TT'
|
48
|
-
assert_equal(@insert.size_diff,-1)
|
49
|
-
end
|
50
|
-
|
51
|
-
should "return 0 for a sequence equal to the insert site" do
|
52
|
-
@insert.raw_sequence 'TTT'
|
53
|
-
assert_equal(@insert.size_diff,0)
|
54
|
-
end
|
55
|
-
|
56
|
-
should "return a positive diff for a sequence larger than insert site" do
|
57
|
-
@insert.raw_sequence 'TTTT'
|
58
|
-
assert_equal(@insert.size_diff,1)
|
59
|
-
end
|
60
|
-
|
61
|
-
end
|
62
|
-
|
63
|
-
should "be comparable by close position" do
|
64
|
-
a = Scaffolder::Region::Insert.new
|
65
|
-
a.close 1
|
66
|
-
|
67
|
-
b = a.clone
|
68
|
-
b.close 2
|
69
|
-
|
70
|
-
c = b.clone
|
71
|
-
c.close 3
|
72
|
-
|
73
|
-
assert_equal([c,a,b].sort, [a,b,c])
|
74
|
-
end
|
75
|
-
|
76
|
-
end
|
77
|
-
end
|
data/test/test_region.rb
DELETED
@@ -1,151 +0,0 @@
|
|
1
|
-
require 'helper'
|
2
|
-
|
3
|
-
class TestScaffolder < Test::Unit::TestCase
|
4
|
-
context Scaffolder::Region do
|
5
|
-
|
6
|
-
context "adding instance methods with attribute method" do
|
7
|
-
|
8
|
-
setup do
|
9
|
-
@attr = :some_attribute
|
10
|
-
end
|
11
|
-
|
12
|
-
should "create a single accessor attribute" do
|
13
|
-
Scaffolder::Region.attribute @attr
|
14
|
-
methods = Scaffolder::Region.instance_methods.map{|m| m.to_s}
|
15
|
-
assert(methods.include?(@attr.to_s))
|
16
|
-
end
|
17
|
-
|
18
|
-
should "return nil until attribute value is stored" do
|
19
|
-
Scaffolder::Region.attribute @attr
|
20
|
-
region = Scaffolder::Region.new
|
21
|
-
assert_equal(region.send(@attr),nil)
|
22
|
-
region.send(@attr,5)
|
23
|
-
assert_equal(region.send(@attr),5)
|
24
|
-
end
|
25
|
-
|
26
|
-
should "allow specification of default value" do
|
27
|
-
Scaffolder::Region.attribute @attr, :default => 1
|
28
|
-
region = Scaffolder::Region.new
|
29
|
-
assert_equal(region.send(@attr),1)
|
30
|
-
region.send(@attr,5)
|
31
|
-
assert_equal(region.send(@attr),5)
|
32
|
-
end
|
33
|
-
|
34
|
-
should "allow specification of default value using a block" do
|
35
|
-
Scaffolder::Region.attribute @attr, :default => lambda{|s| s.entry_type }
|
36
|
-
region = Scaffolder::Region.new
|
37
|
-
assert_equal(region.send(@attr),region.entry_type)
|
38
|
-
region.send(@attr,5)
|
39
|
-
assert_equal(region.send(@attr),5)
|
40
|
-
end
|
41
|
-
|
42
|
-
end
|
43
|
-
|
44
|
-
context "passing the yaml hash to the generate method" do
|
45
|
-
|
46
|
-
setup do
|
47
|
-
Scaffolder::Region.attribute(:one)
|
48
|
-
Scaffolder::Region.attribute(:two)
|
49
|
-
@tags = {'one' => 1, 'two' => 2}
|
50
|
-
end
|
51
|
-
|
52
|
-
should "should call each tag in the hash as a method to store the value" do
|
53
|
-
Scaffolder::Region.any_instance.expects(:one).with(1)
|
54
|
-
Scaffolder::Region.any_instance.expects(:two).with(2)
|
55
|
-
Scaffolder::Region.generate(@tags)
|
56
|
-
end
|
57
|
-
|
58
|
-
should "return an instantiated region object" do
|
59
|
-
region = Scaffolder::Region.generate(@tags)
|
60
|
-
assert_equal(region.one,1)
|
61
|
-
assert_equal(region.two,2)
|
62
|
-
end
|
63
|
-
|
64
|
-
should "throw UnknownAttributeError for an unknown attribute" do
|
65
|
-
assert_raise Scaffolder::Errors::UnknownAttributeError do
|
66
|
-
Scaffolder::Region.generate({:three => 3})
|
67
|
-
end
|
68
|
-
end
|
69
|
-
|
70
|
-
end
|
71
|
-
|
72
|
-
context "attributes" do
|
73
|
-
|
74
|
-
should_have_attribute Scaffolder::Region,
|
75
|
-
:start, :stop, :reverse, :raw_sequence
|
76
|
-
|
77
|
-
should "return the class name as the entry type" do
|
78
|
-
Scaffolder::Region::NewRegion = Class.new(Scaffolder::Region)
|
79
|
-
assert_equal(Scaffolder::Region::NewRegion.new.entry_type,:newregion)
|
80
|
-
end
|
81
|
-
|
82
|
-
should "return 1 as default value for start attribute" do
|
83
|
-
sequence = Scaffolder::Region.new
|
84
|
-
assert_equal(sequence.start,1)
|
85
|
-
end
|
86
|
-
|
87
|
-
should "return #raw_sequence length as default value for stop attribute" do
|
88
|
-
length = 5
|
89
|
-
sequence = Scaffolder::Region.new
|
90
|
-
sequence.raw_sequence 'N' * length
|
91
|
-
assert_equal(sequence.stop,length)
|
92
|
-
end
|
93
|
-
|
94
|
-
end
|
95
|
-
|
96
|
-
context "generating the processed sequence" do
|
97
|
-
|
98
|
-
[:sequence_hook, :raw_sequence].each do |method|
|
99
|
-
|
100
|
-
context "using the #{method} method" do
|
101
|
-
|
102
|
-
setup do
|
103
|
-
# Test class to prevent interference with other tests
|
104
|
-
@s = Class.new(Scaffolder::Region).new
|
105
|
-
@s.class.send(:define_method,method,lambda{'ATGCCAGATAACTGACTAGCATG'})
|
106
|
-
end
|
107
|
-
|
108
|
-
should "return the sequence when no other options are passed" do
|
109
|
-
assert_equal(@s.sequence,'ATGCCAGATAACTGACTAGCATG')
|
110
|
-
end
|
111
|
-
|
112
|
-
should "reverse complement sequence when passed the reverse option" do
|
113
|
-
@s.reverse true
|
114
|
-
assert_equal(@s.sequence, 'CATGCTAGTCAGTTATCTGGCAT')
|
115
|
-
end
|
116
|
-
|
117
|
-
should "create subsequence when passed sequence coordinates" do
|
118
|
-
@s.start 5
|
119
|
-
@s.stop 20
|
120
|
-
assert_equal(@s.sequence,'CAGATAACTGACTAGC')
|
121
|
-
end
|
122
|
-
|
123
|
-
should "raise a CoordinateError when start is less than 1" do
|
124
|
-
@s.start 0
|
125
|
-
assert_raise(Scaffolder::Errors::CoordinateError){ @s.sequence }
|
126
|
-
end
|
127
|
-
|
128
|
-
should "raise a CoordinateError when stop is greater than sequence " do
|
129
|
-
@s.stop 24
|
130
|
-
assert_raise(Scaffolder::Errors::CoordinateError){ @s.sequence }
|
131
|
-
end
|
132
|
-
|
133
|
-
should "raise a CoordinateError when stop is greater than start " do
|
134
|
-
@s.start 6
|
135
|
-
@s.stop 5
|
136
|
-
assert_raise(Scaffolder::Errors::CoordinateError){ @s.sequence }
|
137
|
-
end
|
138
|
-
|
139
|
-
end
|
140
|
-
|
141
|
-
end
|
142
|
-
|
143
|
-
end
|
144
|
-
|
145
|
-
should "instantiate return corresponding region subclass when requested" do
|
146
|
-
Scaffolder::Region::Type = Class.new
|
147
|
-
assert_equal(Scaffolder::Region['type'],Scaffolder::Region::Type)
|
148
|
-
end
|
149
|
-
|
150
|
-
end
|
151
|
-
end
|
data/test/test_scaffolder.rb
DELETED
@@ -1,116 +0,0 @@
|
|
1
|
-
require 'helper'
|
2
|
-
|
3
|
-
class TestScaffolder < Test::Unit::TestCase
|
4
|
-
context Scaffolder do
|
5
|
-
|
6
|
-
Scaffolder::Region::Mock = Class.new(Scaffolder::Region)
|
7
|
-
|
8
|
-
setup do
|
9
|
-
@sequence = nil
|
10
|
-
@data = [{'mock' => Hash.new}]
|
11
|
-
end
|
12
|
-
|
13
|
-
context 'parsing a scaffold file' do
|
14
|
-
|
15
|
-
setup do
|
16
|
-
Bio::FlatFile.stubs(:auto).with(@sequence).returns({})
|
17
|
-
end
|
18
|
-
|
19
|
-
should "fetch correct region class type" do
|
20
|
-
Scaffolder::Region.expects(:'[]').with('mock').returns(Scaffolder::Region::Mock)
|
21
|
-
Scaffolder.new(@data,@sequence)
|
22
|
-
end
|
23
|
-
|
24
|
-
should "pass data to region object" do
|
25
|
-
Scaffolder::Region::Mock.expects(:generate).with(@data.first['mock'])
|
26
|
-
Scaffolder.new(@data,@sequence)
|
27
|
-
end
|
28
|
-
|
29
|
-
end
|
30
|
-
|
31
|
-
context 'parsing a scaffold file with a source keyword' do
|
32
|
-
|
33
|
-
setup do
|
34
|
-
Bio::FlatFile.stubs(:auto).with(@sequence).returns([
|
35
|
-
stub(:definition => 'seq1', :seq => 'ATGC')])
|
36
|
-
end
|
37
|
-
|
38
|
-
should "should also pass raw_sequence from flat file" do
|
39
|
-
@data.first['mock']['source'] = 'seq1'
|
40
|
-
Scaffolder::Region::Mock.any_instance.expects(:source).with('seq1')
|
41
|
-
Scaffolder::Region::Mock.any_instance.expects(:raw_sequence).with('ATGC')
|
42
|
-
Scaffolder.new(@data,@sequence)
|
43
|
-
end
|
44
|
-
|
45
|
-
end
|
46
|
-
|
47
|
-
context 'updating each data hash with raw_sequence attributes' do
|
48
|
-
|
49
|
-
setup do
|
50
|
-
@seqs = {'seq1' => 'AAA'}
|
51
|
-
@expected = {'source' => 'seq1', 'raw_sequence' => @seqs['seq1']}
|
52
|
-
end
|
53
|
-
|
54
|
-
should "do nothing when no source keyword" do
|
55
|
-
test = {'something' => 'nothing'}
|
56
|
-
assert_equal(test,Scaffolder.update_with_sequence(test,@seqs))
|
57
|
-
end
|
58
|
-
|
59
|
-
should "add raw_sequence to simple hash" do
|
60
|
-
test = {'source' => 'seq1'}
|
61
|
-
assert_equal(@expected,Scaffolder.update_with_sequence(test,@seqs))
|
62
|
-
end
|
63
|
-
|
64
|
-
should "add raw_sequence to a nested hash" do
|
65
|
-
test = {'something' => {'source' => 'seq1'}}
|
66
|
-
expected = {'something' => @expected}
|
67
|
-
assert_equal(expected,Scaffolder.update_with_sequence(test,@seqs))
|
68
|
-
end
|
69
|
-
|
70
|
-
should "add raw_sequence to a twice nested hash" do
|
71
|
-
test = {'something' => {'other' => {'source' => 'seq1'}}}
|
72
|
-
expected = {'something' => {'other' => @expected}}
|
73
|
-
assert_equal(expected,Scaffolder.update_with_sequence(test,@seqs))
|
74
|
-
end
|
75
|
-
|
76
|
-
should "add raw_sequence to simple hash inside an array" do
|
77
|
-
test = [{'source' => 'seq1'}]
|
78
|
-
expected = [@expected]
|
79
|
-
assert_equal(expected,Scaffolder.update_with_sequence(test,@seqs))
|
80
|
-
end
|
81
|
-
|
82
|
-
should "add raw_sequence to a nested hash inside an array" do
|
83
|
-
test = {'something' => [{'source' => 'seq1'}]}
|
84
|
-
expected = {'something' => [@expected]}
|
85
|
-
assert_equal(expected,Scaffolder.update_with_sequence(test,@seqs))
|
86
|
-
end
|
87
|
-
|
88
|
-
should "add raw_sequence to two nested hashes inside an array" do
|
89
|
-
test = {'something' => [{'source' => 'seq1'},{'source' => 'seq1'}]}
|
90
|
-
expected = {'something' => [@expected,@expected]}
|
91
|
-
assert_equal(expected,Scaffolder.update_with_sequence(test,@seqs))
|
92
|
-
end
|
93
|
-
|
94
|
-
should "add raw_sequence to a hash inside a hash inside an array" do
|
95
|
-
test = {'something' => [{'else' => {'source' => 'seq1'}}]}
|
96
|
-
expected = {'something' => [{'else' => @expected}]}
|
97
|
-
assert_equal(expected,Scaffolder.update_with_sequence(test,@seqs))
|
98
|
-
end
|
99
|
-
|
100
|
-
should "add raw_sequence to a twice nested (hash inside an array)" do
|
101
|
-
test = {'something' => [{'else' => [{'source' => 'seq1'}]}]}
|
102
|
-
expected = {'something' => [{'else' => [@expected]}]}
|
103
|
-
assert_equal(expected,Scaffolder.update_with_sequence(test,@seqs))
|
104
|
-
end
|
105
|
-
|
106
|
-
should "throw an UnknownSequenceError when no matching sequence" do
|
107
|
-
test = {'source' => 'non_existent_sequence'}
|
108
|
-
assert_raise(Scaffolder::Errors::UnknownSequenceError) do
|
109
|
-
Scaffolder.update_with_sequence(test,@seqs)
|
110
|
-
end
|
111
|
-
end
|
112
|
-
|
113
|
-
end
|
114
|
-
|
115
|
-
end
|
116
|
-
end
|
data/test/test_sequence.rb
DELETED
@@ -1,107 +0,0 @@
|
|
1
|
-
require 'helper'
|
2
|
-
|
3
|
-
class TestSequence < Test::Unit::TestCase
|
4
|
-
context Scaffolder::Region::Sequence do
|
5
|
-
|
6
|
-
context "attributes" do
|
7
|
-
should_have_method_attribute Scaffolder::Region::Sequence
|
8
|
-
should_have_attribute Scaffolder::Region::Sequence, :source, :inserts
|
9
|
-
end
|
10
|
-
|
11
|
-
context "insert attribute method" do
|
12
|
-
|
13
|
-
setup do
|
14
|
-
@sequence = Scaffolder::Region::Sequence.new
|
15
|
-
@hash = {'open' => 2, 'close' => 3}
|
16
|
-
@insert = Scaffolder::Region::Insert.new
|
17
|
-
@insert.open @hash['open']
|
18
|
-
@insert.close @hash['close']
|
19
|
-
end
|
20
|
-
|
21
|
-
should "return empty array as default value" do
|
22
|
-
assert_equal(@sequence.inserts,Array.new)
|
23
|
-
end
|
24
|
-
|
25
|
-
should "allow array of inserts to be set as value" do
|
26
|
-
@sequence.inserts [@insert]
|
27
|
-
assert_equal(@sequence.inserts,[@insert])
|
28
|
-
end
|
29
|
-
|
30
|
-
should "process insert data hash into an array of inserts" do
|
31
|
-
@sequence.inserts [@hash]
|
32
|
-
insert = @sequence.inserts.first
|
33
|
-
assert_instance_of(Scaffolder::Region::Insert,insert)
|
34
|
-
assert_equal(@hash['close'],insert.close)
|
35
|
-
assert_equal(@hash['open'],insert.open)
|
36
|
-
end
|
37
|
-
|
38
|
-
should "process mixed insert data into an array of inserts" do
|
39
|
-
@sequence.inserts [@hash,@insert]
|
40
|
-
@sequence.inserts.each do |insert|
|
41
|
-
assert_instance_of(Scaffolder::Region::Insert,insert)
|
42
|
-
assert_equal(@hash['close'],insert.close)
|
43
|
-
assert_equal(@hash['open'],insert.open)
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
47
|
-
end
|
48
|
-
|
49
|
-
context "with inserts added" do
|
50
|
-
|
51
|
-
setup do
|
52
|
-
@sequence = Scaffolder::Region::Sequence.new
|
53
|
-
@sequence.raw_sequence 'ATGCCAGATAACTGACTAGCATG'
|
54
|
-
|
55
|
-
@insert = Scaffolder::Region::Insert.new
|
56
|
-
@insert.raw_sequence 'GGTAGTA'
|
57
|
-
@insert.open 5
|
58
|
-
@insert.close 10
|
59
|
-
end
|
60
|
-
|
61
|
-
should "raise when the insert open is after the sequence stop" do
|
62
|
-
@insert.open 24
|
63
|
-
@insert.close 25
|
64
|
-
@sequence.inserts [@insert]
|
65
|
-
assert_raise(Scaffolder::Errors::CoordinateError){ @sequence.sequence }
|
66
|
-
end
|
67
|
-
|
68
|
-
should "raise when the insert close is before the sequence start" do
|
69
|
-
@insert.open -5
|
70
|
-
@insert.close 0
|
71
|
-
@sequence.inserts [@insert]
|
72
|
-
assert_raise(Scaffolder::Errors::CoordinateError){ @sequence.sequence }
|
73
|
-
end
|
74
|
-
|
75
|
-
should "raise when the insert open is greater than the insert close" do
|
76
|
-
@insert.open 11
|
77
|
-
@sequence.inserts [@insert]
|
78
|
-
assert_raise(Scaffolder::Errors::CoordinateError){ @sequence.sequence }
|
79
|
-
end
|
80
|
-
|
81
|
-
should "update the sequence with a simple insert" do
|
82
|
-
@sequence.inserts [@insert]
|
83
|
-
assert_equal(@sequence.sequence,'ATGCGGTAGTAACTGACTAGCATG')
|
84
|
-
end
|
85
|
-
|
86
|
-
should "update the sequence with a simple insert with repeated method calls" do
|
87
|
-
@sequence.inserts [@insert]
|
88
|
-
assert_equal(@sequence.sequence,'ATGCGGTAGTAACTGACTAGCATG')
|
89
|
-
assert_equal(@sequence.sequence,'ATGCGGTAGTAACTGACTAGCATG')
|
90
|
-
end
|
91
|
-
|
92
|
-
should "update the sequence stop position after adding a simple insert" do
|
93
|
-
@sequence.inserts [@insert]
|
94
|
-
assert_equal(@sequence.stop,24)
|
95
|
-
end
|
96
|
-
|
97
|
-
should "update sequence with inserts in reverse order" do
|
98
|
-
insert_two = @insert.clone
|
99
|
-
insert_two.open 12
|
100
|
-
insert_two.close 15
|
101
|
-
@sequence.inserts [@insert,insert_two]
|
102
|
-
assert_equal(@sequence.sequence,"ATGCGGTAGTAAGGTAGTACTAGCATG")
|
103
|
-
end
|
104
|
-
end
|
105
|
-
|
106
|
-
end
|
107
|
-
end
|