miga-base 0.7.4.0 → 0.7.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (116) hide show
  1. checksums.yaml +4 -4
  2. data/lib/miga/cli.rb +10 -8
  3. data/lib/miga/cli/action.rb +2 -3
  4. data/lib/miga/cli/action/about.rb +5 -6
  5. data/lib/miga/cli/action/add.rb +18 -12
  6. data/lib/miga/cli/action/add_result.rb +2 -3
  7. data/lib/miga/cli/action/archive.rb +1 -2
  8. data/lib/miga/cli/action/classify_wf.rb +8 -6
  9. data/lib/miga/cli/action/console.rb +0 -1
  10. data/lib/miga/cli/action/daemon.rb +7 -7
  11. data/lib/miga/cli/action/date.rb +0 -1
  12. data/lib/miga/cli/action/derep_wf.rb +5 -4
  13. data/lib/miga/cli/action/doctor.rb +28 -20
  14. data/lib/miga/cli/action/doctor/base.rb +29 -6
  15. data/lib/miga/cli/action/edit.rb +1 -2
  16. data/lib/miga/cli/action/files.rb +8 -8
  17. data/lib/miga/cli/action/find.rb +5 -6
  18. data/lib/miga/cli/action/generic.rb +7 -7
  19. data/lib/miga/cli/action/get.rb +20 -17
  20. data/lib/miga/cli/action/get_db.rb +8 -2
  21. data/lib/miga/cli/action/index_wf.rb +1 -1
  22. data/lib/miga/cli/action/init.rb +34 -29
  23. data/lib/miga/cli/action/init/daemon_helper.rb +65 -43
  24. data/lib/miga/cli/action/lair.rb +7 -7
  25. data/lib/miga/cli/action/ln.rb +6 -6
  26. data/lib/miga/cli/action/ls.rb +1 -2
  27. data/lib/miga/cli/action/ncbi_get.rb +11 -3
  28. data/lib/miga/cli/action/new.rb +4 -4
  29. data/lib/miga/cli/action/next_step.rb +0 -1
  30. data/lib/miga/cli/action/preproc_wf.rb +3 -3
  31. data/lib/miga/cli/action/quality_wf.rb +1 -1
  32. data/lib/miga/cli/action/rm.rb +2 -3
  33. data/lib/miga/cli/action/run.rb +8 -8
  34. data/lib/miga/cli/action/stats.rb +3 -3
  35. data/lib/miga/cli/action/summary.rb +7 -6
  36. data/lib/miga/cli/action/tax_dist.rb +8 -4
  37. data/lib/miga/cli/action/tax_index.rb +3 -4
  38. data/lib/miga/cli/action/tax_set.rb +7 -6
  39. data/lib/miga/cli/action/tax_test.rb +6 -5
  40. data/lib/miga/cli/action/wf.rb +21 -19
  41. data/lib/miga/cli/base.rb +34 -32
  42. data/lib/miga/cli/objects_helper.rb +24 -17
  43. data/lib/miga/cli/opt_helper.rb +3 -2
  44. data/lib/miga/common.rb +2 -5
  45. data/lib/miga/common/base.rb +15 -16
  46. data/lib/miga/common/format.rb +8 -5
  47. data/lib/miga/common/hooks.rb +1 -4
  48. data/lib/miga/common/path.rb +4 -9
  49. data/lib/miga/common/with_daemon.rb +5 -2
  50. data/lib/miga/common/with_daemon_class.rb +1 -1
  51. data/lib/miga/common/with_result.rb +2 -1
  52. data/lib/miga/daemon.rb +51 -35
  53. data/lib/miga/daemon/base.rb +0 -2
  54. data/lib/miga/dataset.rb +47 -37
  55. data/lib/miga/dataset/base.rb +52 -37
  56. data/lib/miga/dataset/hooks.rb +3 -4
  57. data/lib/miga/dataset/result.rb +17 -1
  58. data/lib/miga/json.rb +5 -7
  59. data/lib/miga/lair.rb +4 -0
  60. data/lib/miga/metadata.rb +4 -3
  61. data/lib/miga/project.rb +29 -20
  62. data/lib/miga/project/base.rb +52 -37
  63. data/lib/miga/project/dataset.rb +27 -13
  64. data/lib/miga/project/hooks.rb +0 -3
  65. data/lib/miga/project/result.rb +14 -5
  66. data/lib/miga/remote_dataset.rb +85 -72
  67. data/lib/miga/remote_dataset/base.rb +11 -13
  68. data/lib/miga/remote_dataset/download.rb +33 -12
  69. data/lib/miga/result.rb +34 -25
  70. data/lib/miga/result/base.rb +0 -2
  71. data/lib/miga/result/dates.rb +1 -3
  72. data/lib/miga/result/source.rb +15 -16
  73. data/lib/miga/result/stats.rb +36 -25
  74. data/lib/miga/tax_dist.rb +6 -3
  75. data/lib/miga/tax_index.rb +17 -17
  76. data/lib/miga/taxonomy.rb +6 -1
  77. data/lib/miga/taxonomy/base.rb +19 -15
  78. data/lib/miga/version.rb +19 -16
  79. data/test/common_test.rb +3 -11
  80. data/test/daemon_helper.rb +38 -0
  81. data/test/daemon_test.rb +73 -101
  82. data/test/dataset_test.rb +58 -59
  83. data/test/format_test.rb +3 -11
  84. data/test/hook_test.rb +50 -55
  85. data/test/json_test.rb +7 -8
  86. data/test/lair_test.rb +22 -28
  87. data/test/metadata_test.rb +6 -14
  88. data/test/project_test.rb +33 -39
  89. data/test/remote_dataset_test.rb +20 -28
  90. data/test/result_stats_test.rb +17 -27
  91. data/test/result_test.rb +41 -34
  92. data/test/tax_dist_test.rb +0 -2
  93. data/test/tax_index_test.rb +4 -10
  94. data/test/taxonomy_test.rb +7 -9
  95. data/test/test_helper.rb +42 -1
  96. data/test/with_daemon_test.rb +14 -22
  97. data/utils/cleanup-databases.rb +6 -5
  98. data/utils/distance/base.rb +0 -1
  99. data/utils/distance/commands.rb +19 -12
  100. data/utils/distance/database.rb +24 -21
  101. data/utils/distance/pipeline.rb +12 -9
  102. data/utils/distance/runner.rb +14 -13
  103. data/utils/distance/temporal.rb +1 -3
  104. data/utils/distances.rb +1 -1
  105. data/utils/domain-ess-genes.rb +7 -7
  106. data/utils/index_metadata.rb +4 -2
  107. data/utils/mytaxa_scan.rb +18 -16
  108. data/utils/representatives.rb +5 -4
  109. data/utils/requirements.txt +1 -1
  110. data/utils/subclade/base.rb +0 -1
  111. data/utils/subclade/pipeline.rb +7 -6
  112. data/utils/subclade/runner.rb +9 -9
  113. data/utils/subclade/temporal.rb +0 -2
  114. data/utils/subclades-compile.rb +39 -37
  115. data/utils/subclades.rb +1 -1
  116. metadata +3 -2
