sequenceserver 2.0.0.rc3 → 2.0.0.rc8
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/bin/chromedriver +0 -0
- data/bin/geckodriver +0 -0
- data/bin/sequenceserver +39 -29
- data/lib/sequenceserver.rb +48 -22
- data/lib/sequenceserver/blast/job.rb +11 -1
- data/lib/sequenceserver/database.rb +7 -168
- data/lib/sequenceserver/exceptions.rb +14 -0
- data/lib/sequenceserver/makeblastdb.rb +323 -0
- data/lib/sequenceserver/routes.rb +6 -1
- data/lib/sequenceserver/sequence.rb +1 -1
- data/lib/sequenceserver/version.rb +1 -1
- data/public/css/sequenceserver.css +10 -3
- data/public/css/sequenceserver.min.css +1 -1
- data/public/js/error_modal.js +27 -29
- data/public/js/hit.js +14 -5
- data/public/js/jquery_world.js +1 -1
- data/public/js/query.js +31 -15
- data/public/js/report.js +13 -6
- data/public/js/search.js +44 -24
- data/public/js/sequence_modal.js +10 -5
- data/public/js/sidebar.js +52 -28
- data/public/sequenceserver-report.min.js +17 -17
- data/public/sequenceserver-search.min.js +2 -2
- data/views/layout.erb +5 -1
- data/views/report.erb +1 -1
- data/views/search.erb +1 -1
- metadata +9 -450
- data/.bootstrap/config.json +0 -433
- data/.codeclimate.yml +0 -31
- data/.csslintrc +0 -2
- data/.eslintignore +0 -1
- data/.eslintrc.json +0 -36
- data/.gitignore +0 -56
- data/.mailmap +0 -5
- data/.rspec +0 -3
- data/.rubocop.yml +0 -61
- data/.travis.yml +0 -74
- data/AppImage/recipe.yml +0 -15
- data/AppImage/sequenceserver.desktop +0 -8
- data/AppImage/sequenceserver.png +0 -0
- data/AppImage/sequenceserver.sh +0 -16
- data/Dockerfile +0 -23
- data/LICENSE.txt +0 -661
- data/LICENSE/Apache.txt +0 -176
- data/LICENSE/d3.txt +0 -26
- data/README.md +0 -161
- data/package.json +0 -48
- data/public/vendor/.dependencies.json +0 -18
- data/public/vendor/.loaderversions +0 -1
- data/public/vendor/github/components/jquery@2.1.4/.gitignore +0 -1
- data/public/vendor/github/components/jquery@2.1.4/.jspm-hash +0 -1
- data/public/vendor/github/components/jquery@2.1.4/.jspm.json +0 -37
- data/public/vendor/github/components/jqueryui@1.11.4/.gitignore +0 -4
- data/public/vendor/github/components/jqueryui@1.11.4/.jspm-hash +0 -1
- data/public/vendor/github/components/jqueryui@1.11.4/.jspm.json +0 -136
- data/public/vendor/github/components/jqueryui@1.11.4/ui/.jshintrc +0 -24
- data/public/vendor/github/jspm/nodelibs-buffer@0.1.0/.jspm-hash +0 -1
- data/public/vendor/github/jspm/nodelibs-buffer@0.1.0/.jspm.json +0 -10
- data/public/vendor/github/jspm/nodelibs-events@0.1.1/.jspm-hash +0 -1
- data/public/vendor/github/jspm/nodelibs-events@0.1.1/.jspm.json +0 -10
- data/public/vendor/github/jspm/nodelibs-fs@0.1.2/.jspm-hash +0 -1
- data/public/vendor/github/jspm/nodelibs-module@0.1.0/.jspm-hash +0 -1
- data/public/vendor/github/jspm/nodelibs-module@0.1.0/.jspm.json +0 -3
- data/public/vendor/github/jspm/nodelibs-path@0.1.0/.jspm-hash +0 -1
- data/public/vendor/github/jspm/nodelibs-path@0.1.0/.jspm.json +0 -10
- data/public/vendor/github/jspm/nodelibs-process@0.1.1/.jspm-hash +0 -1
- data/public/vendor/github/jspm/nodelibs-stream@0.1.0/.jspm-hash +0 -1
- data/public/vendor/github/jspm/nodelibs-stream@0.1.0/.jspm.json +0 -10
- data/public/vendor/github/jspm/nodelibs-util@0.1.0/.jspm-hash +0 -1
- data/public/vendor/github/jspm/nodelibs-util@0.1.0/.jspm.json +0 -10
- data/public/vendor/github/mbostock/d3@3.5.6/.jspm-hash +0 -1
- data/public/vendor/github/mbostock/d3@3.5.6/.jspm.json +0 -76
- data/public/vendor/github/nicgirault/circosJs@1.7.0/.gitignore +0 -10
- data/public/vendor/github/nicgirault/circosJs@1.7.0/.jspm-hash +0 -1
- data/public/vendor/github/systemjs/plugin-css@0.1.15/.gitignore +0 -1
- data/public/vendor/github/systemjs/plugin-css@0.1.15/.jspm-hash +0 -1
- data/public/vendor/github/systemjs/plugin-css@0.1.15/.jspm.json +0 -4
- data/public/vendor/github/systemjs/plugin-json@0.1.0/.jspm-hash +0 -1
- data/public/vendor/github/twbs/bootstrap@3.3.5/.jspm-hash +0 -1
- data/public/vendor/github/twbs/bootstrap@3.3.5/.jspm.json +0 -100
- data/public/vendor/npm/amdefine@1.0.0/.jspm-hash +0 -1
- data/public/vendor/npm/amdefine@1.0.0/.jspm.json +0 -55
- data/public/vendor/npm/babel-core@5.8.23/.jspm-hash +0 -1
- data/public/vendor/npm/babel-runtime@5.8.20/.jspm-hash +0 -1
- data/public/vendor/npm/babel-runtime@5.8.20/.npmignore +0 -2
- data/public/vendor/npm/base62@0.1.1/.jspm-hash +0 -1
- data/public/vendor/npm/base62@0.1.1/.jspm.json +0 -49
- data/public/vendor/npm/base62@0.1.1/.travis.yml +0 -4
- data/public/vendor/npm/base64-js@0.0.8/.jspm-hash +0 -1
- data/public/vendor/npm/base64-js@0.0.8/.jspm.json +0 -77
- data/public/vendor/npm/base64-js@0.0.8/.travis.yml +0 -5
- data/public/vendor/npm/buffer@3.4.3/.jspm-hash +0 -1
- data/public/vendor/npm/buffer@3.4.3/.jspm.json +0 -105
- data/public/vendor/npm/buffer@3.4.3/.npmignore +0 -1
- data/public/vendor/npm/buffer@3.4.3/.travis.yml +0 -8
- data/public/vendor/npm/buffer@3.4.3/.zuul.yml +0 -20
- data/public/vendor/npm/core-js@1.1.2/.eslintrc +0 -36
- data/public/vendor/npm/core-js@1.1.2/.gitattributes +0 -1
- data/public/vendor/npm/core-js@1.1.2/.jspm-hash +0 -1
- data/public/vendor/npm/core-js@1.1.2/.npmignore +0 -10
- data/public/vendor/npm/core-js@1.1.2/.travis.yml +0 -3
- data/public/vendor/npm/core-util-is@1.0.1/.jspm-hash +0 -1
- data/public/vendor/npm/core-util-is@1.0.1/.jspm.json +0 -58
- data/public/vendor/npm/envify@3.4.0/.jspm-hash +0 -1
- data/public/vendor/npm/envify@3.4.0/.jspm.json +0 -72
- data/public/vendor/npm/envify@3.4.0/.npmignore +0 -2
- data/public/vendor/npm/esprima-fb@13001.1001.0-dev-harmony-fb/.jspm-hash +0 -1
- data/public/vendor/npm/esprima-fb@13001.1001.0-dev-harmony-fb/.jspm.json +0 -102
- data/public/vendor/npm/events@1.0.2/.jspm-hash +0 -1
- data/public/vendor/npm/events@1.0.2/.jspm.json +0 -67
- data/public/vendor/npm/events@1.0.2/.npmignore +0 -1
- data/public/vendor/npm/events@1.0.2/.travis.yml +0 -7
- data/public/vendor/npm/events@1.0.2/.zuul.yml +0 -12
- data/public/vendor/npm/font-awesome@4.4.0/.jspm-hash +0 -1
- data/public/vendor/npm/font-awesome@4.4.0/.jspm.json +0 -81
- data/public/vendor/npm/font-awesome@4.4.0/.npmignore +0 -42
- data/public/vendor/npm/ieee754@1.1.6/.jspm-hash +0 -1
- data/public/vendor/npm/ieee754@1.1.6/.jspm.json +0 -70
- data/public/vendor/npm/ieee754@1.1.6/.travis.yml +0 -7
- data/public/vendor/npm/ieee754@1.1.6/.zuul.yml +0 -20
- data/public/vendor/npm/inherits@2.0.1/.jspm-hash +0 -1
- data/public/vendor/npm/inherits@2.0.1/.jspm.json +0 -60
- data/public/vendor/npm/is-array@1.0.1/.jepso-ci.json +0 -3
- data/public/vendor/npm/is-array@1.0.1/.jspm-hash +0 -1
- data/public/vendor/npm/is-array@1.0.1/.jspm.json +0 -42
- data/public/vendor/npm/is-array@1.0.1/.npmignore +0 -0
- data/public/vendor/npm/isarray@0.0.1/.jspm-hash +0 -1
- data/public/vendor/npm/isarray@0.0.1/.jspm.json +0 -51
- data/public/vendor/npm/jstransform@10.1.0/.jshintrc +0 -28
- data/public/vendor/npm/jstransform@10.1.0/.jspm-hash +0 -1
- data/public/vendor/npm/jstransform@10.1.0/.jspm.json +0 -95
- data/public/vendor/npm/jstransform@10.1.0/.npmignore +0 -4
- data/public/vendor/npm/jstransform@10.1.0/.travis.yml +0 -8
- data/public/vendor/npm/path-browserify@0.0.0/.jspm-hash +0 -1
- data/public/vendor/npm/path-browserify@0.0.0/.jspm.json +0 -56
- data/public/vendor/npm/process@0.10.1/.jspm-hash +0 -1
- data/public/vendor/npm/react@0.13.3/.jspm-hash +0 -1
- data/public/vendor/npm/react@0.13.3/.jspm.json +0 -77
- data/public/vendor/npm/readable-stream@1.1.13/.jspm-hash +0 -1
- data/public/vendor/npm/readable-stream@1.1.13/.jspm.json +0 -95
- data/public/vendor/npm/readable-stream@1.1.13/.npmignore +0 -5
- data/public/vendor/npm/source-map@0.1.31/.jspm-hash +0 -1
- data/public/vendor/npm/source-map@0.1.31/.jspm.json +0 -133
- data/public/vendor/npm/source-map@0.1.31/.npmignore +0 -2
- data/public/vendor/npm/source-map@0.1.31/.travis.yml +0 -4
- data/public/vendor/npm/stream-browserify@1.0.0/.jspm-hash +0 -1
- data/public/vendor/npm/stream-browserify@1.0.0/.jspm.json +0 -77
- data/public/vendor/npm/stream-browserify@1.0.0/.travis.yml +0 -4
- data/public/vendor/npm/string_decoder@0.10.31/.jspm-hash +0 -1
- data/public/vendor/npm/string_decoder@0.10.31/.jspm.json +0 -58
- data/public/vendor/npm/string_decoder@0.10.31/.npmignore +0 -2
- data/public/vendor/npm/through@2.3.8/.jspm-hash +0 -1
- data/public/vendor/npm/through@2.3.8/.jspm.json +0 -72
- data/public/vendor/npm/through@2.3.8/.travis.yml +0 -5
- data/public/vendor/npm/underscore@1.8.3/.jspm-hash +0 -1
- data/public/vendor/npm/underscore@1.8.3/.jspm.json +0 -74
- data/public/vendor/npm/util@0.10.3/.jspm-hash +0 -1
- data/public/vendor/npm/util@0.10.3/.jspm.json +0 -58
- data/public/vendor/npm/util@0.10.3/.npmignore +0 -1
- data/public/vendor/npm/util@0.10.3/.travis.yml +0 -8
- data/public/vendor/npm/util@0.10.3/.zuul.yml +0 -10
- data/public/vendor/npm/webshim@1.15.8/.gitattributes +0 -12
- data/public/vendor/npm/webshim@1.15.8/.jspm-hash +0 -1
- data/public/vendor/npm/webshim@1.15.8/.jspm.json +0 -92
- data/public/vendor/npm/webshim@1.15.8/.npmignore +0 -16
- data/public/vendor/npm/webshim@1.15.8/.project +0 -12
- data/public/vendor/npm/webshim@1.15.8/demos/demos/filereader/upload/.keep +0 -0
- data/sequenceserver.gemspec +0 -55
- data/spec/blast_versions/blast_2.2.30/blast_2.2.30_spec.rb +0 -228
- data/spec/blast_versions/blast_2.2.30/import_spec_capybara_local_2.2.30.rb +0 -583
- data/spec/blast_versions/blast_2.2.31/blast_2.2.31_spec.rb +0 -228
- data/spec/blast_versions/blast_2.2.31/import_spec_capybara_local_2.2.31.rb +0 -587
- data/spec/blast_versions/blast_2.3.0/blast_2.3.0_spec.rb +0 -229
- data/spec/blast_versions/blast_2.3.0/import_spec_capybara_local_2.3.0.rb +0 -587
- data/spec/blast_versions/blast_2.4.0/blast_2.4.0_spec.rb +0 -228
- data/spec/blast_versions/blast_2.4.0/import_spec_capybara_local_2.4.0.rb +0 -588
- data/spec/blast_versions/blast_2.5.0/blast_2.5.0_spec.rb +0 -228
- data/spec/blast_versions/blast_2.5.0/import_spec_capybara_local_2.5.0.rb +0 -587
- data/spec/blast_versions/blast_2.6.0/blast_2.6.0_spec.rb +0 -228
- data/spec/blast_versions/blast_2.6.0/import_spec_capybara_local_2.6.0.rb +0 -587
- data/spec/blast_versions/blast_2.7.1/blast_2.7.1_spec.rb +0 -228
- data/spec/blast_versions/blast_2.7.1/import_spec_capybara_local_2.7.1.rb +0 -587
- data/spec/blast_versions/blast_2.8.1/blast_2.8.1_spec.rb +0 -228
- data/spec/blast_versions/blast_2.8.1/import_spec_capybara_local_2.8.1.rb +0 -587
- data/spec/blast_versions/blast_2.9.0/blast_2.9.0_spec.rb +0 -228
- data/spec/blast_versions/blast_2.9.0/import_spec_capybara_local_2.9.0.rb +0 -585
- data/spec/blast_versions/diamond_0.9.24/diamond_0.9.24_spec.rb +0 -176
- data/spec/blast_versions/diamond_0.9.24/import_spec_capybara_local_0.9.24.rb +0 -237
- data/spec/capybara_spec.rb +0 -334
- data/spec/config_spec.rb +0 -87
- data/spec/database/funky_ids/funky_ids.fa +0 -16
- data/spec/database/funky_ids/funky_ids.fa.nhd +0 -8
- data/spec/database/funky_ids/funky_ids.fa.nhi +0 -0
- data/spec/database/funky_ids/funky_ids.fa.nhr +0 -0
- data/spec/database/funky_ids/funky_ids.fa.nin +0 -0
- data/spec/database/funky_ids/funky_ids.fa.nog +0 -0
- data/spec/database/funky_ids/funky_ids.fa.nsd +0 -15
- data/spec/database/funky_ids/funky_ids.fa.nsi +0 -0
- data/spec/database/funky_ids/funky_ids.fa.nsq +0 -0
- data/spec/database/funky_sequences/README.md +0 -14
- data/spec/database/funky_sequences/funky_aa_sequences.fa +0 -7
- data/spec/database/funky_sequences/funky_aa_sequences.fa.phd +0 -3
- data/spec/database/funky_sequences/funky_aa_sequences.fa.phi +0 -0
- data/spec/database/funky_sequences/funky_aa_sequences.fa.phr +0 -0
- data/spec/database/funky_sequences/funky_aa_sequences.fa.pin +0 -0
- data/spec/database/funky_sequences/funky_aa_sequences.fa.pog +0 -0
- data/spec/database/funky_sequences/funky_aa_sequences.fa.psd +0 -6
- data/spec/database/funky_sequences/funky_aa_sequences.fa.psi +0 -0
- data/spec/database/funky_sequences/funky_aa_sequences.fa.psq +0 -0
- data/spec/database/funky_sequences/funky_na_sequences.fa +0 -2
- data/spec/database/funky_sequences/funky_na_sequences.fa.nhr +0 -0
- data/spec/database/funky_sequences/funky_na_sequences.fa.nin +0 -0
- data/spec/database/funky_sequences/funky_na_sequences.fa.nog +0 -0
- data/spec/database/funky_sequences/funky_na_sequences.fa.nsd +0 -2
- data/spec/database/funky_sequences/funky_na_sequences.fa.nsi +0 -0
- data/spec/database/funky_sequences/funky_na_sequences.fa.nsq +0 -0
- data/spec/database/ox_parse_error/query.fa +0 -1
- data/spec/database/ox_parse_error/rand1.fa +0 -2
- data/spec/database/ox_parse_error/rand1.fa.nhd +0 -1
- data/spec/database/ox_parse_error/rand1.fa.nhi +0 -0
- data/spec/database/ox_parse_error/rand1.fa.nhr +0 -0
- data/spec/database/ox_parse_error/rand1.fa.nin +0 -0
- data/spec/database/ox_parse_error/rand1.fa.nog +0 -0
- data/spec/database/ox_parse_error/rand1.fa.nsd +0 -2
- data/spec/database/ox_parse_error/rand1.fa.nsi +0 -0
- data/spec/database/ox_parse_error/rand1.fa.nsq +0 -0
- data/spec/database/ox_parse_error/rand2.fa +0 -2
- data/spec/database/ox_parse_error/rand2.fa.nhd +0 -1
- data/spec/database/ox_parse_error/rand2.fa.nhi +0 -0
- data/spec/database/ox_parse_error/rand2.fa.nhr +0 -0
- data/spec/database/ox_parse_error/rand2.fa.nin +0 -0
- data/spec/database/ox_parse_error/rand2.fa.nog +0 -0
- data/spec/database/ox_parse_error/rand2.fa.nsd +0 -2
- data/spec/database/ox_parse_error/rand2.fa.nsi +0 -0
- data/spec/database/ox_parse_error/rand2.fa.nsq +0 -0
- data/spec/database/ox_parse_error_unique_ids/query.fa +0 -1
- data/spec/database/ox_parse_error_unique_ids/rand1.fa +0 -2
- data/spec/database/ox_parse_error_unique_ids/rand1.fa.nhd +0 -1
- data/spec/database/ox_parse_error_unique_ids/rand1.fa.nhi +0 -0
- data/spec/database/ox_parse_error_unique_ids/rand1.fa.nhr +0 -0
- data/spec/database/ox_parse_error_unique_ids/rand1.fa.nin +0 -0
- data/spec/database/ox_parse_error_unique_ids/rand1.fa.nog +0 -0
- data/spec/database/ox_parse_error_unique_ids/rand1.fa.nsd +0 -2
- data/spec/database/ox_parse_error_unique_ids/rand1.fa.nsi +0 -0
- data/spec/database/ox_parse_error_unique_ids/rand1.fa.nsq +0 -0
- data/spec/database/ox_parse_error_unique_ids/rand2.fa +0 -2
- data/spec/database/ox_parse_error_unique_ids/rand2.fa.nhd +0 -1
- data/spec/database/ox_parse_error_unique_ids/rand2.fa.nhi +0 -0
- data/spec/database/ox_parse_error_unique_ids/rand2.fa.nhr +0 -0
- data/spec/database/ox_parse_error_unique_ids/rand2.fa.nin +0 -0
- data/spec/database/ox_parse_error_unique_ids/rand2.fa.nog +0 -0
- data/spec/database/ox_parse_error_unique_ids/rand2.fa.nsd +0 -2
- data/spec/database/ox_parse_error_unique_ids/rand2.fa.nsi +0 -0
- data/spec/database/ox_parse_error_unique_ids/rand2.fa.nsq +0 -0
- data/spec/database/pipe_in_seqid/pipe_in_seqid.fa +0 -6
- data/spec/database/pipe_in_seqid/pipe_in_seqid.fa.nhd +0 -1
- data/spec/database/pipe_in_seqid/pipe_in_seqid.fa.nhi +0 -0
- data/spec/database/pipe_in_seqid/pipe_in_seqid.fa.nhr +0 -0
- data/spec/database/pipe_in_seqid/pipe_in_seqid.fa.nin +0 -0
- data/spec/database/pipe_in_seqid/pipe_in_seqid.fa.nog +0 -0
- data/spec/database/pipe_in_seqid/pipe_in_seqid.fa.nsd +0 -2
- data/spec/database/pipe_in_seqid/pipe_in_seqid.fa.nsi +0 -0
- data/spec/database/pipe_in_seqid/pipe_in_seqid.fa.nsq +0 -0
- data/spec/database/sample/genome/Solenopsis_invicta/Solenopsis_invicta_gnG_subset.fasta.nhd +0 -8
- data/spec/database/sample/genome/Solenopsis_invicta/Solenopsis_invicta_gnG_subset.fasta.nhi +0 -0
- data/spec/database/sample/genome/Solenopsis_invicta/Solenopsis_invicta_gnG_subset.fasta.nhr +0 -0
- data/spec/database/sample/genome/Solenopsis_invicta/Solenopsis_invicta_gnG_subset.fasta.nin +0 -0
- data/spec/database/sample/genome/Solenopsis_invicta/Solenopsis_invicta_gnG_subset.fasta.nog +0 -0
- data/spec/database/sample/genome/Solenopsis_invicta/Solenopsis_invicta_gnG_subset.fasta.nsd +0 -16
- data/spec/database/sample/genome/Solenopsis_invicta/Solenopsis_invicta_gnG_subset.fasta.nsi +0 -0
- data/spec/database/sample/genome/Solenopsis_invicta/Solenopsis_invicta_gnG_subset.fasta.nsq +0 -0
- data/spec/database/sample/genome/Solenopsis_invicta/Solenopsis_invicta_gnG_subset.txt +0 -8
- data/spec/database/sample/links.rb +0 -23
- data/spec/database/sample/proteins/Solenopsis_invicta/Sinvicta2-2-3.prot.subset.fasta +0 -6449
- data/spec/database/sample/proteins/Solenopsis_invicta/Sinvicta2-2-3.prot.subset.fasta.phd +0 -1189
- data/spec/database/sample/proteins/Solenopsis_invicta/Sinvicta2-2-3.prot.subset.fasta.phi +0 -0
- data/spec/database/sample/proteins/Solenopsis_invicta/Sinvicta2-2-3.prot.subset.fasta.phr +0 -0
- data/spec/database/sample/proteins/Solenopsis_invicta/Sinvicta2-2-3.prot.subset.fasta.pin +0 -0
- data/spec/database/sample/proteins/Solenopsis_invicta/Sinvicta2-2-3.prot.subset.fasta.pog +0 -0
- data/spec/database/sample/proteins/Solenopsis_invicta/Sinvicta2-2-3.prot.subset.fasta.psd +0 -2378
- data/spec/database/sample/proteins/Solenopsis_invicta/Sinvicta2-2-3.prot.subset.fasta.psi +0 -0
- data/spec/database/sample/proteins/Solenopsis_invicta/Sinvicta2-2-3.prot.subset.fasta.psq +0 -0
- data/spec/database/sample/proteins/uniprot/2018-04-Swiss-Prot_insecta.fasta.phd +0 -9140
- data/spec/database/sample/proteins/uniprot/2018-04-Swiss-Prot_insecta.fasta.phi +0 -0
- data/spec/database/sample/proteins/uniprot/2018-04-Swiss-Prot_insecta.fasta.phr +0 -0
- data/spec/database/sample/proteins/uniprot/2018-04-Swiss-Prot_insecta.fasta.pin +0 -0
- data/spec/database/sample/proteins/uniprot/2018-04-Swiss-Prot_insecta.fasta.pog +0 -0
- data/spec/database/sample/proteins/uniprot/2018-04-Swiss-Prot_insecta.fasta.psd +0 -18280
- data/spec/database/sample/proteins/uniprot/2018-04-Swiss-Prot_insecta.fasta.psi +0 -0
- data/spec/database/sample/proteins/uniprot/2018-04-Swiss-Prot_insecta.fasta.psq +0 -0
- data/spec/database/sample/proteins/uniprot/URL +0 -1
- data/spec/database/sample/si_uniprot_idmap.yml +0 -14180
- data/spec/database/sample/transcripts/Solenopsis_invicta/Sinvicta2-2-3.cdna.subset.fasta +0 -5486
- data/spec/database/sample/transcripts/Solenopsis_invicta/Sinvicta2-2-3.cdna.subset.fasta.nhd +0 -473
- data/spec/database/sample/transcripts/Solenopsis_invicta/Sinvicta2-2-3.cdna.subset.fasta.nhi +0 -0
- data/spec/database/sample/transcripts/Solenopsis_invicta/Sinvicta2-2-3.cdna.subset.fasta.nhr +0 -0
- data/spec/database/sample/transcripts/Solenopsis_invicta/Sinvicta2-2-3.cdna.subset.fasta.nin +0 -0
- data/spec/database/sample/transcripts/Solenopsis_invicta/Sinvicta2-2-3.cdna.subset.fasta.nog +0 -0
- data/spec/database/sample/transcripts/Solenopsis_invicta/Sinvicta2-2-3.cdna.subset.fasta.nsd +0 -946
- data/spec/database/sample/transcripts/Solenopsis_invicta/Sinvicta2-2-3.cdna.subset.fasta.nsi +0 -0
- data/spec/database/sample/transcripts/Solenopsis_invicta/Sinvicta2-2-3.cdna.subset.fasta.nsq +0 -0
- data/spec/database/unformatted/Cardiocondyla_obscurior/Cobs1.4.proteins.fa +0 -148303
- data/spec/database/without_parse_seqids/without_parse_seqids.fa +0 -10
- data/spec/database/without_parse_seqids/without_parse_seqids.fa.phr +0 -0
- data/spec/database/without_parse_seqids/without_parse_seqids.fa.pin +0 -0
- data/spec/database/without_parse_seqids/without_parse_seqids.fa.psq +0 -0
- data/spec/database_spec.rb +0 -127
- data/spec/doctor_spec.disabled.rb +0 -107
- data/spec/dotdir/blast_2.2.30/blastn/BLASTN_XML_2.2.30.xml +0 -1201
- data/spec/dotdir/blast_2.2.30/blastn/job.yaml +0 -8
- data/spec/dotdir/blast_2.2.30/blastn_nohits/BLASTN_NO_HITS_XML_2.2.30.xml +0 -866
- data/spec/dotdir/blast_2.2.30/blastn_nohits/job.yaml +0 -8
- data/spec/dotdir/blast_2.2.30/blastp/BLASTP_XML_2.2.30.xml +0 -1181
- data/spec/dotdir/blast_2.2.30/blastp/job.yaml +0 -8
- data/spec/dotdir/blast_2.2.30/blastx/BLASTX_XML_2.2.30.xml +0 -1181
- data/spec/dotdir/blast_2.2.30/blastx/job.yaml +0 -8
- data/spec/dotdir/blast_2.2.30/tblastn/TBLASTN_XML_2.2.30.xml +0 -1181
- data/spec/dotdir/blast_2.2.30/tblastn/job.yaml +0 -8
- data/spec/dotdir/blast_2.2.30/tblastx/TBLASTX_XML_2.2.30.xml +0 -8857
- data/spec/dotdir/blast_2.2.30/tblastx/job.yaml +0 -8
- data/spec/dotdir/blast_2.2.31/blastn/BLASTN_XML_2.2.31.xml +0 -1201
- data/spec/dotdir/blast_2.2.31/blastn/job.yaml +0 -8
- data/spec/dotdir/blast_2.2.31/blastn_nohits/BLASTN_NO_HITS_XML_2.2.31.xml +0 -866
- data/spec/dotdir/blast_2.2.31/blastn_nohits/job.yaml +0 -8
- data/spec/dotdir/blast_2.2.31/blastp/BLASTP_XML_2.2.31.xml +0 -1181
- data/spec/dotdir/blast_2.2.31/blastp/job.yaml +0 -8
- data/spec/dotdir/blast_2.2.31/blastx/BLASTX_XML_2.2.31.xml +0 -1181
- data/spec/dotdir/blast_2.2.31/blastx/job.yaml +0 -8
- data/spec/dotdir/blast_2.2.31/tblastn/TBLASTN_XML_2.2.31.xml +0 -1181
- data/spec/dotdir/blast_2.2.31/tblastn/job.yaml +0 -8
- data/spec/dotdir/blast_2.2.31/tblastx/TBLASTX_XML_2.2.31.xml +0 -8857
- data/spec/dotdir/blast_2.2.31/tblastx/job.yaml +0 -8
- data/spec/dotdir/blast_2.3.0/blastn/BLASTN_XML_2.3.0.xml +0 -1201
- data/spec/dotdir/blast_2.3.0/blastn/job.yaml +0 -8
- data/spec/dotdir/blast_2.3.0/blastn_nohits/BLASTN_NO_HITS_XML_2.3.0.xml +0 -866
- data/spec/dotdir/blast_2.3.0/blastn_nohits/job.yaml +0 -8
- data/spec/dotdir/blast_2.3.0/blastp/BLASTP_XML_2.3.0.xml +0 -1181
- data/spec/dotdir/blast_2.3.0/blastp/job.yaml +0 -8
- data/spec/dotdir/blast_2.3.0/blastx/BLASTX_XML_2.3.0.xml +0 -1181
- data/spec/dotdir/blast_2.3.0/blastx/job.yaml +0 -8
- data/spec/dotdir/blast_2.3.0/tblastn/TBLASTN_XML_2.3.0.xml +0 -1181
- data/spec/dotdir/blast_2.3.0/tblastn/job.yaml +0 -8
- data/spec/dotdir/blast_2.3.0/tblastx/TBLASTX_XML_2.3.0.xml +0 -8857
- data/spec/dotdir/blast_2.3.0/tblastx/job.yaml +0 -8
- data/spec/dotdir/blast_2.4.0/blastn/BLASTN_XML_2.4.0.xml +0 -1201
- data/spec/dotdir/blast_2.4.0/blastn/job.yaml +0 -8
- data/spec/dotdir/blast_2.4.0/blastn_nohits/BLASTN_NO_HITS_XML_2.4.0.xml +0 -866
- data/spec/dotdir/blast_2.4.0/blastn_nohits/job.yaml +0 -8
- data/spec/dotdir/blast_2.4.0/blastp/BLASTP_XML_2.4.0.xml +0 -1181
- data/spec/dotdir/blast_2.4.0/blastp/job.yaml +0 -8
- data/spec/dotdir/blast_2.4.0/blastx/BLASTX_XML_2.4.0.xml +0 -1181
- data/spec/dotdir/blast_2.4.0/blastx/job.yaml +0 -8
- data/spec/dotdir/blast_2.4.0/tblastn/TBLASTN_XML_2.4.0.xml +0 -1181
- data/spec/dotdir/blast_2.4.0/tblastn/job.yaml +0 -8
- data/spec/dotdir/blast_2.4.0/tblastx/TBLASTX_XML_2.4.0.xml +0 -8857
- data/spec/dotdir/blast_2.4.0/tblastx/job.yaml +0 -8
- data/spec/dotdir/blast_2.5.0/blastn/BLASTN_XML_2.5.0.xml +0 -1201
- data/spec/dotdir/blast_2.5.0/blastn/job.yaml +0 -8
- data/spec/dotdir/blast_2.5.0/blastn_nohits/BLASTN_NO_HITS_XML_2.5.0.xml +0 -866
- data/spec/dotdir/blast_2.5.0/blastn_nohits/job.yaml +0 -8
- data/spec/dotdir/blast_2.5.0/blastp/BLASTP +0 -2161
- data/spec/dotdir/blast_2.5.0/blastp/BLASTP_XML_2.5.0.xml +0 -1181
- data/spec/dotdir/blast_2.5.0/blastp/job.yaml +0 -8
- data/spec/dotdir/blast_2.5.0/blastx/BLASTX +0 -28080
- data/spec/dotdir/blast_2.5.0/blastx/BLASTX_XML_2.5.0.xml +0 -1181
- data/spec/dotdir/blast_2.5.0/blastx/job.yaml +0 -8
- data/spec/dotdir/blast_2.5.0/tblastn/TBLASTN +0 -29486
- data/spec/dotdir/blast_2.5.0/tblastn/TBLASTN_XML_2.5.0.xml +0 -1181
- data/spec/dotdir/blast_2.5.0/tblastn/job.yaml +0 -8
- data/spec/dotdir/blast_2.5.0/tblastx/TBLASTX +0 -180859
- data/spec/dotdir/blast_2.5.0/tblastx/TBLASTX_XML_2.5.0.xml +0 -8857
- data/spec/dotdir/blast_2.5.0/tblastx/job.yaml +0 -8
- data/spec/dotdir/blast_2.6.0/blastn/BLASTN_XML_2.6.0.xml +0 -1201
- data/spec/dotdir/blast_2.6.0/blastn/job.yaml +0 -8
- data/spec/dotdir/blast_2.6.0/blastn_nohits/BLASTN_NO_HITS_XML_2.6.0.xml +0 -866
- data/spec/dotdir/blast_2.6.0/blastn_nohits/job.yaml +0 -8
- data/spec/dotdir/blast_2.6.0/blastp/BLASTP_XML_2.6.0.xml +0 -1181
- data/spec/dotdir/blast_2.6.0/blastp/job.yaml +0 -8
- data/spec/dotdir/blast_2.6.0/blastx/BLASTX_XML_2.6.0.xml +0 -1181
- data/spec/dotdir/blast_2.6.0/blastx/job.yaml +0 -8
- data/spec/dotdir/blast_2.6.0/tblastn/TBLASTN_XML_2.6.0.xml +0 -1181
- data/spec/dotdir/blast_2.6.0/tblastn/job.yaml +0 -8
- data/spec/dotdir/blast_2.6.0/tblastx/TBLASTX_XML_2.6.0.xml +0 -8857
- data/spec/dotdir/blast_2.6.0/tblastx/job.yaml +0 -8
- data/spec/dotdir/blast_2.7.1/blastn/BLASTN_XML_2.7.1.xml +0 -1201
- data/spec/dotdir/blast_2.7.1/blastn/job.yaml +0 -8
- data/spec/dotdir/blast_2.7.1/blastn_nohits/BLASTN_NO_HITS_XML_2.7.1.xml +0 -866
- data/spec/dotdir/blast_2.7.1/blastn_nohits/job.yaml +0 -8
- data/spec/dotdir/blast_2.7.1/blastp/BLASTP_XML_2.7.1.xml +0 -1181
- data/spec/dotdir/blast_2.7.1/blastp/job.yaml +0 -8
- data/spec/dotdir/blast_2.7.1/blastx/BLASTX_XML_2.7.1.xml +0 -1181
- data/spec/dotdir/blast_2.7.1/blastx/job.yaml +0 -8
- data/spec/dotdir/blast_2.7.1/tblastn/TBLASTN_XML_2.7.1.xml +0 -1181
- data/spec/dotdir/blast_2.7.1/tblastn/job.yaml +0 -8
- data/spec/dotdir/blast_2.7.1/tblastx/TBLASTX_XML_2.7.1.xml +0 -8857
- data/spec/dotdir/blast_2.7.1/tblastx/job.yaml +0 -8
- data/spec/dotdir/blast_2.8.1/blastn/BLASTN_XML_2.8.1.xml +0 -1201
- data/spec/dotdir/blast_2.8.1/blastn/job.yaml +0 -8
- data/spec/dotdir/blast_2.8.1/blastn_nohits/BLASTN_NO_HITS_XML_2.8.1.xml +0 -866
- data/spec/dotdir/blast_2.8.1/blastn_nohits/job.yaml +0 -8
- data/spec/dotdir/blast_2.8.1/blastp/BLASTP_XML_2.8.1.xml +0 -1181
- data/spec/dotdir/blast_2.8.1/blastp/job.yaml +0 -8
- data/spec/dotdir/blast_2.8.1/blastx/BLASTX_XML_2.8.1.xml +0 -1181
- data/spec/dotdir/blast_2.8.1/blastx/job.yaml +0 -8
- data/spec/dotdir/blast_2.8.1/tblastn/TBLASTN_XML_2.8.1.xml +0 -1181
- data/spec/dotdir/blast_2.8.1/tblastn/job.yaml +0 -8
- data/spec/dotdir/blast_2.8.1/tblastx/TBLASTX_XML_2.8.1.xml +0 -8857
- data/spec/dotdir/blast_2.8.1/tblastx/job.yaml +0 -8
- data/spec/dotdir/blast_2.9.0/blastn/BLASTN_XML_2.9.0.xml +0 -1201
- data/spec/dotdir/blast_2.9.0/blastn/job.yaml +0 -8
- data/spec/dotdir/blast_2.9.0/blastn_nohits/BLASTN_NO_HITS_XML_2.9.0.xml +0 -866
- data/spec/dotdir/blast_2.9.0/blastn_nohits/job.yaml +0 -8
- data/spec/dotdir/blast_2.9.0/blastp/BLASTP_XML_2.9.0.xml +0 -1181
- data/spec/dotdir/blast_2.9.0/blastp/job.yaml +0 -8
- data/spec/dotdir/blast_2.9.0/blastx/BLASTX_XML_2.9.0.xml +0 -1181
- data/spec/dotdir/blast_2.9.0/blastx/job.yaml +0 -8
- data/spec/dotdir/blast_2.9.0/tblastn/TBLASTN_XML_2.9.0.xml +0 -1181
- data/spec/dotdir/blast_2.9.0/tblastn/job.yaml +0 -8
- data/spec/dotdir/blast_2.9.0/tblastx/TBLASTX_XML_2.9.0.xml +0 -8857
- data/spec/dotdir/blast_2.9.0/tblastx/job.yaml +0 -8
- data/spec/dotdir/diamond_0.9.24/blastp/DIAMOND_BLASTP_0.9.24.xml +0 -1040
- data/spec/dotdir/diamond_0.9.24/blastp/job.yaml +0 -8
- data/spec/dotdir/diamond_0.9.24/blastx/DIAMOND_BLASTX_0.9.24.xml +0 -1040
- data/spec/dotdir/diamond_0.9.24/blastx/job.yaml +0 -8
- data/spec/dotdir/diamond_0.9.24/blastx_nohits/DIAMOND_BLASTX_NOHITS_0.9.24.xml +0 -41
- data/spec/dotdir/diamond_0.9.24/blastx_nohits/job.yaml +0 -8
- data/spec/download_helper.rb +0 -35
- data/spec/empty_config.yml +0 -0
- data/spec/routes_spec.rb +0 -93
- data/spec/sample.conf +0 -2
- data/spec/sequence_spec.rb +0 -100
- data/spec/sequences/MH011443_1_gi_1486783306_gb_MH011443_1.txt +0 -6
- data/spec/sequences/MH011443_1_gi_1486783307_gb_AYF55702_1.txt +0 -6
- data/spec/sequences/MH011443_1_gi_1528997474_gb_MH447967_1.txt +0 -30
- data/spec/sequences/MH011443_1_sp_P04637_P53_HUMAN.txt +0 -6
- data/spec/sequences/Nucleotide_TP53_COX41.fasta +0 -15
- data/spec/sequences/Protein_TP53_COX41.fasta +0 -12
- data/spec/sequences/Query_1_SI2_2_0_06267.txt +0 -6
- data/spec/sequences/alignment-2_hits.txt +0 -12
- data/spec/sequences/alignment-35_hits_diamond_blastp.txt +0 -210
- data/spec/sequences/alignment-35_hits_diamond_blastx.txt +0 -210
- data/spec/sequences/alignment-3_hits.txt +0 -18
- data/spec/sequences/alignment-40_hits_blastn.txt +0 -246
- data/spec/sequences/alignment-40_hits_blastp.txt +0 -240
- data/spec/sequences/alignment-40_hits_blastp_2.2.30.txt +0 -240
- data/spec/sequences/alignment-40_hits_blastx.txt +0 -240
- data/spec/sequences/alignment-40_hits_tblastn.txt +0 -240
- data/spec/sequences/alignment-40_hits_tblastn_2.2.30.txt +0 -240
- data/spec/sequences/alignment-40_hits_tblastx.txt +0 -2664
- data/spec/sequences/alignment-4_hits.txt +0 -24
- data/spec/sequences/alignment-4_hits_blastn.txt +0 -24
- data/spec/sequences/alignment-4_hits_blastp.txt +0 -24
- data/spec/sequences/alignment-4_hits_blastp_2.2.30.txt +0 -24
- data/spec/sequences/alignment-4_hits_blastx.txt +0 -24
- data/spec/sequences/alignment-4_hits_diamond_blastp.txt +0 -24
- data/spec/sequences/alignment-4_hits_diamond_blastx.txt +0 -24
- data/spec/sequences/alignment-4_hits_tblastn.txt +0 -24
- data/spec/sequences/alignment-4_hits_tblastn_2.2.30.txt +0 -24
- data/spec/sequences/alignment-4_hits_tblastx.txt +0 -318
- data/spec/sequences/nucleotide_query.fa +0 -21
- data/spec/sequences/problematic_query.fa +0 -5
- data/spec/sequences/protein_query.fa +0 -9
- data/spec/sequences/sample_query_fire_ant_obps.fa +0 -44
- data/spec/sequences/sequenceserver-2_hits.fa +0 -10
- data/spec/sequences/sequenceserver-SI2.2.0_06267.fa +0 -5
- data/spec/sequences/sp_P04637_P53_HUMAN_gi_1099170394_ref_XP_018868681_1.txt +0 -6
- data/spec/sequences/sp_P04637_P53_HUMAN_gi_120407068_ref_NP_000537_3.txt +0 -6
- data/spec/sequences/sp_P04637_P53_HUMAN_gi_1484127324_gb_MG595988_1.txt +0 -6
- data/spec/sequences/sp_P04637_P53_HUMAN_gi_395440626_gb_JQ694049_1.txt +0 -6
- data/spec/sequences/sp_P04637_P53_HUMAN_sp_P04637_P53_HUMAN.txt +0 -6
- data/spec/sequenceserver_spec.rb +0 -90
- data/spec/spec_helper.rb +0 -63
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 449efaa2619fd2c83a4116480c78ae6b892804f2f9bc23c3d074b8b0493985c5
|
|
4
|
+
data.tar.gz: 393f9da8bd3df53bff3ed3a137a5d9484ad5ec9cfa1de3c7b15c3f1a6833f092
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: de2fdcef61a8fcdbe8907935a1f0b545219698fe9d37fcad6cd40aaa50e779010b7e91a9158eb76590baed78ce3743cdc173b664ff5d0969dfaca42eb6bd621c
|
|
7
|
+
data.tar.gz: a65c243d19435021b00a360ddfa8f617fa58e5944dd55117a8865f11dec4554a86e577cdfee3013a82638dc45de697a33156da1ba0a2fedd8e2936a7d760d5d9
|
data/bin/chromedriver
ADDED
|
Binary file
|
data/bin/geckodriver
ADDED
|
Binary file
|
data/bin/sequenceserver
CHANGED
|
@@ -40,7 +40,7 @@ def ask_to_join
|
|
|
40
40
|
"-d ifq -d emailAddress=#{response} -d submit=Submit > /dev/null 2> /dev/null"
|
|
41
41
|
system post_email_cmd
|
|
42
42
|
end
|
|
43
|
-
system "touch #{asked_to_join}"
|
|
43
|
+
system "mkdir -p #{SequenceServer::DOTDIR} && touch #{asked_to_join}"
|
|
44
44
|
end
|
|
45
45
|
end
|
|
46
46
|
|
|
@@ -68,10 +68,6 @@ begin
|
|
|
68
68
|
# of threads to use in config file.
|
|
69
69
|
$ sequenceserver -s -n 16
|
|
70
70
|
|
|
71
|
-
# See if you have FASTA files in database dir that haven't
|
|
72
|
-
# been converted into BLAST database.
|
|
73
|
-
$ sequenceserver -u
|
|
74
|
-
|
|
75
71
|
# Search for FASTA files in database dir that haven't been
|
|
76
72
|
# converted into BLAST database yet, and convert them.
|
|
77
73
|
$ sequenceserver -m
|
|
@@ -135,9 +131,6 @@ begin
|
|
|
135
131
|
on 'l', 'list_databases',
|
|
136
132
|
'List BLAST databases'
|
|
137
133
|
|
|
138
|
-
on 'u', 'list-unformatted-fastas',
|
|
139
|
-
'List unformatted FASTA files'
|
|
140
|
-
|
|
141
134
|
on 'i', 'interactive',
|
|
142
135
|
'Run SequenceServer in interactive mode'
|
|
143
136
|
|
|
@@ -285,9 +278,7 @@ begin
|
|
|
285
278
|
fetch_option(:database_dir).value = response
|
|
286
279
|
redo
|
|
287
280
|
rescue SequenceServer::NO_BLAST_DATABASE_FOUND => e
|
|
288
|
-
unless list_databases? ||
|
|
289
|
-
make_blast_databases?
|
|
290
|
-
|
|
281
|
+
unless list_databases? || make_blast_databases?
|
|
291
282
|
# Print error raised.
|
|
292
283
|
puts
|
|
293
284
|
puts e
|
|
@@ -305,18 +296,46 @@ begin
|
|
|
305
296
|
unless response =~ /^[n]$/i
|
|
306
297
|
puts
|
|
307
298
|
puts 'Searching ...'
|
|
308
|
-
if SequenceServer
|
|
309
|
-
|
|
310
|
-
exit!
|
|
311
|
-
else
|
|
312
|
-
formatted = SequenceServer::Database.make_blast_databases
|
|
299
|
+
if SequenceServer.makeblastdb.any_unformatted?
|
|
300
|
+
formatted = SequenceServer.makeblastdb.format
|
|
313
301
|
exit! if formatted.empty? && !set?
|
|
314
302
|
redo unless set?
|
|
303
|
+
else
|
|
304
|
+
puts "Couldn't find any FASTA files."
|
|
305
|
+
exit!
|
|
315
306
|
end
|
|
316
307
|
else
|
|
317
308
|
exit! unless set?
|
|
318
309
|
end
|
|
319
310
|
end
|
|
311
|
+
rescue SequenceServer::INCOMPATIBLE_BLAST_DATABASES => e
|
|
312
|
+
unless list_databases? || make_blast_databases?
|
|
313
|
+
# Print error raised.
|
|
314
|
+
puts
|
|
315
|
+
puts e
|
|
316
|
+
|
|
317
|
+
# Offer user to format the FASTA files.
|
|
318
|
+
database_dir = SequenceServer.config[:database_dir]
|
|
319
|
+
puts
|
|
320
|
+
puts <<~MSG
|
|
321
|
+
Incompatible databases can cause BLAST searches and other features of
|
|
322
|
+
SequenceServer to fail unexpectedly.
|
|
323
|
+
You can view incompatible databases and choose to reformat them below.
|
|
324
|
+
Alternatively, please remove them from databases directory.
|
|
325
|
+
|
|
326
|
+
View incompatible databases? [y/n] (Default: y).
|
|
327
|
+
MSG
|
|
328
|
+
puts
|
|
329
|
+
print '>> '
|
|
330
|
+
response = STDIN.gets.to_s.strip
|
|
331
|
+
unless response =~ /^[n]$/i
|
|
332
|
+
reformatted = SequenceServer.makeblastdb.reformat
|
|
333
|
+
exit! if reformatted.empty? && !set?
|
|
334
|
+
redo unless set?
|
|
335
|
+
else
|
|
336
|
+
exit! unless set?
|
|
337
|
+
end
|
|
338
|
+
end
|
|
320
339
|
rescue SequenceServer::ENOENT,
|
|
321
340
|
SequenceServer::CONFIG_FILE_ERROR,
|
|
322
341
|
SequenceServer::BLAST_DATABASE_ERROR,
|
|
@@ -361,22 +380,13 @@ begin
|
|
|
361
380
|
exit
|
|
362
381
|
end
|
|
363
382
|
|
|
364
|
-
if
|
|
365
|
-
|
|
366
|
-
|
|
383
|
+
if make_blast_databases?
|
|
384
|
+
if SequenceServer.makeblastdb.scan
|
|
385
|
+
SequenceServer.makeblastdb.run
|
|
386
|
+
else
|
|
367
387
|
puts "All FASTA files in #{SequenceServer.config[:database_dir]} " \
|
|
368
388
|
'are formatted.'
|
|
369
|
-
exit
|
|
370
389
|
end
|
|
371
|
-
end
|
|
372
|
-
|
|
373
|
-
if list_unformatted_fastas?
|
|
374
|
-
puts unformatted_fastas
|
|
375
|
-
exit
|
|
376
|
-
end
|
|
377
|
-
|
|
378
|
-
if make_blast_databases?
|
|
379
|
-
SequenceServer::Database.make_blast_databases
|
|
380
390
|
exit
|
|
381
391
|
end
|
|
382
392
|
|
data/lib/sequenceserver.rb
CHANGED
|
@@ -4,8 +4,12 @@ require 'resolv'
|
|
|
4
4
|
|
|
5
5
|
# Top level module / namespace.
|
|
6
6
|
module SequenceServer
|
|
7
|
-
#
|
|
7
|
+
# The default version of BLAST that will be downloaded and configured for use.
|
|
8
8
|
BLAST_VERSION = '2.10.0+'.freeze
|
|
9
|
+
# The minimum version of BLAST that SequenceServer is happy to run with. This
|
|
10
|
+
# is for compatiblity with older database formats. Users will download BLAST
|
|
11
|
+
# themselves.
|
|
12
|
+
MIN_BLAST_VERSION = '2.9.0+'.freeze
|
|
9
13
|
|
|
10
14
|
# Default location of configuration file.
|
|
11
15
|
DEFAULT_CONFIG_FILE = '~/.sequenceserver.conf'.freeze
|
|
@@ -20,6 +24,7 @@ module SequenceServer
|
|
|
20
24
|
require 'sequenceserver/config'
|
|
21
25
|
require 'sequenceserver/server'
|
|
22
26
|
require 'sequenceserver/routes'
|
|
27
|
+
require 'sequenceserver/makeblastdb'
|
|
23
28
|
require 'sequenceserver/job_remover'
|
|
24
29
|
require 'sequenceserver/exceptions'
|
|
25
30
|
require 'sequenceserver/sys'
|
|
@@ -53,6 +58,11 @@ module SequenceServer
|
|
|
53
58
|
end
|
|
54
59
|
end
|
|
55
60
|
|
|
61
|
+
# MAKEBLASTDB service object.
|
|
62
|
+
def makeblastdb
|
|
63
|
+
@makeblastdb ||= MAKEBLASTDB.new(config[:database_dir])
|
|
64
|
+
end
|
|
65
|
+
|
|
56
66
|
# SequenceServer initialisation routine.
|
|
57
67
|
def init(config = {})
|
|
58
68
|
# Use default config file if caller didn't specify one.
|
|
@@ -106,7 +116,6 @@ module SequenceServer
|
|
|
106
116
|
|
|
107
117
|
# Run SequenceServer using WEBrick.
|
|
108
118
|
def run
|
|
109
|
-
check_host
|
|
110
119
|
Server.run(self)
|
|
111
120
|
rescue Errno::EADDRINUSE
|
|
112
121
|
puts "** Could not bind to port #{config[:port]}."
|
|
@@ -126,10 +135,17 @@ module SequenceServer
|
|
|
126
135
|
def on_start
|
|
127
136
|
puts '** SequenceServer is ready.'
|
|
128
137
|
puts " Go to #{server_url} in your browser and start BLASTing!"
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
138
|
+
if ip_address
|
|
139
|
+
puts ' To share your setup, try one of the following addresses. These'
|
|
140
|
+
puts ' may only work within your home, office, or university network.'
|
|
141
|
+
puts " - http://#{ip_address}:#{config[:port]}"
|
|
142
|
+
puts " - http://#{hostname}:#{config[:port]}" if hostname
|
|
143
|
+
puts ' To share your setup with anyone in the world, ask your IT team'
|
|
144
|
+
puts ' for a public IP address.'
|
|
145
|
+
puts ' To disable sharing, set :host: key in config file to 127.0.0.1'
|
|
146
|
+
puts ' and restart server.'
|
|
147
|
+
end
|
|
148
|
+
puts ' To terminate server, press CTRL+C'
|
|
133
149
|
open_in_browser(server_url)
|
|
134
150
|
end
|
|
135
151
|
|
|
@@ -186,7 +202,12 @@ module SequenceServer
|
|
|
186
202
|
end
|
|
187
203
|
|
|
188
204
|
logger.debug("Will look for BLAST+ databases in: #{config[:database_dir]}")
|
|
189
|
-
|
|
205
|
+
|
|
206
|
+
makeblastdb.scan
|
|
207
|
+
fail NO_BLAST_DATABASE_FOUND, config[:database_dir] if !makeblastdb.any_formatted?
|
|
208
|
+
fail INCOMPATIBLE_BLAST_DATABASES, config[:database_dir] if makeblastdb.any_incompatible?
|
|
209
|
+
|
|
210
|
+
Database.collection = makeblastdb.formatted_fastas
|
|
190
211
|
Database.each do |database|
|
|
191
212
|
logger.debug("Found #{database.type} database '#{database.title}'" \
|
|
192
213
|
" at '#{database.name}'")
|
|
@@ -204,16 +225,6 @@ module SequenceServer
|
|
|
204
225
|
raise NUM_THREADS_INCORRECT
|
|
205
226
|
end
|
|
206
227
|
|
|
207
|
-
# Check and warn user if host is 0.0.0.0 (default).
|
|
208
|
-
def check_host
|
|
209
|
-
# rubocop:disable Style/GuardClause
|
|
210
|
-
if config[:host] == '0.0.0.0'
|
|
211
|
-
logger.warn 'Will listen on all interfaces (0.0.0.0).' \
|
|
212
|
-
' Consider using 127.0.0.1 (--host option).'
|
|
213
|
-
end
|
|
214
|
-
# rubocop:enable Style/GuardClause
|
|
215
|
-
end
|
|
216
|
-
|
|
217
228
|
def load_extension
|
|
218
229
|
return unless config[:require]
|
|
219
230
|
|
|
@@ -234,7 +245,7 @@ module SequenceServer
|
|
|
234
245
|
end
|
|
235
246
|
version = out.split[1]
|
|
236
247
|
fail BLAST_NOT_INSTALLED_OR_NOT_EXECUTABLE if version.empty?
|
|
237
|
-
fail BLAST_NOT_COMPATIBLE, version unless version
|
|
248
|
+
fail BLAST_NOT_COMPATIBLE, version unless is_compatible(version, MIN_BLAST_VERSION)
|
|
238
249
|
end
|
|
239
250
|
|
|
240
251
|
def server_url
|
|
@@ -243,13 +254,14 @@ module SequenceServer
|
|
|
243
254
|
"http://#{host}:#{config[:port]}"
|
|
244
255
|
end
|
|
245
256
|
|
|
246
|
-
# Returns a local ip adress
|
|
257
|
+
# Returns a local ip adress.
|
|
247
258
|
def ip_address
|
|
248
|
-
Socket.ip_address_list.find { |ai| ai.ipv4? && !ai.ipv4_loopback? }
|
|
259
|
+
addrinfo = Socket.ip_address_list.find { |ai| ai.ipv4? && !ai.ipv4_loopback? }
|
|
260
|
+
addrinfo.ip_address if addrinfo
|
|
249
261
|
end
|
|
250
262
|
|
|
251
|
-
# Returns machine's hostname based on the local ip
|
|
252
|
-
#
|
|
263
|
+
# Returns machine's hostname based on the local ip. If hostname cannot be
|
|
264
|
+
# determined returns nil.
|
|
253
265
|
def hostname
|
|
254
266
|
Resolv.getname(ip_address) rescue nil
|
|
255
267
|
end
|
|
@@ -285,5 +297,19 @@ module SequenceServer
|
|
|
285
297
|
def command?(command)
|
|
286
298
|
system("which #{command} > /dev/null 2>&1")
|
|
287
299
|
end
|
|
300
|
+
|
|
301
|
+
# Returns true if the given version is higher than the minimum expected
|
|
302
|
+
# version string.
|
|
303
|
+
def is_compatible(given, expected)
|
|
304
|
+
# The speceship operator (<=>) below returns -1, 0, 1 depending on
|
|
305
|
+
# on whether the left operand is lower, same, or higher than the
|
|
306
|
+
# right operand. We want the left operand to be the same or higher.
|
|
307
|
+
(parse_version(given) <=> parse_version(expected)) >= 0
|
|
308
|
+
end
|
|
309
|
+
|
|
310
|
+
# Turn version string into an arrary of its component numbers.
|
|
311
|
+
def parse_version(version_string)
|
|
312
|
+
version_string.split('.').map(&:to_i)
|
|
313
|
+
end
|
|
288
314
|
end
|
|
289
315
|
end
|
|
@@ -65,6 +65,16 @@ module SequenceServer
|
|
|
65
65
|
error = IO.foreach(stderr).grep(ERROR_LINE).join
|
|
66
66
|
error = File.read(stderr) if error.empty?
|
|
67
67
|
fail InputError, error
|
|
68
|
+
when 2
|
|
69
|
+
fail InputError, <<~MSG
|
|
70
|
+
BLAST signalled a problem with the databases that you searched.
|
|
71
|
+
|
|
72
|
+
Most likely one or more of your databases were created using an
|
|
73
|
+
older version of BLAST. Please consider recreating the databases
|
|
74
|
+
using BLAST #{BLAST_VERSION}.
|
|
75
|
+
|
|
76
|
+
As a temporary solution, you can try searching one database at a time.
|
|
77
|
+
MSG
|
|
68
78
|
when 4
|
|
69
79
|
# Out of memory. User can retry with a shorter search, so raising
|
|
70
80
|
# InputError here instead of SystemError.
|
|
@@ -79,7 +89,7 @@ module SequenceServer
|
|
|
79
89
|
# the job. This is a SystemError.
|
|
80
90
|
fail SystemError, 'Ran out of disk space.'
|
|
81
91
|
else
|
|
82
|
-
# I am not sure what the exit codes
|
|
92
|
+
# I am not sure what the exit codes 3 means and we should not
|
|
83
93
|
# encounter exit code 5. The only other error that I know can happen
|
|
84
94
|
# but is not yet handled is when BLAST+ binaries break such as after
|
|
85
95
|
# macOS updates. So raise SystemError, include the exit status in the
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
require 'find'
|
|
2
1
|
require 'open3'
|
|
3
2
|
require 'digest/md5'
|
|
4
3
|
require 'forwardable'
|
|
@@ -81,12 +80,15 @@ module SequenceServer
|
|
|
81
80
|
@collection ||= {}
|
|
82
81
|
end
|
|
83
82
|
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
83
|
+
def collection=(databases_attrs)
|
|
84
|
+
databases_attrs.each do |db_attrs|
|
|
85
|
+
db = Database.new(*db_attrs)
|
|
86
|
+
collection[db.id] = db
|
|
87
|
+
end
|
|
88
88
|
end
|
|
89
89
|
|
|
90
|
+
private :collection
|
|
91
|
+
|
|
90
92
|
def [](ids)
|
|
91
93
|
ids = Array ids
|
|
92
94
|
collection.values_at(*ids)
|
|
@@ -183,169 +185,6 @@ module SequenceServer
|
|
|
183
185
|
def clear
|
|
184
186
|
collection.clear
|
|
185
187
|
end
|
|
186
|
-
|
|
187
|
-
# Recurisvely scan `database_dir` for blast databases.
|
|
188
|
-
#
|
|
189
|
-
# rubocop:disable Metrics/AbcSize, Metrics/MethodLength
|
|
190
|
-
def blastdbcmd
|
|
191
|
-
cmd = "blastdbcmd -recursive -list #{config[:database_dir]}" \
|
|
192
|
-
' -list_outfmt "%f %t %p %n %l %d"'
|
|
193
|
-
out, err = sys(cmd, path: config[:bin])
|
|
194
|
-
errpat = /BLAST Database error/
|
|
195
|
-
fail BLAST_DATABASE_ERROR.new(cmd, err) if err.match(errpat)
|
|
196
|
-
return out
|
|
197
|
-
rescue CommandFailed => e
|
|
198
|
-
fail BLAST_DATABASE_ERROR.new(cmd, e.stderr)
|
|
199
|
-
end
|
|
200
|
-
|
|
201
|
-
def scan_databases_dir
|
|
202
|
-
out = blastdbcmd
|
|
203
|
-
fail NO_BLAST_DATABASE_FOUND, config[:database_dir] if out.empty?
|
|
204
|
-
out.each_line do |line|
|
|
205
|
-
name = line.split(' ')[0]
|
|
206
|
-
next if multipart_database_name?(name)
|
|
207
|
-
self << Database.new(*line.split(' '))
|
|
208
|
-
end
|
|
209
|
-
end
|
|
210
|
-
# rubocop:enable Metrics/AbcSize, Metrics/MethodLength
|
|
211
|
-
|
|
212
|
-
# Recursively scan `database_dir` for un-formatted FASTA and format them
|
|
213
|
-
# for use with BLAST+.
|
|
214
|
-
def make_blast_databases
|
|
215
|
-
unformatted_fastas.select do |file, sequence_type|
|
|
216
|
-
make_blast_database(file, sequence_type)
|
|
217
|
-
end
|
|
218
|
-
end
|
|
219
|
-
|
|
220
|
-
# Returns an Array of FASTA files that may require formatting, and the
|
|
221
|
-
# type of sequence contained in each FASTA.
|
|
222
|
-
#
|
|
223
|
-
# > unformatted_fastas
|
|
224
|
-
# => [['/foo/bar.fasta', :nulceotide], ...]
|
|
225
|
-
def unformatted_fastas
|
|
226
|
-
list = []
|
|
227
|
-
database_dir = config[:database_dir]
|
|
228
|
-
Find.find database_dir do |file|
|
|
229
|
-
next if File.directory? file
|
|
230
|
-
next if Database.include? file
|
|
231
|
-
next unless probably_fasta? file
|
|
232
|
-
sequence_type = guess_sequence_type_in_fasta file
|
|
233
|
-
if %i[protein nucleotide].include?(sequence_type)
|
|
234
|
-
list << [file, sequence_type]
|
|
235
|
-
end
|
|
236
|
-
end
|
|
237
|
-
list
|
|
238
|
-
end
|
|
239
|
-
|
|
240
|
-
# Create BLAST database, given FASTA file and sequence type in FASTA file.
|
|
241
|
-
def make_blast_database(file, type)
|
|
242
|
-
return unless make_blast_database? file, type
|
|
243
|
-
title = get_database_title(file)
|
|
244
|
-
taxid = fetch_tax_id
|
|
245
|
-
_make_blast_database(file, type, title, taxid)
|
|
246
|
-
end
|
|
247
|
-
|
|
248
|
-
def _make_blast_database(file, type, title, taxid, quiet = false)
|
|
249
|
-
cmd = 'makeblastdb -parse_seqids -hash_index ' \
|
|
250
|
-
"-in #{file} -dbtype #{type.to_s.slice(0, 4)} -title '#{title}'" \
|
|
251
|
-
" -taxid #{taxid}"
|
|
252
|
-
out, err = sys(cmd, path: config[:bin])
|
|
253
|
-
puts out, err unless quiet
|
|
254
|
-
end
|
|
255
|
-
|
|
256
|
-
# Show file path and guessed sequence type to the user and obtain a y/n
|
|
257
|
-
# response.
|
|
258
|
-
#
|
|
259
|
-
# Returns true if the user entered anything but 'n' or 'N'.
|
|
260
|
-
def make_blast_database?(file, type)
|
|
261
|
-
puts
|
|
262
|
-
puts
|
|
263
|
-
puts "FASTA file: #{file}"
|
|
264
|
-
puts "FASTA type: #{type}"
|
|
265
|
-
print 'Proceed? [y/n] (Default: y): '
|
|
266
|
-
response = STDIN.gets.to_s.strip
|
|
267
|
-
!response.match(/n/i)
|
|
268
|
-
end
|
|
269
|
-
|
|
270
|
-
# Generate a title for the given database and show it to the user for
|
|
271
|
-
# confirmation.
|
|
272
|
-
#
|
|
273
|
-
# Returns user input if any. Auto-generated title otherwise.
|
|
274
|
-
def get_database_title(path)
|
|
275
|
-
default = make_db_title(File.basename(path))
|
|
276
|
-
print "Enter a database title or will use '#{default}': "
|
|
277
|
-
from_user = STDIN.gets.to_s.strip
|
|
278
|
-
from_user.empty? && default || from_user
|
|
279
|
-
end
|
|
280
|
-
|
|
281
|
-
# Get taxid from the user. Returns user input or 0.
|
|
282
|
-
#
|
|
283
|
-
# Using 0 as taxid is equivalent to not setting taxid for the database
|
|
284
|
-
# that will be created.
|
|
285
|
-
def fetch_tax_id
|
|
286
|
-
default = 0
|
|
287
|
-
print 'Enter taxid (optional): '
|
|
288
|
-
user_response = STDIN.gets.strip
|
|
289
|
-
user_response.empty? && default || Integer(user_response)
|
|
290
|
-
rescue
|
|
291
|
-
puts 'taxid should be a number'
|
|
292
|
-
retry
|
|
293
|
-
end
|
|
294
|
-
|
|
295
|
-
# Returns true if the database name appears to be a multi-part database
|
|
296
|
-
# name.
|
|
297
|
-
#
|
|
298
|
-
# e.g.
|
|
299
|
-
# /home/ben/pd.ben/sequenceserver/db/nr.00 => yes
|
|
300
|
-
# /home/ben/pd.ben/sequenceserver/db/nr => no
|
|
301
|
-
# /home/ben/pd.ben/sequenceserver/db/img3.5.finished.faa.01 => yes
|
|
302
|
-
# /home/ben/pd.ben/sequenceserver/db/nr00 => no
|
|
303
|
-
# /mnt/blast-db/refseq_genomic.100 => yes
|
|
304
|
-
def multipart_database_name?(db_name)
|
|
305
|
-
!(db_name.match(%r{.+/\S+\.\d{2,3}$}).nil?)
|
|
306
|
-
end
|
|
307
|
-
|
|
308
|
-
# Returns true if first character of the file is '>'.
|
|
309
|
-
def probably_fasta?(file)
|
|
310
|
-
File.read(file, 1) == '>'
|
|
311
|
-
end
|
|
312
|
-
|
|
313
|
-
# Suggests improved titles when generating database names from files
|
|
314
|
-
# for improved apperance and readability in web interface.
|
|
315
|
-
# For example:
|
|
316
|
-
# Cobs1.4.proteins.fasta -> Cobs 1.4 proteins
|
|
317
|
-
# S_invicta.xx.2.5.small.nucl.fa -> S invicta xx 2.5 small nucl
|
|
318
|
-
def make_db_title(db_name)
|
|
319
|
-
db_name.tr!('"', "'")
|
|
320
|
-
# removes .fasta like extension names
|
|
321
|
-
db_name.gsub!(File.extname(db_name), '')
|
|
322
|
-
# replaces _ with ' ',
|
|
323
|
-
db_name.gsub!(/(_)/, ' ')
|
|
324
|
-
# replaces '.' with ' ' when no numbers are on either side,
|
|
325
|
-
db_name.gsub!(/(\D)\.(?=\D)/, '\1 ')
|
|
326
|
-
# preserves version numbers
|
|
327
|
-
db_name.gsub!(/\W*(\d+([.-]\d+)+)\W*/, ' \1 ')
|
|
328
|
-
db_name
|
|
329
|
-
end
|
|
330
|
-
|
|
331
|
-
# Guess whether FASTA file contains protein or nucleotide sequences by
|
|
332
|
-
# sampling a few few characters of the file.
|
|
333
|
-
def guess_sequence_type_in_fasta(file)
|
|
334
|
-
sequences = sample_sequences(file)
|
|
335
|
-
sequence_types = sequences.map { |seq| Sequence.guess_type(seq) }
|
|
336
|
-
sequence_types = sequence_types.uniq.compact
|
|
337
|
-
(sequence_types.length == 1) && sequence_types.first
|
|
338
|
-
end
|
|
339
|
-
|
|
340
|
-
# Read first 1,048,576 characters of the file, split the read text on
|
|
341
|
-
# fasta def line pattern and return.
|
|
342
|
-
#
|
|
343
|
-
# If the given file is FASTA, returns Array of as many different
|
|
344
|
-
# sequences in the portion of the file read. Returns the portion
|
|
345
|
-
# of the file read wrapped in an Array otherwise.
|
|
346
|
-
def sample_sequences(file)
|
|
347
|
-
File.read(file, 1_048_576).split(/^>.+$/).delete_if(&:empty?)
|
|
348
|
-
end
|
|
349
188
|
end
|
|
350
189
|
end
|
|
351
190
|
end
|