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
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
|