@@ -1,4 +1,3 @@
1
-
2
1
  require 'miga/cli/action'
3
2
  require 'sqlite3'
4
3
 
@@ -8,13 +7,34 @@ end
8
7
  module MiGA::Cli::Action::Doctor::Base
9
8
  ##
10
9
  # Check the database in +db_file+ maintains integrity for the
11
- # tables saving +metric+ (:ani or :aai)
12
- def check_sqlite3_database(db_file, metric)
10
+ # tables saving +metric+ (:ani or :aai) and call +blk+ if the
11
+ # file is corrupt or doesn't contain the expected structure
12
+ def check_sqlite3_database(db_file, metric, &blk)
13
13
  SQLite3::Database.new(db_file) do |conn|
14
14
  conn.execute("select count(*) from #{metric}").first
15
15
  end
16
- rescue SQLite3::SQLException
17
- yield
16
+ rescue SQLite3::SQLException, SQLite3::CorruptException
17
+ blk.call
18
+ end
19
+
20
+ def each_database_file(dataset, &blk)
21
+ ref_db = { '01.haai' => :aai, '02.aai' => :aai, '03.ani' => :ani }
22
+ qry_db = { '.haai.db' => :aai, '.aai.db' => :aai, '.ani.db' => :ani }
23
+ base = File.join(dataset.project.path, 'data', '09.distances')
24
+ result = :distances
25
+ if dataset.ref?
26
+ file_db = "#{dataset.name}.db"
27
+ ref_db.each do |dir, metric|
28
+ file = File.join(base, dir, file_db)
29
+ blk[file, metric, result] if File.exist? file
30
+ end
31
+ base = File.join(base, '05.taxonomy')
32
+ result = :taxonomy
33
+ end
34
+ qry_db.each do |ext, metric|
35
+ file = File.join(base, "#{dataset.name}#{ext}")
36
+ blk[file, metric, result] if File.exist? file
37
+ end
18
38
  end
