genevalidatorapp 2.1.1 → 2.1.2
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/Rakefile +1 -1
- data/genevalidatorapp.gemspec +1 -2
- data/lib/genevalidatorapp/config.rb +8 -7
- data/lib/genevalidatorapp/exceptions.rb +1 -1
- data/lib/genevalidatorapp/genevalidator.rb +1 -1
- data/lib/genevalidatorapp/logger.rb +2 -2
- data/lib/genevalidatorapp/routes.rb +42 -0
- data/lib/genevalidatorapp/server.rb +7 -7
- data/lib/genevalidatorapp/version.rb +1 -1
- data/lib/genevalidatorapp.rb +20 -16
- data/test/test_route_spec.rb +7 -7
- data/views/layout.slim +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 5fef79353732230b2ca0f21f183b6232a27761422b7126577a553f11278518c7
|
|
4
|
+
data.tar.gz: 25795b4b7865762e8dc408b030748cd9584205d9ad00958e8d51d4908e50acfb
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 207b14ef281b2cd86e24b085cbb34754b75175838df0032a8375ac4d19173f6391d075915fc1f2b3676de4f33db75b676dff1cb586f310ddeb88b37a0ef8f57b
|
|
7
|
+
data.tar.gz: bd172c9069bea91010bad2c0d2c611e2707678767b857a6cc68ada1353180db712b14e5695a5c7036dbfad94d193971b7faf94d5140a14db35f2444d73f921c6
|
data/Rakefile
CHANGED
data/genevalidatorapp.gemspec
CHANGED
|
@@ -61,7 +61,7 @@ module GeneValidatorApp
|
|
|
61
61
|
|
|
62
62
|
logger.debug "Reading configuration file: #{config_file}."
|
|
63
63
|
symbolise YAML.load_file(config_file)
|
|
64
|
-
rescue => error
|
|
64
|
+
rescue StandardError => error
|
|
65
65
|
raise CONFIG_FILE_ERROR.new(config_file, error)
|
|
66
66
|
end
|
|
67
67
|
|
|
@@ -72,12 +72,13 @@ module GeneValidatorApp
|
|
|
72
72
|
# Default configuration data.
|
|
73
73
|
def defaults
|
|
74
74
|
{
|
|
75
|
-
:
|
|
76
|
-
:
|
|
77
|
-
:
|
|
78
|
-
:
|
|
79
|
-
:
|
|
80
|
-
:
|
|
75
|
+
num_threads: 1,
|
|
76
|
+
mafft_threads: 1,
|
|
77
|
+
port: 5678,
|
|
78
|
+
ssl: false,
|
|
79
|
+
host: '0.0.0.0',
|
|
80
|
+
gv_public_dir: File.join(Dir.home, '.genevalidatorapp/'),
|
|
81
|
+
max_characters: 'undefined'
|
|
81
82
|
}
|
|
82
83
|
end
|
|
83
84
|
|
|
@@ -211,7 +211,7 @@ module GeneValidatorApp
|
|
|
211
211
|
|
|
212
212
|
def parse_output_json
|
|
213
213
|
json_contents = File.read(output_json_file_path)
|
|
214
|
-
JSON.parse(json_contents,symbolize_names: true)
|
|
214
|
+
JSON.parse(json_contents, symbolize_names: true)
|
|
215
215
|
end
|
|
216
216
|
|
|
217
217
|
def output_json_file_path
|
|
@@ -10,14 +10,14 @@ module GeneValidatorApp
|
|
|
10
10
|
|
|
11
11
|
# We change Logging format so that it is consistent with Sinatra's
|
|
12
12
|
class Formatter < Formatter
|
|
13
|
-
Format = "[%s] %s %s\n"
|
|
13
|
+
Format = "[%s] %s %s\n".freeze
|
|
14
14
|
|
|
15
15
|
def initialize
|
|
16
16
|
self.datetime_format = '%Y-%m-%d %H:%M:%S'
|
|
17
17
|
end
|
|
18
18
|
|
|
19
19
|
def call(severity, time, _progname, msg)
|
|
20
|
-
Format
|
|
20
|
+
format(Format, format_datetime(time), severity, msg2str(msg))
|
|
21
21
|
end
|
|
22
22
|
end
|
|
23
23
|
end
|
|
@@ -36,6 +36,48 @@ module GeneValidatorApp
|
|
|
36
36
|
set :public_folder, -> { GeneValidatorApp.public_dir }
|
|
37
37
|
end
|
|
38
38
|
|
|
39
|
+
helpers do
|
|
40
|
+
# Overide default URI helper method - to hardcode a https://
|
|
41
|
+
# In our setup, we are running passenger on http:// (not secure) and then
|
|
42
|
+
# reverse proxying that onto a 443 port (i.e. https://)
|
|
43
|
+
# Generates the absolute URI for a given path in the app.
|
|
44
|
+
# Takes Rack routers and reverse proxies into account.
|
|
45
|
+
def uri(addr = nil, absolute = true, add_script_name = true)
|
|
46
|
+
return addr if addr =~ /\A[a-z][a-z0-9\+\.\-]*:/i
|
|
47
|
+
uri = [host = '']
|
|
48
|
+
if absolute
|
|
49
|
+
host << (GeneValidatorApp.ssl? ? 'https://' : 'http://')
|
|
50
|
+
host << if request.forwarded? || request.port != (request.secure? ? 443 : 80)
|
|
51
|
+
request.host_with_port
|
|
52
|
+
else
|
|
53
|
+
request.host
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
uri << request.script_name.to_s if add_script_name
|
|
57
|
+
uri << (addr || request.path_info).to_s
|
|
58
|
+
File.join uri
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
def host_with_port
|
|
62
|
+
forwarded = request.env['HTTP_X_FORWARDED_HOST']
|
|
63
|
+
if forwarded
|
|
64
|
+
forwarded.split(/,\s?/).last
|
|
65
|
+
else
|
|
66
|
+
request.env['HTTP_HOST'] || "#{request.env['SERVER_NAME'] ||
|
|
67
|
+
request.env['SERVER_ADDR']}:#{request.env['SERVER_PORT']}"
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
# Remove port number.
|
|
72
|
+
def host
|
|
73
|
+
host_with_port.to_s.sub(/:\d+\z/, '')
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
def base_url
|
|
77
|
+
@base_url ||= "#{GeneValidatorApp.ssl? ? 'https' : 'http'}://#{host}"
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
|
|
39
81
|
# Set up global variables for the templates...
|
|
40
82
|
before '/' do
|
|
41
83
|
@default_db = Database.default_db
|
|
@@ -35,13 +35,13 @@ module GeneValidatorApp
|
|
|
35
35
|
# rubocop:disable Metrics/AbcSize
|
|
36
36
|
def options
|
|
37
37
|
@options ||= {
|
|
38
|
-
:
|
|
39
|
-
:
|
|
40
|
-
:
|
|
41
|
-
:
|
|
42
|
-
:
|
|
43
|
-
:
|
|
44
|
-
:
|
|
38
|
+
BindAddress: app.config[:host],
|
|
39
|
+
Port: app.config[:port],
|
|
40
|
+
StartCallback: proc { app.on_start },
|
|
41
|
+
StopCallback: proc { app.on_stop },
|
|
42
|
+
OutputBufferSize: 5,
|
|
43
|
+
AccessLog: [[logdev, WEBrick::AccessLog::COMMON_LOG_FORMAT]],
|
|
44
|
+
Logger: WEBrick::Log.new(logdev)
|
|
45
45
|
}
|
|
46
46
|
end
|
|
47
47
|
# rubocop:enable Metrics/AbcSize
|
data/lib/genevalidatorapp.rb
CHANGED
|
@@ -12,7 +12,7 @@ require 'genevalidatorapp/version'
|
|
|
12
12
|
|
|
13
13
|
module GeneValidatorApp
|
|
14
14
|
# Use a fixed minimum version of BLAST+
|
|
15
|
-
MINIMUM_BLAST_VERSION = '2.2.30+'
|
|
15
|
+
MINIMUM_BLAST_VERSION = '2.2.30+'.freeze
|
|
16
16
|
|
|
17
17
|
class << self
|
|
18
18
|
def environment
|
|
@@ -27,6 +27,10 @@ module GeneValidatorApp
|
|
|
27
27
|
File.dirname(File.dirname(__FILE__))
|
|
28
28
|
end
|
|
29
29
|
|
|
30
|
+
def ssl?
|
|
31
|
+
@config[:ssl]
|
|
32
|
+
end
|
|
33
|
+
|
|
30
34
|
def logger
|
|
31
35
|
@logger ||= Logger.new(STDERR, verbose?)
|
|
32
36
|
end
|
|
@@ -92,7 +96,7 @@ module GeneValidatorApp
|
|
|
92
96
|
|
|
93
97
|
def init_dirs
|
|
94
98
|
config[:gv_public_dir] = File.expand_path(config[:gv_public_dir])
|
|
95
|
-
unique_start_id = 'GV_' +
|
|
99
|
+
unique_start_id = 'GV_' + Time.now.strftime('%Y%m%d-%H-%M-%S').to_s
|
|
96
100
|
@public_dir = File.join(config[:gv_public_dir], unique_start_id)
|
|
97
101
|
init_public_dir
|
|
98
102
|
end
|
|
@@ -114,12 +118,12 @@ module GeneValidatorApp
|
|
|
114
118
|
end
|
|
115
119
|
|
|
116
120
|
def init_database
|
|
117
|
-
|
|
121
|
+
raise DATABASE_DIR_NOT_SET unless config[:database_dir]
|
|
118
122
|
|
|
119
123
|
config[:database_dir] = File.expand_path(config[:database_dir])
|
|
120
124
|
unless File.exist?(config[:database_dir]) &&
|
|
121
125
|
File.directory?(config[:database_dir])
|
|
122
|
-
|
|
126
|
+
raise DATABASE_DIR_NOT_FOUND, config[:database_dir]
|
|
123
127
|
end
|
|
124
128
|
|
|
125
129
|
assert_blast_databases_present_in_database_dir
|
|
@@ -136,7 +140,7 @@ module GeneValidatorApp
|
|
|
136
140
|
return unless config[:require]
|
|
137
141
|
config[:require] = File.expand_path config[:require]
|
|
138
142
|
unless File.exist?(config[:require]) && File.file?(config[:require])
|
|
139
|
-
|
|
143
|
+
raise EXTENSION_FILE_NOT_FOUND, config[:require]
|
|
140
144
|
end
|
|
141
145
|
|
|
142
146
|
logger.debug("Loading extension: #{config[:require]}")
|
|
@@ -147,24 +151,24 @@ module GeneValidatorApp
|
|
|
147
151
|
cmd = "blastdbcmd -recursive -list '#{config[:database_dir]}'"
|
|
148
152
|
out = `#{cmd}`
|
|
149
153
|
errpat = /BLAST Database error/
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
154
|
+
raise NO_BLAST_DATABASE_FOUND, config[:database_dir] if out.empty?
|
|
155
|
+
raise BLAST_DATABASE_ERROR, cmd, out if out.match(errpat) ||
|
|
156
|
+
!$CHILD_STATUS.success?
|
|
153
157
|
type = []
|
|
154
158
|
out.lines.each { |l| type << l.split[1] }
|
|
155
159
|
return if type.include? 'Protein'
|
|
156
|
-
|
|
160
|
+
raise NO_PROTEIN_BLAST_DATABASE_FOUND, config[:database_dir]
|
|
157
161
|
end
|
|
158
162
|
|
|
159
163
|
def check_num_threads
|
|
160
164
|
num_threads = Integer(config[:num_threads])
|
|
161
|
-
|
|
165
|
+
raise NUM_THREADS_INCORRECT unless num_threads > 0
|
|
162
166
|
|
|
163
167
|
logger.debug "Will use #{num_threads} threads to run BLAST."
|
|
164
168
|
if num_threads > 256
|
|
165
169
|
logger.warn "Number of threads set at #{num_threads} is unusually high."
|
|
166
170
|
end
|
|
167
|
-
rescue
|
|
171
|
+
rescue StandardError
|
|
168
172
|
raise NUM_THREADS_INCORRECT
|
|
169
173
|
end
|
|
170
174
|
|
|
@@ -172,7 +176,7 @@ module GeneValidatorApp
|
|
|
172
176
|
if config[:max_characters] != 'undefined'
|
|
173
177
|
config[:max_characters] = Integer(config[:max_characters])
|
|
174
178
|
end
|
|
175
|
-
rescue
|
|
179
|
+
rescue StandardError
|
|
176
180
|
raise MAX_CHARACTERS_INCORRECT
|
|
177
181
|
end
|
|
178
182
|
|
|
@@ -181,7 +185,7 @@ module GeneValidatorApp
|
|
|
181
185
|
Array(config[:bin]).each do |bin|
|
|
182
186
|
bins << File.expand_path(bin)
|
|
183
187
|
unless File.exist?(bin) && File.directory?(bin)
|
|
184
|
-
|
|
188
|
+
raise BIN_DIR_NOT_FOUND, config[:bin]
|
|
185
189
|
end
|
|
186
190
|
export_bin_dir(bin)
|
|
187
191
|
end
|
|
@@ -196,13 +200,13 @@ module GeneValidatorApp
|
|
|
196
200
|
end
|
|
197
201
|
|
|
198
202
|
def assert_blast_installed_and_compatible
|
|
199
|
-
|
|
203
|
+
raise BLAST_NOT_INSTALLED unless command? 'blastdbcmd'
|
|
200
204
|
version = `blastdbcmd -version`.split[1]
|
|
201
|
-
|
|
205
|
+
raise BLAST_NOT_COMPATIBLE, version unless version >= MINIMUM_BLAST_VERSION
|
|
202
206
|
end
|
|
203
207
|
|
|
204
208
|
def assert_mafft_installed
|
|
205
|
-
|
|
209
|
+
raise MAFFT_NOT_INSTALLED unless command? 'mafft'
|
|
206
210
|
end
|
|
207
211
|
|
|
208
212
|
# Check and warn user if host is 0.0.0.0 (default).
|
data/test/test_route_spec.rb
CHANGED
|
@@ -66,14 +66,14 @@ module GeneValidatorApp
|
|
|
66
66
|
|
|
67
67
|
# W3C_Validator Gem is broken - https://github.com/alexdunae/w3c_validators/issues/16
|
|
68
68
|
# it 'validate the html' do
|
|
69
|
-
|
|
70
|
-
|
|
69
|
+
# get '/'
|
|
70
|
+
# html = last_response.body
|
|
71
71
|
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
72
|
+
# validator = MarkupValidator.new
|
|
73
|
+
# results = validator.validate_text(html.to_s)
|
|
74
|
+
# results.errors.each { |err| puts err.to_s } if results.errors.length > 0
|
|
75
|
+
# puts results.errors
|
|
76
|
+
# results.errors.length.should == 0
|
|
77
77
|
# end
|
|
78
78
|
end
|
|
79
79
|
end
|
data/views/layout.slim
CHANGED
|
@@ -54,7 +54,7 @@ html lang="en"
|
|
|
54
54
|
footer#footer
|
|
55
55
|
p.text-muted.text-center
|
|
56
56
|
| Please cite:
|
|
57
|
-
<a href="
|
|
57
|
+
<a href="https://academic.oup.com/bioinformatics/article/32/10/1559/1742817">Dragan M<sup>‡</sup>, Moghul I<sup>‡</sup>, Priyam A, Bustos C & Wurm Y. 2016. GeneValidator: identify problematic gene predictions.
|
|
58
58
|
<em>Bioinformatics</em>, doi: 10.1093/bioinformatics/btw015</a>.
|
|
59
59
|
br
|
|
60
60
|
| Developed at
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: genevalidatorapp
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 2.1.
|
|
4
|
+
version: 2.1.2
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Monica Dragan
|
|
@@ -11,7 +11,7 @@ authors:
|
|
|
11
11
|
autorequire:
|
|
12
12
|
bindir: bin
|
|
13
13
|
cert_chain: []
|
|
14
|
-
date: 2018-08-
|
|
14
|
+
date: 2018-08-15 00:00:00.000000000 Z
|
|
15
15
|
dependencies:
|
|
16
16
|
- !ruby/object:Gem::Dependency
|
|
17
17
|
name: capybara
|