quorum 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (165) hide show
  1. data/.gitignore +10 -0
  2. data/.rspec +1 -0
  3. data/Gemfile +15 -0
  4. data/Gemfile.lock +170 -0
  5. data/MIT-LICENSE +20 -0
  6. data/README.rdoc +318 -0
  7. data/Rakefile +31 -0
  8. data/app/assets/images/quorum/.gitkeep +0 -0
  9. data/app/assets/images/quorum/bg.png +0 -0
  10. data/app/assets/images/quorum/knight_rider.gif +0 -0
  11. data/app/assets/images/quorum/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
  12. data/app/assets/images/quorum/ui-bg_flat_75_ffffff_40x100.png +0 -0
  13. data/app/assets/images/quorum/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
  14. data/app/assets/images/quorum/ui-bg_glass_65_ffffff_1x400.png +0 -0
  15. data/app/assets/images/quorum/ui-bg_glass_75_dadada_1x400.png +0 -0
  16. data/app/assets/images/quorum/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
  17. data/app/assets/images/quorum/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
  18. data/app/assets/images/quorum/ui-bg_inset-soft_95_fef1ec_1x100.png +0 -0
  19. data/app/assets/images/quorum/ui-icons_222222_256x240.png +0 -0
  20. data/app/assets/images/quorum/ui-icons_2e83ff_256x240.png +0 -0
  21. data/app/assets/images/quorum/ui-icons_454545_256x240.png +0 -0
  22. data/app/assets/images/quorum/ui-icons_888888_256x240.png +0 -0
  23. data/app/assets/images/quorum/ui-icons_cd0a0a_256x240.png +0 -0
  24. data/app/assets/javascripts/quorum/application.js +13 -0
  25. data/app/assets/javascripts/quorum/jobs.js +386 -0
  26. data/app/assets/stylesheets/quorum/application.css +224 -0
  27. data/app/assets/stylesheets/quorum/jobs.css +72 -0
  28. data/app/assets/stylesheets/quorum/jquery-ui-1.8.16.custom.css +568 -0
  29. data/app/assets/stylesheets/quorum/tipsy.css +25 -0
  30. data/app/controllers/quorum/application_controller.rb +5 -0
  31. data/app/controllers/quorum/jobs_controller.rb +102 -0
  32. data/app/helpers/quorum/application_helper.rb +4 -0
  33. data/app/models/quorum/blastn_job.rb +111 -0
  34. data/app/models/quorum/blastn_job_report.rb +7 -0
  35. data/app/models/quorum/blastp_job.rb +111 -0
  36. data/app/models/quorum/blastp_job_report.rb +7 -0
  37. data/app/models/quorum/blastx_job.rb +111 -0
  38. data/app/models/quorum/blastx_job_report.rb +7 -0
  39. data/app/models/quorum/job.rb +164 -0
  40. data/app/models/quorum/tblastn_job.rb +111 -0
  41. data/app/models/quorum/tblastn_job_report.rb +7 -0
  42. data/app/views/layouts/quorum/application.html.erb +15 -0
  43. data/app/views/quorum/jobs/_blastn_form.html.erb +71 -0
  44. data/app/views/quorum/jobs/_blastp_form.html.erb +71 -0
  45. data/app/views/quorum/jobs/_blastx_form.html.erb +71 -0
  46. data/app/views/quorum/jobs/_tblastn_form.html.erb +71 -0
  47. data/app/views/quorum/jobs/new.html.erb +45 -0
  48. data/app/views/quorum/jobs/show.html.erb +183 -0
  49. data/app/views/shared/_error_messages.html.erb +10 -0
  50. data/config/locales/en.yml +8 -0
  51. data/config/routes.rb +9 -0
  52. data/db/migrate/20111031204518_create_jobs.rb +12 -0
  53. data/db/migrate/20111031204701_create_blastn_jobs.rb +19 -0
  54. data/db/migrate/20111031204719_create_blastx_jobs.rb +19 -0
  55. data/db/migrate/20111031204733_create_blastp_jobs.rb +19 -0
  56. data/db/migrate/20111031204754_create_tblastn_jobs.rb +19 -0
  57. data/db/migrate/20111031204846_create_blastn_job_reports.rb +34 -0
  58. data/db/migrate/20111031204903_create_blastx_job_reports.rb +34 -0
  59. data/db/migrate/20111031204922_create_blastp_job_reports.rb +34 -0
  60. data/db/migrate/20111031204941_create_tblastn_job_reports.rb +34 -0
  61. data/lib/generators/quorum/install_generator.rb +68 -0
  62. data/lib/generators/quorum/styles_generator.rb +18 -0
  63. data/lib/generators/quorum/views_generator.rb +18 -0
  64. data/lib/generators/templates/README +25 -0
  65. data/lib/generators/templates/blast.rb +412 -0
  66. data/lib/generators/templates/logger.rb +43 -0
  67. data/lib/generators/templates/quorum_initializer.rb +36 -0
  68. data/lib/generators/templates/quorum_settings.yml +157 -0
  69. data/lib/generators/templates/search +141 -0
  70. data/lib/generators/templates/trollop.rb +781 -0
  71. data/lib/quorum/engine.rb +5 -0
  72. data/lib/quorum/helpers.rb +17 -0
  73. data/lib/quorum/sequence.rb +89 -0
  74. data/lib/quorum/version.rb +3 -0
  75. data/lib/quorum.rb +89 -0
  76. data/lib/tasks/blastdb/README +17 -0
  77. data/lib/tasks/blastdb/build_blast_db.rb +222 -0
  78. data/lib/tasks/quorum_resque.rake +3 -0
  79. data/lib/tasks/quorum_tasks.rake +50 -0
  80. data/lib/workers/quorum.rb +45 -0
  81. data/quorum.gemspec +29 -0
  82. data/script/rails +6 -0
  83. data/spec/data/nucl_prot_seqs.txt +36 -0
  84. data/spec/data/nucl_seqs.txt +32 -0
  85. data/spec/data/prot_seqs.txt +4 -0
  86. data/spec/data/seqs.docx +0 -0
  87. data/spec/data/seqs_not_fa.txt +16 -0
  88. data/spec/data/tmp/test.tgz +0 -0
  89. data/spec/dummy/Rakefile +7 -0
  90. data/spec/dummy/app/assets/javascripts/application.js +9 -0
  91. data/spec/dummy/app/assets/stylesheets/application.css +7 -0
  92. data/spec/dummy/app/controllers/application_controller.rb +3 -0
  93. data/spec/dummy/app/helpers/application_helper.rb +2 -0
  94. data/spec/dummy/app/mailers/.gitkeep +0 -0
  95. data/spec/dummy/app/models/.gitkeep +0 -0
  96. data/spec/dummy/app/models/blast.rb +2 -0
  97. data/spec/dummy/app/views/layouts/application.html.erb +14 -0
  98. data/spec/dummy/config/application.rb +46 -0
  99. data/spec/dummy/config/boot.rb +10 -0
  100. data/spec/dummy/config/environment.rb +20 -0
  101. data/spec/dummy/config/environments/development.rb +30 -0
  102. data/spec/dummy/config/environments/production.rb +60 -0
  103. data/spec/dummy/config/environments/test.rb +42 -0
  104. data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
  105. data/spec/dummy/config/initializers/inflections.rb +10 -0
  106. data/spec/dummy/config/initializers/mime_types.rb +5 -0
  107. data/spec/dummy/config/initializers/quorum_initializer.rb +36 -0
  108. data/spec/dummy/config/initializers/resque.rb +1 -0
  109. data/spec/dummy/config/initializers/secret_token.rb +7 -0
  110. data/spec/dummy/config/initializers/session_store.rb +8 -0
  111. data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
  112. data/spec/dummy/config/locales/en.yml +5 -0
  113. data/spec/dummy/config/locales/quorum.en.yml +8 -0
  114. data/spec/dummy/config/quorum_settings.yml +145 -0
  115. data/spec/dummy/config/routes.rb +9 -0
  116. data/spec/dummy/config.ru +4 -0
  117. data/spec/dummy/db/schema.rb +214 -0
  118. data/spec/dummy/lib/assets/.gitkeep +0 -0
  119. data/spec/dummy/log/.gitkeep +0 -0
  120. data/spec/dummy/public/404.html +26 -0
  121. data/spec/dummy/public/422.html +26 -0
  122. data/spec/dummy/public/500.html +26 -0
  123. data/spec/dummy/public/favicon.ico +0 -0
  124. data/spec/dummy/quorum/bin/search +141 -0
  125. data/spec/dummy/quorum/blastdb/test/contigs.fa +2 -0
  126. data/spec/dummy/quorum/blastdb/test/peptides.fa +2 -0
  127. data/spec/dummy/quorum/blastdb/test.nhd +1 -0
  128. data/spec/dummy/quorum/blastdb/test.nhi +0 -0
  129. data/spec/dummy/quorum/blastdb/test.nhr +0 -0
  130. data/spec/dummy/quorum/blastdb/test.nin +0 -0
  131. data/spec/dummy/quorum/blastdb/test.nog +0 -0
  132. data/spec/dummy/quorum/blastdb/test.nsd +1 -0
  133. data/spec/dummy/quorum/blastdb/test.nsi +0 -0
  134. data/spec/dummy/quorum/blastdb/test.nsq +0 -0
  135. data/spec/dummy/quorum/blastdb/test.phd +1 -0
  136. data/spec/dummy/quorum/blastdb/test.phi +0 -0
  137. data/spec/dummy/quorum/blastdb/test.phr +0 -0
  138. data/spec/dummy/quorum/blastdb/test.pin +0 -0
  139. data/spec/dummy/quorum/blastdb/test.pog +0 -0
  140. data/spec/dummy/quorum/blastdb/test.psd +1 -0
  141. data/spec/dummy/quorum/blastdb/test.psi +0 -0
  142. data/spec/dummy/quorum/blastdb/test.psq +0 -0
  143. data/spec/dummy/quorum/lib/logger.rb +43 -0
  144. data/spec/dummy/quorum/lib/search_tools/blast.rb +412 -0
  145. data/spec/dummy/quorum/lib/trollop.rb +781 -0
  146. data/spec/dummy/script/rails +6 -0
  147. data/spec/models/blastn_job_report_spec.rb +13 -0
  148. data/spec/models/blastn_job_spec.rb +103 -0
  149. data/spec/models/blastp_job_report_spec.rb +13 -0
  150. data/spec/models/blastp_job_spec.rb +103 -0
  151. data/spec/models/blastx_job_report_spec.rb +13 -0
  152. data/spec/models/blastx_job_spec.rb +103 -0
  153. data/spec/models/job_spec.rb +40 -0
  154. data/spec/models/tblastn_job_report_spec.rb +13 -0
  155. data/spec/models/tblastn_job_spec.rb +103 -0
  156. data/spec/quorum/quorum_sequence_spec.rb +64 -0
  157. data/spec/quorum_installed_spec.rb +64 -0
  158. data/spec/requests/jobs_spec.rb +138 -0
  159. data/spec/spec_helper.rb +45 -0
  160. data/spec/tasks/blastdb_rake_spec.rb +119 -0
  161. data/spec/templates/blast_spec.rb +8 -0
  162. data/spec/templates/logger_spec.rb +35 -0
  163. data/vendor/assets/javascripts/jquery.tipsy.js +241 -0
  164. data/vendor/assets/javascripts/underscore-min.js +30 -0
  165. metadata +325 -0
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env ruby
2
+ # This command will automatically be run when you run "rails" with Rails 3 gems installed from the root of your application.
3
+
4
+ APP_PATH = File.expand_path('../../config/application', __FILE__)
5
+ require File.expand_path('../../config/boot', __FILE__)
6
+ require 'rails/commands'
@@ -0,0 +1,13 @@
1
+ require 'spec_helper'
2
+
3
+ describe Quorum::BlastnJobReport do
4
+
5
+ it "should respond to default_order" do
6
+ Quorum::BlastnJobReport.methods.should include(:default_order)
7
+ end
8
+
9
+ it "should respond to by_query" do
10
+ Quorum::BlastnJobReport.methods.should include(:by_query)
11
+ end
12
+
13
+ end
@@ -0,0 +1,103 @@
1
+ require 'spec_helper'
2
+
3
+ describe Quorum::BlastnJob do
4
+
5
+ before(:each) do
6
+ @blastn_job = Quorum::BlastnJob.new()
7
+ end
8
+
9
+ it "fails validation with poorly formatted expectation (using error_on)" do
10
+ @blastn_job.expectation = "this is bad"
11
+ @blastn_job.should have(1).error_on(:expectation)
12
+ end
13
+
14
+ it "passes validation with valid expectation values (using error_on)" do
15
+ @blastn_job.expectation = 12
16
+ @blastn_job.should have(0).errors_on(:expectation)
17
+ @blastn_job.expectation = 12.1201
18
+ @blastn_job.should have(0).errors_on(:expectation)
19
+ @blastn_job.expectation = "12e-10"
20
+ @blastn_job.should have(0).errors_on(:expectation)
21
+ @blastn_job.expectation = "2e+10"
22
+ @blastn_job.should have(0).errors_on(:expectation)
23
+ end
24
+
25
+ it "fails validation with poorly formatted max_score (using error_on)" do
26
+ @blastn_job.max_score = 12.34
27
+ @blastn_job.should have(1).error_on(:max_score)
28
+ @blastn_job.max_score = "not a number"
29
+ @blastn_job.should have(1).error_on(:max_score)
30
+ end
31
+
32
+ it "passed validation with valid max_score (using error_on)" do
33
+ @blastn_job.max_score = 1235
34
+ @blastn_job.should have(0).errors_on(:max_score)
35
+ end
36
+
37
+ it "fails validation with poorly formatted gap_opening_penalty (using error_on)" do
38
+ @blastn_job.gap_opening_penalty = "not a number"
39
+ @blastn_job.should have(1).error_on(:gap_opening_penalty)
40
+ @blastn_job.gap_opening_penalty = 100.10
41
+ @blastn_job.should have(1).error_on(:gap_opening_penalty)
42
+ end
43
+
44
+ it "passed validation with valid gap_opening_penalty (using error_on)" do
45
+ @blastn_job.max_score = 13
46
+ @blastn_job.should have(0).errors_on(:gap_opening_penalty)
47
+ end
48
+
49
+ it "fails validation with poorly formatted gap_extension_penalty (using error_on)" do
50
+ @blastn_job.gap_extension_penalty = "who are you?"
51
+ @blastn_job.should have(1).error_on(:gap_extension_penalty)
52
+ @blastn_job.gap_extension_penalty = 0.3
53
+ @blastn_job.should have(1).error_on(:gap_extension_penalty)
54
+ end
55
+
56
+ it "passed validation with valid gap_extension_penalty (using error_on)" do
57
+ @blastn_job.max_score = 456
58
+ @blastn_job.should have(0).errors_on(:gap_extension_penalty)
59
+ end
60
+
61
+ it "fails validation without selecting gap_opening_extension with gapped_alignment (using error_on)" do
62
+ @blastn_job.gapped_alignments = true
63
+ @blastn_job.gap_opening_extension = ""
64
+ @blastn_job.should have(1).error_on(:gap_opening_extension)
65
+ end
66
+
67
+ it "fails validation without selecting gap_opening_extension with gapped_alignment (using error_on)" do
68
+ @blastn_job.gapped_alignments = true
69
+ @blastn_job.gap_opening_extension = "11, 2"
70
+ @blastn_job.should have(0).errors_on(:gap_opening_extension)
71
+ end
72
+
73
+ it "gapped_alignment? returns true if gapped_alignments is set" do
74
+ @blastn_job.gapped_alignments = true
75
+ @blastn_job.gapped_alignment?.should be_true
76
+ end
77
+
78
+ it "gapped_alignment? returns false if gapped_alignments is not set" do
79
+ @blastn_job.gapped_alignments = false
80
+ @blastn_job.gapped_alignment?.should be_false
81
+ end
82
+
83
+ it "gap_opening_extension values should return an Array of Arrays" do
84
+ @blastn_job.gap_opening_extension_values.should eq(
85
+ [
86
+ ['--Select--', ''],
87
+ ['32767, 32767', '32767,32767'],
88
+ ['11, 2', '11,2'],
89
+ ['10, 2', '10,2'],
90
+ ['9, 2', '9,2'],
91
+ ['8, 2', '8,2'],
92
+ ['7, 2', '7,2'],
93
+ ['6, 2', '6,2'],
94
+ ['13, 1', '13,1'],
95
+ ['12, 1', '12,1'],
96
+ ['11, 1', '11,1'],
97
+ ['10, 1', '10,1'],
98
+ ['9, 1', '9,1']
99
+ ]
100
+ )
101
+ end
102
+
103
+ end
@@ -0,0 +1,13 @@
1
+ require 'spec_helper'
2
+
3
+ describe Quorum::BlastpJobReport do
4
+
5
+ it "should respond to default_order" do
6
+ Quorum::BlastpJobReport.methods.should include(:default_order)
7
+ end
8
+
9
+ it "should respond to by_query" do
10
+ Quorum::BlastpJobReport.methods.should include(:by_query)
11
+ end
12
+
13
+ end
@@ -0,0 +1,103 @@
1
+ require 'spec_helper'
2
+
3
+ describe Quorum::BlastpJob do
4
+
5
+ before(:each) do
6
+ @blastp_job = Quorum::BlastpJob.new()
7
+ end
8
+
9
+ it "fails validation with poorly formatted expectation (using error_on)" do
10
+ @blastp_job.expectation = "this is bad"
11
+ @blastp_job.should have(1).error_on(:expectation)
12
+ end
13
+
14
+ it "passes validation with valid expectation values (using error_on)" do
15
+ @blastp_job.expectation = 12
16
+ @blastp_job.should have(0).errors_on(:expectation)
17
+ @blastp_job.expectation = 12.1201
18
+ @blastp_job.should have(0).errors_on(:expectation)
19
+ @blastp_job.expectation = "12e-10"
20
+ @blastp_job.should have(0).errors_on(:expectation)
21
+ @blastp_job.expectation = "2e+10"
22
+ @blastp_job.should have(0).errors_on(:expectation)
23
+ end
24
+
25
+ it "fails validation with poorly formatted max_score (using error_on)" do
26
+ @blastp_job.max_score = 12.34
27
+ @blastp_job.should have(1).error_on(:max_score)
28
+ @blastp_job.max_score = "not a number"
29
+ @blastp_job.should have(1).error_on(:max_score)
30
+ end
31
+
32
+ it "passed validation with valid max_score (using error_on)" do
33
+ @blastp_job.max_score = 1235
34
+ @blastp_job.should have(0).errors_on(:max_score)
35
+ end
36
+
37
+ it "fails validation with poorly formatted gap_opening_penalty (using error_on)" do
38
+ @blastp_job.gap_opening_penalty = "not a number"
39
+ @blastp_job.should have(1).error_on(:gap_opening_penalty)
40
+ @blastp_job.gap_opening_penalty = 100.10
41
+ @blastp_job.should have(1).error_on(:gap_opening_penalty)
42
+ end
43
+
44
+ it "passed validation with valid gap_opening_penalty (using error_on)" do
45
+ @blastp_job.max_score = 13
46
+ @blastp_job.should have(0).errors_on(:gap_opening_penalty)
47
+ end
48
+
49
+ it "fails validation with poorly formatted gap_extension_penalty (using error_on)" do
50
+ @blastp_job.gap_extension_penalty = "who are you?"
51
+ @blastp_job.should have(1).error_on(:gap_extension_penalty)
52
+ @blastp_job.gap_extension_penalty = 0.3
53
+ @blastp_job.should have(1).error_on(:gap_extension_penalty)
54
+ end
55
+
56
+ it "passed validation with valid gap_extension_penalty (using error_on)" do
57
+ @blastp_job.max_score = 456
58
+ @blastp_job.should have(0).errors_on(:gap_extension_penalty)
59
+ end
60
+
61
+ it "fails validation without selecting gap_opening_extension with gapped_alignment (using error_on)" do
62
+ @blastp_job.gapped_alignments = true
63
+ @blastp_job.gap_opening_extension = ""
64
+ @blastp_job.should have(1).error_on(:gap_opening_extension)
65
+ end
66
+
67
+ it "fails validation without selecting gap_opening_extension with gapped_alignment (using error_on)" do
68
+ @blastp_job.gapped_alignments = true
69
+ @blastp_job.gap_opening_extension = "11, 2"
70
+ @blastp_job.should have(0).errors_on(:gap_opening_extension)
71
+ end
72
+
73
+ it "gapped_alignment? returns true if gapped_alignments is set" do
74
+ @blastp_job.gapped_alignments = true
75
+ @blastp_job.gapped_alignment?.should be_true
76
+ end
77
+
78
+ it "gapped_alignment? returns false if gapped_alignments is not set" do
79
+ @blastp_job.gapped_alignments = false
80
+ @blastp_job.gapped_alignment?.should be_false
81
+ end
82
+
83
+ it "gap_opening_extension values should return an Array of Arrays" do
84
+ @blastp_job.gap_opening_extension_values.should eq(
85
+ [
86
+ ['--Select--', ''],
87
+ ['32767, 32767', '32767,32767'],
88
+ ['11, 2', '11,2'],
89
+ ['10, 2', '10,2'],
90
+ ['9, 2', '9,2'],
91
+ ['8, 2', '8,2'],
92
+ ['7, 2', '7,2'],
93
+ ['6, 2', '6,2'],
94
+ ['13, 1', '13,1'],
95
+ ['12, 1', '12,1'],
96
+ ['11, 1', '11,1'],
97
+ ['10, 1', '10,1'],
98
+ ['9, 1', '9,1']
99
+ ]
100
+ )
101
+ end
102
+
103
+ end
@@ -0,0 +1,13 @@
1
+ require 'spec_helper'
2
+
3
+ describe Quorum::BlastxJobReport do
4
+
5
+ it "should respond to default_order" do
6
+ Quorum::BlastxJobReport.methods.should include(:default_order)
7
+ end
8
+
9
+ it "should respond to default_order" do
10
+ Quorum::BlastxJobReport.methods.should include(:by_query)
11
+ end
12
+
13
+ end
@@ -0,0 +1,103 @@
1
+ require 'spec_helper'
2
+
3
+ describe Quorum::BlastxJob do
4
+
5
+ before(:each) do
6
+ @blastx_job = Quorum::BlastxJob.new()
7
+ end
8
+
9
+ it "fails validation with poorly formatted expectation (using error_on)" do
10
+ @blastx_job.expectation = "this is bad"
11
+ @blastx_job.should have(1).error_on(:expectation)
12
+ end
13
+
14
+ it "passes validation with valid expectation values (using error_on)" do
15
+ @blastx_job.expectation = 12
16
+ @blastx_job.should have(0).errors_on(:expectation)
17
+ @blastx_job.expectation = 12.1201
18
+ @blastx_job.should have(0).errors_on(:expectation)
19
+ @blastx_job.expectation = "12e-10"
20
+ @blastx_job.should have(0).errors_on(:expectation)
21
+ @blastx_job.expectation = "2e+10"
22
+ @blastx_job.should have(0).errors_on(:expectation)
23
+ end
24
+
25
+ it "fails validation with poorly formatted max_score (using error_on)" do
26
+ @blastx_job.max_score = 12.34
27
+ @blastx_job.should have(1).error_on(:max_score)
28
+ @blastx_job.max_score = "not a number"
29
+ @blastx_job.should have(1).error_on(:max_score)
30
+ end
31
+
32
+ it "passed validation with valid max_score (using error_on)" do
33
+ @blastx_job.max_score = 1235
34
+ @blastx_job.should have(0).errors_on(:max_score)
35
+ end
36
+
37
+ it "fails validation with poorly formatted gap_opening_penalty (using error_on)" do
38
+ @blastx_job.gap_opening_penalty = "not a number"
39
+ @blastx_job.should have(1).error_on(:gap_opening_penalty)
40
+ @blastx_job.gap_opening_penalty = 100.10
41
+ @blastx_job.should have(1).error_on(:gap_opening_penalty)
42
+ end
43
+
44
+ it "passed validation with valid gap_opening_penalty (using error_on)" do
45
+ @blastx_job.max_score = 13
46
+ @blastx_job.should have(0).errors_on(:gap_opening_penalty)
47
+ end
48
+
49
+ it "fails validation with poorly formatted gap_extension_penalty (using error_on)" do
50
+ @blastx_job.gap_extension_penalty = "who are you?"
51
+ @blastx_job.should have(1).error_on(:gap_extension_penalty)
52
+ @blastx_job.gap_extension_penalty = 0.3
53
+ @blastx_job.should have(1).error_on(:gap_extension_penalty)
54
+ end
55
+
56
+ it "passed validation with valid gap_extension_penalty (using error_on)" do
57
+ @blastx_job.max_score = 456
58
+ @blastx_job.should have(0).errors_on(:gap_extension_penalty)
59
+ end
60
+
61
+ it "fails validation without selecting gap_opening_extension with gapped_alignment (using error_on)" do
62
+ @blastx_job.gapped_alignments = true
63
+ @blastx_job.gap_opening_extension = ""
64
+ @blastx_job.should have(1).error_on(:gap_opening_extension)
65
+ end
66
+
67
+ it "fails validation without selecting gap_opening_extension with gapped_alignment (using error_on)" do
68
+ @blastx_job.gapped_alignments = true
69
+ @blastx_job.gap_opening_extension = "11, 2"
70
+ @blastx_job.should have(0).errors_on(:gap_opening_extension)
71
+ end
72
+
73
+ it "gapped_alignment? returns true if gapped_alignments is set" do
74
+ @blastx_job.gapped_alignments = true
75
+ @blastx_job.gapped_alignment?.should be_true
76
+ end
77
+
78
+ it "gapped_alignment? returns false if gapped_alignments is not set" do
79
+ @blastx_job.gapped_alignments = false
80
+ @blastx_job.gapped_alignment?.should be_false
81
+ end
82
+
83
+ it "gap_opening_extension values should return an Array of Arrays" do
84
+ @blastx_job.gap_opening_extension_values.should eq(
85
+ [
86
+ ['--Select--', ''],
87
+ ['32767, 32767', '32767,32767'],
88
+ ['11, 2', '11,2'],
89
+ ['10, 2', '10,2'],
90
+ ['9, 2', '9,2'],
91
+ ['8, 2', '8,2'],
92
+ ['7, 2', '7,2'],
93
+ ['6, 2', '6,2'],
94
+ ['13, 1', '13,1'],
95
+ ['12, 1', '12,1'],
96
+ ['11, 1', '11,1'],
97
+ ['10, 1', '10,1'],
98
+ ['9, 1', '9,1']
99
+ ]
100
+ )
101
+ end
102
+
103
+ end
@@ -0,0 +1,40 @@
1
+ require 'spec_helper'
2
+
3
+ describe Quorum::Job do
4
+
5
+ before(:each) do
6
+ @job = Quorum::Job.new()
7
+ end
8
+
9
+ it "fails validation without params (using error_on)" do
10
+ @job.should have(1).error_on(:sequence)
11
+ @job.should have(1).error_on(:algorithm)
12
+ end
13
+
14
+ it "passes validation with algorithm and valid sequence data" do
15
+ @job.sequence = File.open(
16
+ File.expand_path("../../data/nucl_prot_seqs.txt", __FILE__)
17
+ ).read
18
+ @job.build_blastn_job
19
+ @job.blastn_job.queue = true
20
+ @job.should have(0).errors_on(:sequence)
21
+ @job.should have(0).errors_on(:algorithm)
22
+ end
23
+
24
+ it "queues workers after save" do
25
+ resque = double("Resque")
26
+ resque.stub(:enqueue)
27
+
28
+ @job.sequence = File.open(
29
+ File.expand_path("../../data/nucl_prot_seqs.txt", __FILE__)
30
+ ).read
31
+
32
+ @job.build_blastn_job
33
+ @job.blastn_job.queue = true
34
+ @job.blastn_job.blast_dbs = ["tmp"]
35
+
36
+ @job.should_receive(:queue_workers)
37
+ @job.save!
38
+ end
39
+
40
+ end
@@ -0,0 +1,13 @@
1
+ require 'spec_helper'
2
+
3
+ describe Quorum::TblastnJobReport do
4
+
5
+ it "should respond to default_order" do
6
+ Quorum::TblastnJobReport.methods.should include(:default_order)
7
+ end
8
+
9
+ it "should respond to default_order" do
10
+ Quorum::TblastnJobReport.methods.should include(:by_query)
11
+ end
12
+
13
+ end
@@ -0,0 +1,103 @@
1
+ require 'spec_helper'
2
+
3
+ describe Quorum::TblastnJob do
4
+
5
+ before(:each) do
6
+ @tblastn_job = Quorum::TblastnJob.new()
7
+ end
8
+
9
+ it "fails validation with poorly formatted expectation (using error_on)" do
10
+ @tblastn_job.expectation = "this is bad"
11
+ @tblastn_job.should have(1).error_on(:expectation)
12
+ end
13
+
14
+ it "passes validation with valid expectation values (using error_on)" do
15
+ @tblastn_job.expectation = 12
16
+ @tblastn_job.should have(0).errors_on(:expectation)
17
+ @tblastn_job.expectation = 12.1201
18
+ @tblastn_job.should have(0).errors_on(:expectation)
19
+ @tblastn_job.expectation = "12e-10"
20
+ @tblastn_job.should have(0).errors_on(:expectation)
21
+ @tblastn_job.expectation = "2e+10"
22
+ @tblastn_job.should have(0).errors_on(:expectation)
23
+ end
24
+
25
+ it "fails validation with poorly formatted max_score (using error_on)" do
26
+ @tblastn_job.max_score = 12.34
27
+ @tblastn_job.should have(1).error_on(:max_score)
28
+ @tblastn_job.max_score = "not a number"
29
+ @tblastn_job.should have(1).error_on(:max_score)
30
+ end
31
+
32
+ it "passed validation with valid max_score (using error_on)" do
33
+ @tblastn_job.max_score = 1235
34
+ @tblastn_job.should have(0).errors_on(:max_score)
35
+ end
36
+
37
+ it "fails validation with poorly formatted gap_opening_penalty (using error_on)" do
38
+ @tblastn_job.gap_opening_penalty = "not a number"
39
+ @tblastn_job.should have(1).error_on(:gap_opening_penalty)
40
+ @tblastn_job.gap_opening_penalty = 100.10
41
+ @tblastn_job.should have(1).error_on(:gap_opening_penalty)
42
+ end
43
+
44
+ it "passed validation with valid gap_opening_penalty (using error_on)" do
45
+ @tblastn_job.max_score = 13
46
+ @tblastn_job.should have(0).errors_on(:gap_opening_penalty)
47
+ end
48
+
49
+ it "fails validation with poorly formatted gap_extension_penalty (using error_on)" do
50
+ @tblastn_job.gap_extension_penalty = "who are you?"
51
+ @tblastn_job.should have(1).error_on(:gap_extension_penalty)
52
+ @tblastn_job.gap_extension_penalty = 0.3
53
+ @tblastn_job.should have(1).error_on(:gap_extension_penalty)
54
+ end
55
+
56
+ it "passed validation with valid gap_extension_penalty (using error_on)" do
57
+ @tblastn_job.max_score = 456
58
+ @tblastn_job.should have(0).errors_on(:gap_extension_penalty)
59
+ end
60
+
61
+ it "fails validation without selecting gap_opening_extension with gapped_alignment (using error_on)" do
62
+ @tblastn_job.gapped_alignments = true
63
+ @tblastn_job.gap_opening_extension = ""
64
+ @tblastn_job.should have(1).error_on(:gap_opening_extension)
65
+ end
66
+
67
+ it "fails validation without selecting gap_opening_extension with gapped_alignment (using error_on)" do
68
+ @tblastn_job.gapped_alignments = true
69
+ @tblastn_job.gap_opening_extension = "11, 2"
70
+ @tblastn_job.should have(0).errors_on(:gap_opening_extension)
71
+ end
72
+
73
+ it "gapped_alignment? returns true if gapped_alignments is set" do
74
+ @tblastn_job.gapped_alignments = true
75
+ @tblastn_job.gapped_alignment?.should be_true
76
+ end
77
+
78
+ it "gapped_alignment? returns false if gapped_alignments is not set" do
79
+ @tblastn_job.gapped_alignments = false
80
+ @tblastn_job.gapped_alignment?.should be_false
81
+ end
82
+
83
+ it "gap_opening_extension values should return an Array of Arrays" do
84
+ @tblastn_job.gap_opening_extension_values.should eq(
85
+ [
86
+ ['--Select--', ''],
87
+ ['32767, 32767', '32767,32767'],
88
+ ['11, 2', '11,2'],
89
+ ['10, 2', '10,2'],
90
+ ['9, 2', '9,2'],
91
+ ['8, 2', '8,2'],
92
+ ['7, 2', '7,2'],
93
+ ['6, 2', '6,2'],
94
+ ['13, 1', '13,1'],
95
+ ['12, 1', '12,1'],
96
+ ['11, 1', '11,1'],
97
+ ['10, 1', '10,1'],
98
+ ['9, 1', '9,1']
99
+ ]
100
+ )
101
+ end
102
+
103
+ end
@@ -0,0 +1,64 @@
1
+ require 'spec_helper'
2
+ require 'quorum/sequence'
3
+
4
+ include Quorum::Sequence
5
+
6
+ describe "Quorum::Sequence" do
7
+ describe "#create_hash" do
8
+ it "creates a MD5.hexdigest of a sequence" do
9
+ sequence = File.open(
10
+ File.expand_path("../../data/nucl_prot_seqs.txt", __FILE__)
11
+ ).read
12
+ create_hash(sequence).should_not be_nil
13
+ end
14
+ end
15
+
16
+ describe "#write_input_sequence_to_file" do
17
+ it "writes valid FASTA input sequence to file" do
18
+ sequence = File.open(
19
+ File.expand_path("../../data/nucl_prot_seqs.txt", __FILE__)
20
+ ).read
21
+ dir = File.join(::Rails.root.to_s, "log")
22
+ hash = create_hash(sequence)
23
+ write_input_sequence_to_file(dir, hash, sequence)
24
+
25
+ File.size(
26
+ File.join(dir, hash + ".seq")
27
+ ).should be > 0
28
+
29
+ File.size(
30
+ File.join(dir, hash + ".fa")
31
+ ).should be > 0
32
+
33
+ `rm #{File.join(dir, hash + "*")}`
34
+ end
35
+
36
+ it "raises an exception if seqret's exit status is > 0" do
37
+ sequence = File.open(
38
+ File.expand_path("../../data/seqs_not_fa.txt", __FILE__)
39
+ ).read
40
+ dir = File.join(::Rails.root.to_s, "log")
41
+ hash = create_hash(sequence)
42
+ lambda {
43
+ write_input_sequence_to_file(dir, hash, sequence)
44
+ }.should raise_error
45
+ `rm #{File.join(dir, hash + "*")}`
46
+ end
47
+ end
48
+
49
+ describe "#discover_input_sequence_type" do
50
+ it "should return 'nucleic_acid' when fed nucleic acid sequences" do
51
+ sequence = File.open(
52
+ File.expand_path("../../data/nucl_seqs.txt", __FILE__)
53
+ ).read
54
+ discover_input_sequence_type(sequence).should eq("nucleic_acid")
55
+ end
56
+
57
+ it "should return 'amino_acid' when fed amino acid sequences" do
58
+ sequence = File.open(
59
+ File.expand_path("../../data/prot_seqs.txt", __FILE__)
60
+ ).read
61
+ discover_input_sequence_type(sequence).should eq("amino_acid")
62
+ end
63
+ end
64
+ end
@@ -0,0 +1,64 @@
1
+ require 'spec_helper'
2
+
3
+ describe "Quorum" do
4
+ before(:all) do
5
+ @dummy_path = File.expand_path("../dummy/", __FILE__)
6
+ end
7
+
8
+ it "checks for generated config file" do
9
+ File.exists?(
10
+ File.join(@dummy_path, "config", "quorum_settings.yml")
11
+ ).should be_true
12
+ end
13
+
14
+ it "checks for generated initializer" do
15
+ File.exists?(
16
+ File.join(@dummy_path, "config", "initializers", "quorum_initializer.rb")
17
+ ).should be_true
18
+ end
19
+
20
+ it "checks for generated locale" do
21
+ File.exists?(
22
+ File.join(@dummy_path, "config", "locales", "quorum.en.yml")
23
+ ).should be_true
24
+ end
25
+
26
+ it "checks for quorum directory" do
27
+ File.directory?(File.join(@dummy_path, "quorum")).should be_true
28
+ end
29
+
30
+ it "checks for quorum/lib files" do
31
+ File.exists?(
32
+ File.join(@dummy_path, "quorum", "lib", "search_tools", "blast.rb")
33
+ ).should be_true
34
+
35
+ File.exists?(
36
+ File.join(@dummy_path, "quorum", "lib", "logger.rb")
37
+ ).should be_true
38
+
39
+ File.exists?(
40
+ File.join(@dummy_path, "quorum", "lib", "trollop.rb")
41
+ ).should be_true
42
+ end
43
+
44
+ it "checks for quorum/bin files and ensures they are executable" do
45
+ File.exists?(
46
+ File.join(@dummy_path, "quorum", "bin", "search")
47
+ ).should be_true
48
+
49
+ File.executable?(
50
+ File.join(@dummy_path, "quorum", "bin", "search")
51
+ ).should be_true
52
+ end
53
+
54
+ it "checks for generated directories" do
55
+ File.directory?(File.join(@dummy_path, "quorum", "log")).should be_true
56
+
57
+ File.directory?(File.join(@dummy_path, "quorum", "tmp")).should be_true
58
+ end
59
+
60
+ it "ensures Quorum::Engine is mounted in dummy/config/routes.rb" do
61
+ f = File.open(File.join(@dummy_path, "config", "routes.rb"), "r")
62
+ f.read.include?("mount Quorum::Engine => \"/quorum\"").should be_true
63
+ end
64
+ end