19
39
 
20
40
  ##
@@ -33,8 +53,10 @@ module MiGA::Cli::Action::Doctor::Base
33
53
  lineno = 0
34
54
  fh.each_line do |ln|
35
55
  next if (lineno += 1) == 1
56
+
36
57
  r = ln.split("\t")
37
58
  next unless [1, 2].map { |i| p.dataset(r[i]).nil? }.any?
59
+
38
60
  [1, 2].each do |i|
39
61
  if p.dataset(r[i]).nil? || !p.dataset(r[i]).active?
40
62
  notok[r[i]] = true
@@ -53,6 +75,7 @@ module MiGA::Cli::Action::Doctor::Base
53
75
  # This is a subtask of +check_dist+
54
76
  def check_dist_fix(cli, p, fix)
55
77
  return if fix.empty?
78
+
56
79
  cli.say("- Fixing #{fix.size} datasets")
57
80
  fix.each do |d_n|
58
81
  cli.say " > Fixing #{d_n}."
@@ -66,6 +89,7 @@ module MiGA::Cli::Action::Doctor::Base
66
89
  # This is a subtask of +check_dist+
67
90
  def check_dist_recompute(cli, res, notok)
68
91
  return if notok.empty?
92
+
69
93
  cli.say '- Unregistered datasets detected: '
70
94
  if notok.size <= 5
71
95
  notok.each { |i| cli.say " > #{i}" }
@@ -76,4 +100,3 @@ module MiGA::Cli::Action::Doctor::Base
76
100
  res.remove!
77
101
  end
78
102
  end
79
-
@@ -4,7 +4,6 @@
4
4
  require 'miga/cli/action'
5
5
 
6
6
  class MiGA::Cli::Action::Edit < MiGA::Cli::Action
7
-
8
7
  def parse_cli
9
8
  cli.parse do |opt|
10
9
  cli.opt_object(opt, [:project, :dataset_opt])
@@ -28,7 +27,7 @@ class MiGA::Cli::Action::Edit < MiGA::Cli::Action
28
27
  obj = cli.load_project_or_dataset
29
28
  unless cli[:activate].nil?
30
29
  cli.ensure_par({ dataset: '-D' },
31
- '%<name>s is mandatory with --[in-]activate: please provide %<flag>s')
30
+ '%<name>s is mandatory with --[in-]activate: please provide %<flag>s')
32
31
  cli[:activate] ? obj.activate! : obj.inactivate!
33
32
  end
34
33
  cli.add_metadata(obj)
@@ -4,27 +4,27 @@
4
4
  require 'miga/cli/action'
5
5
 
6
6
  class MiGA::Cli::Action::Files < MiGA::Cli::Action
7
-
8
7
  def parse_cli
9
- cli.defaults = {details: false, json: true}
8
+ cli.defaults = { details: false, json: true }
10
9
  cli.parse do |opt|
11
10
  cli.opt_object(opt, [:project, :dataset_opt])
12
11
  opt.on(
13
12
  '-i', '--info',
14
13
  'Print additional details for each file'
15
- ){ |v| cli[:details] = v }
16
- opt.on('--[no-]json',
14
+ ) { |v| cli[:details] = v }
15
+ opt.on(
16
+ '--[no-]json',
17
17
  'Include (or not) JSON files containing results metadata',
18
18
  'JSON files are included by default'
19
- ){ |v| cli[:json] = v }
19
+ ) { |v| cli[:json] = v }
20
20
  end
