transfuse 0.4.3 → 0.4.5
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 +4 -4
- data/README.md +27 -12
- data/bin/transfuse +24 -9
- data/lib/transfuse/consensus.rb +54 -60
- data/lib/transfuse/transfuse.rb +24 -3
- data/lib/transfuse/version.rb +1 -1
- data/test/test_cluster.rb +5 -8
- data/test/test_transfuse.rb +2 -2
- data/transfuse.gemspec +7 -6
- metadata +53 -21
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 94b55c79a713ddce1aaba5c302e3ce0d7a3dbd4a
|
4
|
+
data.tar.gz: 4472cc10a3a5a5e29e11bc22ad3d17b07fb7c332
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8b61add12cd4c12db7ae2a65739c7895ea31c82b188a717f17e860a2009036a28962d53e275e67e244ef3f85e21a291ca15384df14ec5c1c51606a6893c2e25c
|
7
|
+
data.tar.gz: 1443f82858f58c9371f2223fb91fefa802cf809aa6802bbb84c014781641304e8c1a02d9dc6e289291e8b52569bce71438931472b18dfc009d9e9472fcc130c4
|
data/README.md
CHANGED
@@ -1,40 +1,55 @@
|
|
1
1
|
## Transfuse
|
2
2
|
|
3
|
-
**Transfuse is currently in development and is not yet ready for use**
|
4
|
-
|
5
3
|
Transfuse intelligently merges your multiple de novo transcriptome assemblies. Run multiple assemblies with different de novo assemblers, or different settings in the same assembler and have them combined into a single high quality transcriptome.
|
6
4
|
|
7
5
|
Transfuse takes in the reads you used to do the assembly and a list of fasta files and produces a single output fasta file.
|
8
6
|
|
9
7
|
### Installation and Running
|
10
8
|
|
11
|
-
To install Transfuse
|
9
|
+
To install Transfuse you can get it from rubygems.com
|
10
|
+
|
11
|
+
`gem install transfuse`
|
12
|
+
|
13
|
+
or you can clone this repo:
|
12
14
|
|
13
15
|
`git clone https://github.com/cboursnell/transfuse.git`
|
14
16
|
|
15
|
-
|
17
|
+
then build and install the ruby gem
|
16
18
|
|
17
19
|
`gem build *spec; gem install *gem`
|
18
20
|
|
21
|
+
Transfuse also requires `vsearch` to be installed which can be downloaded from:
|
22
|
+
|
23
|
+
`https://github.com/torognes/vsearch`
|
24
|
+
|
19
25
|
### Usage
|
20
26
|
|
21
27
|
Transfuse is run on the command line. The options are:
|
22
28
|
|
23
29
|
```
|
24
|
-
-a, --
|
25
|
-
-l, --left=<s>
|
26
|
-
-r, --right=<s>
|
27
|
-
-o, --output=<s>
|
28
|
-
-t, --threads=<i>
|
29
|
-
-
|
30
|
-
-
|
31
|
-
-
|
30
|
+
-a, --assemblies=<s> assembly files in FASTA format, comma-separated
|
31
|
+
-l, --left=<s> left reads file in FASTQ format
|
32
|
+
-r, --right=<s> right reads file in FASTQ format
|
33
|
+
-o, --output=<s> write merged assembly to file
|
34
|
+
-t, --threads=<i> number of threads (default: 1)
|
35
|
+
-i, --id=<f> sequence identity to cluster at (default: 1.0)
|
36
|
+
-v, --verbose be verbose
|
37
|
+
-e, --version Print version and exit
|
38
|
+
-h, --help Show this message
|
32
39
|
```
|
33
40
|
|
34
41
|
An example command:
|
35
42
|
|
36
43
|
`transfuse --assembly soap-k31.fa,soap-k41.fa,soap-k51.fa --left reads_1.fq --right reads_2.fq --output soap-merged.fa --threads 12`
|
37
44
|
|
45
|
+
### Contributing
|
46
|
+
|
47
|
+
[](https://gitter.im/cboursnell/transfuse?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
|
48
|
+
|
49
|
+
Tranfuse is currently in development.
|
50
|
+
|
51
|
+
If you want to suggest, and maybe implement, a new feature, please suggest it on the tracker first.
|
52
|
+
|
38
53
|
### License
|
39
54
|
|
40
55
|
This is adademic software - please cite us if you use it in your work.
|
data/bin/transfuse
CHANGED
@@ -23,26 +23,41 @@ opts = Trollop::options do
|
|
23
23
|
|
24
24
|
EOS
|
25
25
|
opt :assemblies, "assembly files in FASTA format, comma-separated",
|
26
|
-
:type => String
|
26
|
+
:type => String
|
27
27
|
opt :left, "left reads file in FASTQ format",
|
28
28
|
:type => String
|
29
29
|
opt :right, "right reads file in FASTQ format",
|
30
30
|
:type => String
|
31
|
-
opt :
|
32
|
-
:type => String
|
33
|
-
opt :output, "write merged assembly to file",
|
34
|
-
:type => String, :required => :true
|
31
|
+
opt :output, "write merged assembly to file", :type => String
|
35
32
|
opt :threads, "number of threads", :type => :int, :default => 1
|
36
33
|
opt :id, "sequence identity to cluster at", :type => :float, :default => 1.0
|
34
|
+
# opt :install, "install dependencies"
|
37
35
|
opt :verbose, "be verbose"
|
38
36
|
end
|
39
37
|
|
40
38
|
transfuse = Transfuse::Transfuse.new opts.threads, opts.verbose
|
41
39
|
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
40
|
+
# if opts.install
|
41
|
+
# transfuse.install_dependencies
|
42
|
+
# else
|
43
|
+
# missing = transfuse.check_dependencies
|
44
|
+
# unless missing.empty?
|
45
|
+
# list = missing.collect {|i| "#{i.name}:#{i.version}"}.join("\n - ")
|
46
|
+
# msg = "Not installed: \n - #{list}"
|
47
|
+
# abort msg
|
48
|
+
# end
|
49
|
+
# end
|
50
|
+
|
51
|
+
assembly_files = transfuse.check_files(opts.assemblies, "assemblies")
|
52
|
+
left = transfuse.check_files(opts.left, "left")
|
53
|
+
right = transfuse.check_files(opts.right, "right")
|
54
|
+
if opts.output
|
55
|
+
if File.exist?(opts.output)
|
56
|
+
abort "Output #{opts.output} already exists"
|
57
|
+
end
|
58
|
+
else
|
59
|
+
abort "Please specify an output with the --output option"
|
60
|
+
end
|
46
61
|
|
47
62
|
if opts.scores
|
48
63
|
# load the scores from the comma separated list of files
|
data/lib/transfuse/consensus.rb
CHANGED
@@ -12,87 +12,81 @@ module Transfuse
|
|
12
12
|
@verbose = verbose
|
13
13
|
end
|
14
14
|
|
15
|
+
def count_exons list
|
16
|
+
exon_counts = {}
|
17
|
+
list.each_with_index do |hash, index|
|
18
|
+
seq = hash[:seq]
|
19
|
+
exon_count=0
|
20
|
+
gap_count=0
|
21
|
+
prev=""
|
22
|
+
seq.each_char do |c|
|
23
|
+
if c=="-"
|
24
|
+
base = "-"
|
25
|
+
else
|
26
|
+
base = "*"
|
27
|
+
end
|
28
|
+
|
29
|
+
if base!=prev
|
30
|
+
if c=="-"
|
31
|
+
gap_count+=1
|
32
|
+
else
|
33
|
+
exon_count+=1
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
if c=="-"
|
38
|
+
prev = "-"
|
39
|
+
else
|
40
|
+
prev = "*"
|
41
|
+
end
|
42
|
+
end
|
43
|
+
exon_counts[exon_count] ||= []
|
44
|
+
exon_counts[exon_count] << index
|
45
|
+
end
|
46
|
+
return exon_counts
|
47
|
+
end
|
48
|
+
|
15
49
|
def run msa, scores, output
|
16
|
-
|
50
|
+
preoutput = "#{File.basename(output, File.extname(output))}_cons.fa"
|
51
|
+
return preoutput if File.exist?(preoutput)
|
17
52
|
print "writing consensus " if @verbose
|
18
53
|
# msa is a hash
|
19
54
|
# key = cluster id
|
20
55
|
# value = list
|
21
56
|
# list of sequences in cluster aligned with gaps
|
22
|
-
preoutput = "#{File.basename(output, File.extname(output))}_cons.fa"
|
23
57
|
count = 0
|
24
58
|
File.open("#{output}.data", "w") do |out2|
|
25
59
|
File.open(preoutput, "w") do |out|
|
26
|
-
msa.each do |id,
|
60
|
+
msa.each do |id, seq_list|
|
27
61
|
count+=1
|
28
62
|
print "." if count%5_000==0 and @verbose
|
29
63
|
exons={}
|
30
|
-
cons =
|
31
|
-
length =
|
32
|
-
|
33
|
-
seq = hash[:seq]
|
34
|
-
name = hash[:name]
|
35
|
-
out2.write "#{id}\t#{scores[name][:score]}\t#{name}\n"
|
36
|
-
prev = ""
|
37
|
-
gap = 0
|
38
|
-
exon = 0
|
39
|
-
seq.each_char do |c|
|
40
|
-
if c=="-"
|
41
|
-
base="-"
|
42
|
-
else
|
43
|
-
base="*"
|
44
|
-
end
|
45
|
-
if base!=prev
|
46
|
-
if c=="-"
|
47
|
-
gap+=1
|
48
|
-
else
|
49
|
-
exon+=1
|
50
|
-
end
|
51
|
-
end
|
52
|
-
if c=="-"
|
53
|
-
prev = "-"
|
54
|
-
else
|
55
|
-
prev = "*"
|
56
|
-
end
|
57
|
-
end
|
58
|
-
exons[index] = exon
|
59
|
-
end
|
64
|
+
cons = {}
|
65
|
+
length = seq_list[0][:seq].length
|
66
|
+
exons = count_exons(seq_list)
|
60
67
|
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
counts[seq[i]]||=0
|
69
|
-
counts[seq[i]] += 1
|
70
|
-
if exons[index]==1
|
71
|
-
base = seq[i]
|
68
|
+
exons.each do |count, list|
|
69
|
+
0.upto(length-1) do |pos|
|
70
|
+
base = "N"
|
71
|
+
list.each do |index|
|
72
|
+
b = seq_list[index][:seq][pos]
|
73
|
+
if b != "-" and b != "N"
|
74
|
+
base = b
|
72
75
|
end
|
73
76
|
end
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
consensus << base
|
79
|
-
end
|
80
|
-
|
81
|
-
if consensus.count("N") < consensus.length.to_f*0.5
|
82
|
-
cons << consensus
|
83
|
-
end
|
84
|
-
|
85
|
-
list.each_with_index do |hash, index|
|
86
|
-
if exons[index] > 1
|
87
|
-
cons << hash[:seq].delete("-")
|
77
|
+
if base != "N"
|
78
|
+
cons[count]||=""
|
79
|
+
cons[count]<<base
|
80
|
+
end
|
88
81
|
end
|
89
82
|
end
|
90
83
|
|
91
|
-
cons.each_with_index do |s,index|
|
84
|
+
cons.each_with_index do |s, index|
|
92
85
|
out.write ">contig#{id}.#{index+1}\n"
|
93
|
-
out.write "#{s}\n"
|
86
|
+
out.write "#{s[1]}\n"
|
94
87
|
end
|
95
88
|
|
89
|
+
|
96
90
|
end # msa.each
|
97
91
|
end # file
|
98
92
|
end # file open
|
data/lib/transfuse/transfuse.rb
CHANGED
@@ -18,8 +18,29 @@ module Transfuse
|
|
18
18
|
@verbose = verbose
|
19
19
|
end
|
20
20
|
|
21
|
-
def
|
21
|
+
def check_dependencies
|
22
|
+
# Check dependencies if they are relevant to the command issued,
|
23
|
+
# and handle any commands to install missing ones
|
24
|
+
gem_dir = Gem.loaded_specs['transfuse'].full_gem_path
|
25
|
+
gem_deps = File.join(gem_dir, 'deps', 'deps.yaml')
|
26
|
+
|
27
|
+
return Bindeps.missing gem_deps
|
28
|
+
|
29
|
+
end # check_dependencies
|
30
|
+
|
31
|
+
def install_dependencies
|
32
|
+
# Check dependencies if they are relevant to the command issued,
|
33
|
+
# and handle any commands to install missing ones
|
34
|
+
gem_dir = Gem.loaded_specs['transfuse'].full_gem_path
|
35
|
+
gem_deps = File.join(gem_dir, 'deps', 'deps.yaml')
|
36
|
+
|
37
|
+
Bindeps.require gem_deps
|
38
|
+
|
39
|
+
end # check_dependencies
|
40
|
+
|
41
|
+
def check_files string, option
|
22
42
|
# puts "check file string: #{string}" if @verbose
|
43
|
+
abort "Please specify --#{option} option" if string.nil?
|
23
44
|
list = []
|
24
45
|
string.split(",").each do |file|
|
25
46
|
file = File.expand_path(file)
|
@@ -205,8 +226,8 @@ module Transfuse
|
|
205
226
|
|
206
227
|
end
|
207
228
|
File.open("summary.txt","w") do |out|
|
208
|
-
out.write "fasta\tscore\toptimal\n"
|
209
|
-
out.write "#{fasta}\t#{transrater.assembly_score}\t#{transrater.assembly_optimal_score("prefix")}\n"
|
229
|
+
out.write "fasta\tscore\toptimal\tcutoff\n"
|
230
|
+
out.write "#{fasta}\t#{transrater.assembly_score}\t#{transrater.assembly_optimal_score("prefix").join("\t")}\n"
|
210
231
|
end
|
211
232
|
end
|
212
233
|
end
|
data/lib/transfuse/version.rb
CHANGED
data/test/test_cluster.rb
CHANGED
@@ -8,7 +8,7 @@ class TestCluster < Test::Unit::TestCase
|
|
8
8
|
context 'cluster' do
|
9
9
|
|
10
10
|
setup do
|
11
|
-
@cluster = Transfuse::Cluster.new 4
|
11
|
+
@cluster = Transfuse::Cluster.new 4, true, 1.0
|
12
12
|
end
|
13
13
|
|
14
14
|
teardown do
|
@@ -18,14 +18,11 @@ class TestCluster < Test::Unit::TestCase
|
|
18
18
|
assert @cluster
|
19
19
|
end
|
20
20
|
|
21
|
-
should 'generate cd-hit command' do
|
22
|
-
cmd = @cluster.generate_cdhit_command "assembly1.fasta", "output.fa"
|
23
|
-
end
|
24
|
-
|
25
21
|
should 'generate vsearch command' do
|
26
|
-
output = @cluster.generate_vsearch_command "assembly1.fasta", "output.txt"
|
27
|
-
a = "vsearch --cluster_fast assembly1.fasta --id 1.
|
28
|
-
a << "--strand both --uc output.txt
|
22
|
+
output = @cluster.generate_vsearch_command "assembly1.fasta", "output.txt", "output.msa"
|
23
|
+
a = "vsearch --cluster_fast assembly1.fasta --id 1.0 "
|
24
|
+
a << "--iddef 0 --qmask none --strand both --uc output.txt "
|
25
|
+
a << "--msaout output.msa --threads 4"
|
29
26
|
b = output.split(" ")
|
30
27
|
b[0] = File.basename(b[0])
|
31
28
|
output = b.join(" ")
|
data/test/test_transfuse.rb
CHANGED
@@ -18,7 +18,7 @@ class TestTransfuse < Test::Unit::TestCase
|
|
18
18
|
list = []
|
19
19
|
list << File.join(File.dirname(__FILE__), 'data', 'assembly1.fasta')
|
20
20
|
list << File.join(File.dirname(__FILE__), 'data', 'assembly2.fasta')
|
21
|
-
files = @fuser.check_files
|
21
|
+
files = @fuser.check_files(list.join(","), "option")
|
22
22
|
assert_equal 2, files.length, "length"
|
23
23
|
end
|
24
24
|
|
@@ -41,7 +41,7 @@ class TestTransfuse < Test::Unit::TestCase
|
|
41
41
|
tmpdir = Dir.mktmpdir
|
42
42
|
Dir.chdir(tmpdir) do
|
43
43
|
file = File.join(File.dirname(__FILE__), 'data', 'assembly1.fasta')
|
44
|
-
hash = @fuser.cluster
|
44
|
+
hash = @fuser.cluster(file, 1.0)
|
45
45
|
assert_equal 250, hash.size, "output size"
|
46
46
|
end
|
47
47
|
# end
|
data/transfuse.gemspec
CHANGED
@@ -15,15 +15,16 @@ Gem::Specification.new do |gem|
|
|
15
15
|
gem.homepage = 'https://github.com/cboursnell/transfuse'
|
16
16
|
gem.license = 'MIT'
|
17
17
|
|
18
|
-
gem.add_dependency 'trollop', '~> 2.
|
19
|
-
gem.add_dependency 'bio', '~> 1.
|
18
|
+
gem.add_dependency 'trollop', '~> 2.1', '>= 2.1.2'
|
19
|
+
gem.add_dependency 'bio', '~> 1.5', '>= 1.5.0'
|
20
20
|
gem.add_dependency 'fixwhich', '~> 1.0', '>= 1.0.2'
|
21
|
-
gem.add_dependency 'bindeps', '~> 1.
|
21
|
+
gem.add_dependency 'bindeps', '~> 1.2', '>= 1.2.0'
|
22
22
|
gem.add_dependency 'transrate', '~> 1.0', '>= 1.0.1'
|
23
|
+
gem.add_dependency 'bundler', '~> 1.10', '>= 1.10.6'
|
23
24
|
|
24
|
-
gem.add_development_dependency 'rake', '~> 10.
|
25
|
+
gem.add_development_dependency 'rake', '~> 10.4', '>= 10.4.2'
|
25
26
|
gem.add_development_dependency 'turn', '~> 0.9', '>= 0.9.7'
|
26
|
-
gem.add_development_dependency 'simplecov', '~> 0.
|
27
|
+
gem.add_development_dependency 'simplecov', '~> 0.10', '>= 0.10.0'
|
27
28
|
gem.add_development_dependency 'shoulda-context', '~> 1.2', '>= 1.2.1'
|
28
|
-
gem.add_development_dependency 'coveralls', '~> 0.
|
29
|
+
gem.add_development_dependency 'coveralls', '~> 0.8', '>= 0.8.2'
|
29
30
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: transfuse
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Richard Smith-Unna
|
@@ -17,34 +17,40 @@ dependencies:
|
|
17
17
|
requirements:
|
18
18
|
- - "~>"
|
19
19
|
- !ruby/object:Gem::Version
|
20
|
-
version: '2.
|
20
|
+
version: '2.1'
|
21
|
+
- - ">="
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: 2.1.2
|
21
24
|
type: :runtime
|
22
25
|
prerelease: false
|
23
26
|
version_requirements: !ruby/object:Gem::Requirement
|
24
27
|
requirements:
|
25
28
|
- - "~>"
|
26
29
|
- !ruby/object:Gem::Version
|
27
|
-
version: '2.
|
30
|
+
version: '2.1'
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 2.1.2
|
28
34
|
- !ruby/object:Gem::Dependency
|
29
35
|
name: bio
|
30
36
|
requirement: !ruby/object:Gem::Requirement
|
31
37
|
requirements:
|
32
38
|
- - "~>"
|
33
39
|
- !ruby/object:Gem::Version
|
34
|
-
version: '1.
|
40
|
+
version: '1.5'
|
35
41
|
- - ">="
|
36
42
|
- !ruby/object:Gem::Version
|
37
|
-
version: 1.
|
43
|
+
version: 1.5.0
|
38
44
|
type: :runtime
|
39
45
|
prerelease: false
|
40
46
|
version_requirements: !ruby/object:Gem::Requirement
|
41
47
|
requirements:
|
42
48
|
- - "~>"
|
43
49
|
- !ruby/object:Gem::Version
|
44
|
-
version: '1.
|
50
|
+
version: '1.5'
|
45
51
|
- - ">="
|
46
52
|
- !ruby/object:Gem::Version
|
47
|
-
version: 1.
|
53
|
+
version: 1.5.0
|
48
54
|
- !ruby/object:Gem::Dependency
|
49
55
|
name: fixwhich
|
50
56
|
requirement: !ruby/object:Gem::Requirement
|
@@ -71,20 +77,20 @@ dependencies:
|
|
71
77
|
requirements:
|
72
78
|
- - "~>"
|
73
79
|
- !ruby/object:Gem::Version
|
74
|
-
version: '1.
|
80
|
+
version: '1.2'
|
75
81
|
- - ">="
|
76
82
|
- !ruby/object:Gem::Version
|
77
|
-
version: 1.0
|
83
|
+
version: 1.2.0
|
78
84
|
type: :runtime
|
79
85
|
prerelease: false
|
80
86
|
version_requirements: !ruby/object:Gem::Requirement
|
81
87
|
requirements:
|
82
88
|
- - "~>"
|
83
89
|
- !ruby/object:Gem::Version
|
84
|
-
version: '1.
|
90
|
+
version: '1.2'
|
85
91
|
- - ">="
|
86
92
|
- !ruby/object:Gem::Version
|
87
|
-
version: 1.0
|
93
|
+
version: 1.2.0
|
88
94
|
- !ruby/object:Gem::Dependency
|
89
95
|
name: transrate
|
90
96
|
requirement: !ruby/object:Gem::Requirement
|
@@ -105,26 +111,46 @@ dependencies:
|
|
105
111
|
- - ">="
|
106
112
|
- !ruby/object:Gem::Version
|
107
113
|
version: 1.0.1
|
114
|
+
- !ruby/object:Gem::Dependency
|
115
|
+
name: bundler
|
116
|
+
requirement: !ruby/object:Gem::Requirement
|
117
|
+
requirements:
|
118
|
+
- - "~>"
|
119
|
+
- !ruby/object:Gem::Version
|
120
|
+
version: '1.10'
|
121
|
+
- - ">="
|
122
|
+
- !ruby/object:Gem::Version
|
123
|
+
version: 1.10.6
|
124
|
+
type: :runtime
|
125
|
+
prerelease: false
|
126
|
+
version_requirements: !ruby/object:Gem::Requirement
|
127
|
+
requirements:
|
128
|
+
- - "~>"
|
129
|
+
- !ruby/object:Gem::Version
|
130
|
+
version: '1.10'
|
131
|
+
- - ">="
|
132
|
+
- !ruby/object:Gem::Version
|
133
|
+
version: 1.10.6
|
108
134
|
- !ruby/object:Gem::Dependency
|
109
135
|
name: rake
|
110
136
|
requirement: !ruby/object:Gem::Requirement
|
111
137
|
requirements:
|
112
138
|
- - "~>"
|
113
139
|
- !ruby/object:Gem::Version
|
114
|
-
version: '10.
|
140
|
+
version: '10.4'
|
115
141
|
- - ">="
|
116
142
|
- !ruby/object:Gem::Version
|
117
|
-
version: 10.
|
143
|
+
version: 10.4.2
|
118
144
|
type: :development
|
119
145
|
prerelease: false
|
120
146
|
version_requirements: !ruby/object:Gem::Requirement
|
121
147
|
requirements:
|
122
148
|
- - "~>"
|
123
149
|
- !ruby/object:Gem::Version
|
124
|
-
version: '10.
|
150
|
+
version: '10.4'
|
125
151
|
- - ">="
|
126
152
|
- !ruby/object:Gem::Version
|
127
|
-
version: 10.
|
153
|
+
version: 10.4.2
|
128
154
|
- !ruby/object:Gem::Dependency
|
129
155
|
name: turn
|
130
156
|
requirement: !ruby/object:Gem::Requirement
|
@@ -151,20 +177,20 @@ dependencies:
|
|
151
177
|
requirements:
|
152
178
|
- - "~>"
|
153
179
|
- !ruby/object:Gem::Version
|
154
|
-
version: '0.
|
180
|
+
version: '0.10'
|
155
181
|
- - ">="
|
156
182
|
- !ruby/object:Gem::Version
|
157
|
-
version: 0.
|
183
|
+
version: 0.10.0
|
158
184
|
type: :development
|
159
185
|
prerelease: false
|
160
186
|
version_requirements: !ruby/object:Gem::Requirement
|
161
187
|
requirements:
|
162
188
|
- - "~>"
|
163
189
|
- !ruby/object:Gem::Version
|
164
|
-
version: '0.
|
190
|
+
version: '0.10'
|
165
191
|
- - ">="
|
166
192
|
- !ruby/object:Gem::Version
|
167
|
-
version: 0.
|
193
|
+
version: 0.10.0
|
168
194
|
- !ruby/object:Gem::Dependency
|
169
195
|
name: shoulda-context
|
170
196
|
requirement: !ruby/object:Gem::Requirement
|
@@ -191,14 +217,20 @@ dependencies:
|
|
191
217
|
requirements:
|
192
218
|
- - "~>"
|
193
219
|
- !ruby/object:Gem::Version
|
194
|
-
version: '0.
|
220
|
+
version: '0.8'
|
221
|
+
- - ">="
|
222
|
+
- !ruby/object:Gem::Version
|
223
|
+
version: 0.8.2
|
195
224
|
type: :development
|
196
225
|
prerelease: false
|
197
226
|
version_requirements: !ruby/object:Gem::Requirement
|
198
227
|
requirements:
|
199
228
|
- - "~>"
|
200
229
|
- !ruby/object:Gem::Version
|
201
|
-
version: '0.
|
230
|
+
version: '0.8'
|
231
|
+
- - ">="
|
232
|
+
- !ruby/object:Gem::Version
|
233
|
+
version: 0.8.2
|
202
234
|
description: See summary
|
203
235
|
email:
|
204
236
|
- rds45@cam.ac.uk
|