21
21
  end
22
22
 
23
23
  def perform
24
24
  cli.load_project_or_dataset.each_result do |sym, res|
25
- cli.puts "#{ "#{sym}\tjson\t" if cli[:details] }#{res.path}" if cli[:json]
26
- res.each_file do |k,f|
27
- cli.puts "#{ "#{sym}\t#{k}\t" if cli[:details] }#{res.dir}/#{f}"
25
+ cli.puts "#{"#{sym}\tjson\t" if cli[:details]}#{res.path}" if cli[:json]
26
+ res.each_file do |k, f|
27
+ cli.puts "#{"#{sym}\t#{k}\t" if cli[:details]}#{res.dir}/#{f}"
28
28
  end
29
29
  end
30
30
  end
@@ -4,29 +4,28 @@
4
4
  require 'miga/cli/action'
5
5
 
6
6
  class MiGA::Cli::Action::Find < MiGA::Cli::Action
7
-
8
7
  def parse_cli
9
- cli.defaults = {add: false, ref: true}
8
+ cli.defaults = { add: false, ref: true }
10
9
  cli.parse do |opt|
11
10
  cli.opt_object(opt, [:project, :dataset_type])
12
11
  opt.on(
13
12
  '-a', '--add',
14
13
  'Register the datasets found',
15
14
  'By default, only lists them (dry run)'
16
- ){ |v| cli[:add] = v }
15
+ ) { |v| cli[:add] = v }
17
16
  opt.on(
18
17
  '-q', '--query',
19
18
  'Register datasets as query'
20
- ){ |v| cli[:ref] = !v }
19
+ ) { |v| cli[:ref] = !v }
21
20
  opt.on(
22
21
  '-u', '--user STRING',
23
22
  'Owner of the dataset.'
24
- ){ |v| cli[:user] = v }
23
+ ) { |v| cli[:user] = v }
25
24
  opt.on(
26
25
  '-m', '--metadata STRING',
27
26
  'Metadata as key-value pairs separated by = and delimited by comma',
28
27
  'Values are saved as strings except for booleans (true / false) or nil'
29
- ){ |v| cli[:metadata] = v }
28
+ ) { |v| cli[:metadata] = v }
30
29
  end
31
30
  end
32
31
 
@@ -4,31 +4,31 @@
4
4
  require 'miga/cli/action'
5
5
 
6
6
  class MiGA::Cli::Action::Generic < MiGA::Cli::Action
7
-
8
7
  def parse_cli
9
8
  cli.opt_common = false
10
9
  cli.parse do |opt|
11
- descriptions = cli.class.TASK_DESC.keep_if { |k,v| k != :generic }
10
+ descriptions = cli.class.TASK_DESC.keep_if { |k, v| k != :generic }
12
11
  opt.separator MiGA::MiGA.tabulate(
13
- [:action, :description], descriptions).join("\n")
12
+ [:action, :description], descriptions
13
+ ).join("\n")
14
14
  opt.separator ''
15
15
  opt.separator 'generic options:'
16
16
  opt.on(
17
17
  '-h', '--help',
18
18
  'Display this screen'
19
- ){ puts opt ; exit }
19
+ ) { puts opt; exit }
20
20
  opt.on(
21
21
  '-v', '--version',
22
22
  'Show MiGA version'
23
- ){ puts MiGA::MiGA.VERSION ; exit }
23
+ ) { puts MiGA::MiGA.VERSION; exit }
24
24
  opt.on(
25
25
  '-V', '--long-version',
26
26
  'Show complete MiGA version'
27
- ){ |v| puts MiGA::MiGA.LONG_VERSION ; exit }
27
+ ) { |v| puts MiGA::MiGA.LONG_VERSION; exit }
28
28
  opt.on(
29
29
  '-C', '--citation',
30
30
  'How to cite MiGA'
31
- ) {|v| puts MiGA::MiGA.CITATION ; exit }
31
+ ) { |v| puts MiGA::MiGA.CITATION; exit }
32
32
  end
33
33
  end
34
34
 
@@ -5,24 +5,23 @@ require 'miga/cli/action'
5
5
  require 'miga/remote_dataset'
6
6
 
7
7
  class MiGA::Cli::Action::Get < MiGA::Cli::Action
8
-
9
8
  def parse_cli
10
- cli.defaults = {query: false, universe: :ncbi, db: :nuccore,
11
- get_md: false, only_md: false}
9
+ cli.defaults = { query: false, universe: :ncbi, db: :nuccore,
10
+ get_md: false, only_md: false }
12
11
  cli.parse do |opt|
13
12
  cli.opt_object(opt, [:project, :dataset, :dataset_type])
14
13
  opt.on(
15
14
  '-I', '--ids ID1,ID2,...', Array,
16
15
  '(Mandatory unless -F) IDs in the remote database separated by commas'
17
- ){ |v| cli[:ids] = v }
16
+ ) { |v| cli[:ids] = v }
18
17
  opt.on(
19
18
  '-U', '--universe STRING',
20
19
  "Universe of the remote database. By default: #{cli[:universe]}"
21
- ){ |v| cli[:universe] = v.to_sym }
20
+ ) { |v| cli[:universe] = v.to_sym }
22
21
  opt.on(
23
22
  '--db STRING',
24
23
  "Name of the remote database. By default: #{cli[:db]}"
25
- ){ |v| cli[:db] = v.to_sym }
24
+ ) { |v| cli[:db] = v.to_sym }
26
25
  opt.on(
27
26
  '-F', '--file PATH',
28
27
  'Tab-delimited file (with header) listing the datasets to download',
@@ -30,39 +29,40 @@ class MiGA::Cli::Action::Get < MiGA::Cli::Action
30
29
  'including: dataset, ids, universe, db, metadata',
31
30
  'For flags without value (like query) use true/false',
32
31
  'Unsupported values are: project, file, verbose, help, and debug'
33
- ){ |v| cli[:file] = v }
32
+ ) { |v| cli[:file] = v }
34
33
  opt.on(
35
34
  '-q', '--query',
36
35
  'Register the dataset as a query, not a reference dataset'
37
- ){ |v| cli[:query] = v }
38
- opt.on('--ignore-dup',
36
+ ) { |v| cli[:query] = v }
37
+ opt.on(
38
+ '--ignore-dup',
39
39
  'Ignore datasets that already exist'
40
- ){ |v| cli[:ignore_dup] = v }
40
+ ) { |v| cli[:ignore_dup] = v }
41
41
  opt.on(
42
42
  '-d', '--description STRING',
43
43
  'Description of the dataset'
44
- ){ |v| cli[:description] = v }
44
+ ) { |v| cli[:description] = v }
45
45
  opt.on(
46
46
  '-c', '--comments STRING',
47
47
  'Comments on the dataset'
48
- ){ |v| cli[:comments] = v }
48
+ ) { |v| cli[:comments] = v }
49
49
  opt.on(
50
50
  '-m', '--metadata STRING',
51
51
  'Metadata as key-value pairs separated by = and delimited by comma',
52
52
  'Values are saved as strings except for booleans (true / false) or nil'
53
- ){ |v| cli[:metadata] = v }
53
+ ) { |v| cli[:metadata] = v }
54
54
  opt.on(
55
55
  '--get-metadata',
56
56
  'Only download and update metadata for existing datasets'
57
- ){ |v| cli[:get_md] = v }
57
+ ) { |v| cli[:get_md] = v }
58
58
  opt.on(
59
59
  '--only-metadata',
60
60
  'Create datasets without input data but retrieve all metadata'
61
- ){ |v| cli[:only_md] = v }
61
+ ) { |v| cli[:only_md] = v }
62
62
  opt.on(
63
63
  '--api-key STRING',
64
64
  'API key for the given universe'
65
- ){ |v| cli[:api_key] = v }
65
+ ) { |v| cli[:api_key] = v }
66
66
  end
67
67
  end
68
68
 
@@ -72,6 +72,7 @@ class MiGA::Cli::Action::Get < MiGA::Cli::Action
72
72
  glob.each do |sub_cli|
73
73
  rd = create_remote_dataset(sub_cli)
74
74
  next if rd.nil?
75
+
75
76
  if sub_cli[:get_md]
76
77
  update_metadata(sub_cli, p, rd)
77
78
  else
@@ -84,13 +85,14 @@ class MiGA::Cli::Action::Get < MiGA::Cli::Action
84
85
 
85
86
  def get_sub_cli
86
87
  return [cli] if cli[:file].nil?
88
+
87
89
  glob = []
88
90
  File.open(cli[:file], 'r') do |fh|
89
91
  h = nil
90
92
  fh.each do |ln|
91
93
  r = ln.chomp.split(/\t/)
92
94
  if h.nil?
93
- h = r
95
+ h = r
94
96
  else
95
97
  argv_i = [self.name]
96
98
  h.each_with_index do |field, k|
@@ -132,6 +134,7 @@ class MiGA::Cli::Action::Get < MiGA::Cli::Action
132
134
  sub_cli.say 'Updating dataset'
133
135
  d = p.dataset(sub_cli[:dataset])
134
136
  return if d.nil?
137
+
135
138
  md = sub_cli.add_metadata(d).metadata.data
136
139
  rd.update_metadata(d, md)
137
140
  end
@@ -7,7 +7,6 @@ require 'digest/md5'
7
7
  require 'open-uri'
8
8
 
9
9
  class MiGA::Cli::Action::GetDb < MiGA::Cli::Action
10
-
11
10
  def parse_cli
12
11
  cli.defaults = {
13
12
  database: :recommended,
@@ -81,6 +80,7 @@ class MiGA::Cli::Action::GetDb < MiGA::Cli::Action
81
80
  cli.say "Connecting to '#{cli[:host]}'"
82
81
  uri = URI.parse(cli[:host])
83
82
  raise 'Only FTP hosts are supported' unless uri.scheme == 'ftp'
83
+
84
84
  ftp = Net::FTP.new(uri.host)
85
85
  ftp.passive = true
86
86
  ftp.login
@@ -113,11 +113,13 @@ class MiGA::Cli::Action::GetDb < MiGA::Cli::Action
113
113
  [:recommended, :test].each do |n|
114
114
  if cli[:database] == n
115
115
  raise "This host has no #{n} database" if manif[n].nil?
116
+
116
117
  cli[:database] = manif[n].to_sym
117
118
  end
118
119
  end
119
120
  db = manif[:databases][cli[:database]]
120
121
  raise 'Cannot find database in this host' if db.nil?
122
+
121
123
  db
122
124
  end
123
125
 
@@ -127,12 +129,14 @@ class MiGA::Cli::Action::GetDb < MiGA::Cli::Action
127
129
  end
128
130
  ver = db[:versions][cli[:version]]
129
131
  raise 'Cannot find database version' if ver.nil?
132
+
130
133
  cli.puts "# Database size: #{version_size(ver)}"
131
134
  ver
132
135
  end
133
136
 
134
137
  def list_databases(manif)
135
138
  return false unless cli[:list_databases]
139
+
136
140
  cli.puts "# Recommended database: #{manif[:recommended]}"
137
141
  cli.puts ''
138
142
  cli.table(
@@ -146,6 +150,7 @@ class MiGA::Cli::Action::GetDb < MiGA::Cli::Action
146
150
 
147
151
  def list_versions(db)
148
152
  return false unless cli[:list_versions]
153
+
149
154
  cli.puts "# Database: #{cli[:database]}"
150
155
  cli.puts ''
151
156
  cli.table(
@@ -159,6 +164,7 @@ class MiGA::Cli::Action::GetDb < MiGA::Cli::Action
159
164
 
160
165
  def check_target
161
166
  return false if cli[:overwrite]
167
+
162
168
  file = File.expand_path(cli[:database], cli[:local])
163
169
  if Dir.exist? file
164
170
  warn "The target directory already exists: #{file}"
@@ -201,7 +207,7 @@ class MiGA::Cli::Action::GetDb < MiGA::Cli::Action
201
207
  reg[:databases][cli[:database]] ||= {}
202
208
  reg[:databases][cli[:database]][:manif_last_update] = manif[:last_update]
203
209
  reg[:databases][cli[:database]][:manif_host] = manif[:host]
204
- db.each { |k,v| reg[:databases][cli[:database]][k] = v }
210
+ db.each { |k, v| reg[:databases][cli[:database]][k] = v }
205
211
  reg[:databases][cli[:database]][:local_version] = ver
206
212
  MiGA::Json.generate(reg, local_manif)
207
213
  end
@@ -17,7 +17,7 @@ class MiGA::Cli::Action::IndexWf < MiGA::Cli::Action
17
17
  ) { |v| cli[:mytaxa] = v }
18
18
  opts_for_wf_distances(opt)
19
19
  opts_for_wf(opt, 'Input genome assemblies (nucleotides, FastA)',
20
- cleanup: false, project_type: true)
20
+ cleanup: false, project_type: true)
21
21
  end
22
22
  end
23
23
 
@@ -7,44 +7,44 @@ require 'shellwords'
7
7
  class MiGA::Cli::Action::Init < MiGA::Cli::Action
8
8
  require 'miga/cli/action/init/daemon_helper'
9
9
  include MiGA::Cli::Action::Init::DaemonHelper
10
-
10
+
11
11
  def parse_cli
12
12
  cli.interactive = true
13
13
  cli.defaults = { mytaxa: nil,
14
- config: File.expand_path('.miga_modules', ENV['HOME']),
15
- ask: false, auto: false, dtype: :bash }
14
+ config: File.expand_path('.miga_modules', ENV['HOME']),
15
+ ask: false, auto: false, dtype: :bash }
16
16
  cli.parse do |opt|
17
17
  opt.on(
18
18
  '-c', '--config PATH',
19
19
  'Path to the Bash configuration file',
20
20
  "By default: #{cli[:config]}"
21
- ){ |v| cli[:config] = v }
21
+ ) { |v| cli[:config] = v }
22
22
  opt.on(
23
23
  '--[no-]mytaxa',
24
24
  'Should I try setting up MyTaxa its dependencies?',
25
25
  'By default: interactive (true if --auto)'
26
- ){ |v| cli[:mytaxa] = v }
26
+ ) { |v| cli[:mytaxa] = v }
27
27
  opt.on(
28
28
  '--daemon-type STRING',
29
29
  'Type of daemon launcher, one of: bash, ssh, qsub, msub, slurm',
30
30
  "By default: interactive (#{cli[:dtype]} if --auto)"
31
- ){ |v| cli[:dtype] = v.to_sym }
31
+ ) { |v| cli[:dtype] = v.to_sym }
32
32
  opt.on(
33
33
  '--ask-all',
34
34
  'Ask for the location of all software',
35
35
  'By default, only the locations missing in PATH are requested'
36
- ){ |v| cli[:ask] = v }
36
+ ) { |v| cli[:ask] = v }
37
37
  end
38
38
  end
39
39
 
40
40
  def perform
41
- cli.puts <<BANNER
42
- ===[ Welcome to MiGA, the Microbial Genome Atlas ]===
41
+ cli.puts <<~BANNER
42
+ ===[ Welcome to MiGA, the Microbial Genome Atlas ]===
43
43
 
44
- I'm the initialization script, and I'll sniff around your computer to
45
- make sure you have all the requirements for MiGA data processing.
44
+ I'm the initialization script, and I'll sniff around your computer to
45
+ make sure you have all the requirements for MiGA data processing.
46
46
 
47
- BANNER
47
+ BANNER
48
48
  list_requirements
49
49
  rc_fh = open_rc_file
50
50
  check_configuration_script rc_fh
@@ -67,7 +67,7 @@ BANNER
67
67
 
68
68
  def run_r_cmd(cli, paths, cmd)
69
69
  run_cmd(cli,
70
- "echo #{cmd.shellescape} | #{paths['R'].shellescape} --vanilla -q 2>&1")
70
+ "echo #{cmd.shellescape} | #{paths['R'].shellescape} --vanilla -q 2>&1")
71
71
  end
72
72
 
73
73
  def test_r_package(cli, paths, pkg)
@@ -82,7 +82,7 @@ BANNER
82
82
 
83
83
  def test_ruby_gem(cli, paths, pkg)
84
84
  run_cmd(cli,
85
- "#{paths['ruby'].shellescape} -r #{pkg.shellescape} -e '' 2>/dev/null")
85
+ "#{paths['ruby'].shellescape} -r #{pkg.shellescape} -e '' 2>/dev/null")
86
86
  $?.success?
87
87
  end
88
88
 
@@ -95,8 +95,9 @@ BANNER
95
95
 
96
96
  def list_requirements
97
97
  if cli.ask_user(
98
- 'Would you like to see all the requirements before starting?',
99
- 'no', %w(yes no)) == 'yes'
98
+ 'Would you like to see all the requirements before starting?',
99
+ 'no', %w(yes no)
100
+ ) == 'yes'
100
101
  cli.puts ''
101
102
  req_path = File.expand_path('utils/requirements.txt', MiGA.root_path)
102
103
  File.open(req_path, 'r') do |fh|
@@ -112,26 +113,28 @@ BANNER
112
113
  rc_path = File.expand_path('.miga_rc', ENV['HOME'])
113
114
  if File.exist? rc_path
114
115
  if cli.ask_user(
115
- 'I found a previous configuration. Do you want to continue?',
116
- 'yes', %w(yes no)) == 'no'
116
+ 'I found a previous configuration. Do you want to continue?',
117
+ 'yes', %w(yes no)
118
+ ) == 'no'
117
119
  cli.puts 'OK, see you soon!'
118
120
  exit(0)
119
121
  end
120
122
  end
121
123
  rc_fh = File.open(rc_path, 'w')
122
- rc_fh.puts <<BASH
123
- #!/bin/bash
124
- # `miga init` made this on #{Time.now}
124
+ rc_fh.puts <<~BASH
125
+ #!/bin/bash
126
+ # `miga init` made this on #{Time.now}
125
127
 
126
- BASH
128
+ BASH
127
129
  rc_fh
128
130
  end
129
131
 
130
132
  def check_configuration_script(rc_fh)
131
133
  unless File.exist? cli[:config]
132
134
  cli[:config] = cli.ask_user(
133
- 'Is there a script I need to load at startup?',
134
- cli[:config])
135
+ 'Is there a script I need to load at startup?',
136
+ cli[:config]
137
+ )
135
138
  end
136
139
  if File.exist? cli[:config]
137
140
  cli[:config] = File.expand_path(cli[:config])
@@ -154,8 +157,10 @@ BASH
154
157
  File.open(req_path, 'r') do |fh|
155
158
  fh.each_line do |ln|
156
159
  next if $. < 3
160
+
157
161
  r = ln.chomp.split(/\t+/)
158
162
  next if r[0] =~ /\(opt\)$/ && !cli[:mytaxa]
163
+
159
164
  cli.print "Testing #{r[0]}#{" (#{r[3]})" if r[3]}... "
160
165
  path = find_software(r[1])
161
166
  paths[r[1]] = File.expand_path(r[1], path).shellescape
@@ -256,13 +261,13 @@ BASH
256
261
  end
257
262
 
258
263
  def close_rc_file(rc_fh)
259
- rc_fh.puts <<FOOT
264
+ rc_fh.puts <<~FOOT
260
265
 
261
- MIGA_CONFIG_VERSION='#{MiGA::MiGA.VERSION}'
262
- MIGA_CONFIG_LONGVERSION='#{MiGA::MiGA.LONG_VERSION}'
263
- MIGA_CONFIG_DATE='#{Time.now}'
266
+ MIGA_CONFIG_VERSION='#{MiGA::MiGA.VERSION}'
267
+ MIGA_CONFIG_LONGVERSION='#{MiGA::MiGA.LONG_VERSION}'
268
+ MIGA_CONFIG_DATE='#{Time.now}'
264
269
 
265
- FOOT
270
+ FOOT
266
271
  rc_fh.close
267
272
  end
268
273
  end