geordi 2.10.1 → 3.0.3

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 (86) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/.ruby-version +1 -1
  4. data/.travis.yml +8 -2
  5. data/CHANGELOG.md +46 -0
  6. data/Gemfile +2 -5
  7. data/Gemfile.lock +10 -10
  8. data/README.md +11 -6
  9. data/Rakefile +6 -10
  10. data/{bin → exe}/b +0 -0
  11. data/{bin → exe}/cap-all +0 -0
  12. data/{bin → exe}/console-for +0 -0
  13. data/{bin → exe}/cuc +0 -0
  14. data/{bin → exe}/cuc-show +0 -0
  15. data/{bin → exe}/cuc-vnc-setup +0 -0
  16. data/{bin → exe}/deploy-to-production +0 -0
  17. data/{bin → exe}/dump-for +0 -0
  18. data/{bin → exe}/dumple +0 -0
  19. data/{bin → exe}/geordi +0 -0
  20. data/{bin → exe}/gitpt +0 -0
  21. data/{bin → exe}/launchy_browser +0 -0
  22. data/{bin → exe}/load-dump +0 -0
  23. data/{bin → exe}/migrate-all +0 -0
  24. data/{bin → exe}/rs +0 -0
  25. data/{bin → exe}/run_tests +0 -0
  26. data/{bin → exe}/shell-for +0 -0
  27. data/{bin → exe}/tests +0 -0
  28. data/geordi.gemspec +23 -20
  29. data/lib/geordi/COMMAND_TEMPLATE +4 -6
  30. data/lib/geordi/capistrano_config.rb +20 -17
  31. data/lib/geordi/chromedriver_updater.rb +9 -10
  32. data/lib/geordi/cli.rb +5 -2
  33. data/lib/geordi/commands/_setup_vnc.rb +23 -23
  34. data/lib/geordi/commands/apache_site.rb +3 -3
  35. data/lib/geordi/commands/bundle_install.rb +3 -3
  36. data/lib/geordi/commands/capistrano.rb +5 -6
  37. data/lib/geordi/commands/chromedriver_update.rb +0 -9
  38. data/lib/geordi/commands/clean.rb +5 -6
  39. data/lib/geordi/commands/commit.rb +0 -1
  40. data/lib/geordi/commands/console.rb +4 -4
  41. data/lib/geordi/commands/create_database_yml.rb +4 -4
  42. data/lib/geordi/commands/create_databases.rb +3 -3
  43. data/lib/geordi/commands/cucumber.rb +25 -25
  44. data/lib/geordi/commands/delete_dumps.rb +12 -12
  45. data/lib/geordi/commands/deploy.rb +27 -28
  46. data/lib/geordi/commands/drop_databases.rb +13 -15
  47. data/lib/geordi/commands/dump.rb +12 -13
  48. data/lib/geordi/commands/eurest.rb +2 -2
  49. data/lib/geordi/commands/firefox.rb +4 -4
  50. data/lib/geordi/commands/migrate.rb +3 -3
  51. data/lib/geordi/commands/png_optimize.rb +15 -14
  52. data/lib/geordi/commands/rake.rb +3 -3
  53. data/lib/geordi/commands/remove_executable_flags.rb +3 -3
  54. data/lib/geordi/commands/rspec.rb +11 -11
  55. data/lib/geordi/commands/security_update.rb +25 -25
  56. data/lib/geordi/commands/server.rb +6 -6
  57. data/lib/geordi/commands/setup.rb +8 -8
  58. data/lib/geordi/commands/shell.rb +3 -3
  59. data/lib/geordi/commands/tests.rb +1 -1
  60. data/lib/geordi/commands/unit.rb +3 -3
  61. data/lib/geordi/commands/update.rb +7 -7
  62. data/lib/geordi/commands/vnc.rb +1 -1
  63. data/lib/geordi/commands/with_rake.rb +3 -3
  64. data/lib/geordi/commands/yarn_install.rb +3 -3
  65. data/lib/geordi/cucumber.rb +35 -36
  66. data/lib/geordi/db_cleaner.rb +40 -41
  67. data/lib/geordi/dump_loader.rb +6 -5
  68. data/lib/geordi/firefox_for_selenium.rb +26 -29
  69. data/lib/geordi/gitpt.rb +14 -15
  70. data/lib/geordi/interaction.rb +2 -6
  71. data/lib/geordi/remote.rb +9 -10
  72. data/lib/geordi/util.rb +28 -25
  73. data/lib/geordi/version.rb +1 -1
  74. metadata +27 -39
  75. data/features/commit.feature +0 -17
  76. data/features/console.feature +0 -7
  77. data/features/cucumber.feature +0 -261
  78. data/features/deploy.feature +0 -66
  79. data/features/dump.feature +0 -34
  80. data/features/firefox.feature +0 -44
  81. data/features/server.feature +0 -31
  82. data/features/setup.feature +0 -11
  83. data/features/shell.feature +0 -78
  84. data/features/support/env.rb +0 -8
  85. data/features/support/step_definitions/aruba_backport_steps.rb +0 -5
  86. data/features/support/step_definitions/miscellaneous_steps.rb +0 -11
@@ -7,13 +7,13 @@ Lets you select the server to connect to when called with `--select-server`:
7
7
  geordi shell production -s
8
8
  LONGDESC
9
9
 
10
- option :select_server, :default => false, :type => :boolean, :aliases => '-s'
10
+ option :select_server, default: false, type: :boolean, aliases: '-s'
11
11
 
12
12
  # This method has a triple 'l' because :shell is a Thor reserved word. However,
13
13
  # it can still be called with `geordi shell` :)
14
- def shelll(target, *args)
14
+ def shelll(target, *_args)
15
15
  require 'geordi/remote'
16
16
 
17
- announce 'Opening a shell on ' + target
17
+ Interaction.announce 'Opening a shell on ' + target
18
18
  Geordi::Remote.new(target).shell(options)
19
19
  end
@@ -10,5 +10,5 @@ def tests
10
10
  invoke_cmd 'cucumber'
11
11
  end
12
12
 
13
- success 'Successfully ran tests.'
13
+ Interaction.success 'Successfully ran tests.'
14
14
  end
@@ -1,12 +1,12 @@
1
1
  desc 'unit', 'Run Test::Unit'
2
2
  def unit
3
- if File.exists?('test/test_helper.rb')
3
+ if File.exist?('test/test_helper.rb')
4
4
  invoke_cmd 'bundle_install'
5
5
  invoke_cmd 'yarn_install'
6
6
 
7
- announce 'Running Test::Unit'
7
+ Interaction.announce 'Running Test::Unit'
8
8
  Util.system! 'bundle exec rake test'
9
9
  else
10
- note 'Test::Unit not employed.'
10
+ Interaction.note 'Test::Unit not employed.'
11
11
  end
12
12
  end
@@ -16,18 +16,18 @@ After updating, runs all tests when called with the `--test` option:
16
16
  See `geordi help update` for details.
17
17
  LONGDESC
18
18
 
19
- option :dump, :type => :string, :aliases => '-d', :banner => 'TARGET',
20
- :desc => 'After updating, dump the TARGET db and source it into the development db'
21
- option :test, :type => :boolean, :aliases => '-t', :desc => 'After updating, run tests'
19
+ option :dump, type: :string, aliases: '-d', banner: 'TARGET',
20
+ desc: 'After updating, dump the TARGET db and source it into the development db'
21
+ option :test, type: :boolean, aliases: '-t', desc: 'After updating, run tests'
22
22
 
23
23
  def update
24
- announce 'Updating repository'
25
- Util.system! 'git pull', :show_cmd => true
24
+ Interaction.announce 'Updating repository'
25
+ Util.system! 'git pull', show_cmd: true
26
26
 
27
27
  invoke_cmd 'migrate'
28
28
 
29
- success 'Successfully updated the project.'
29
+ Interaction.success 'Successfully updated the project.'
30
30
 
31
- invoke_cmd 'dump', options.dump, :load => true if options.dump
31
+ invoke_cmd 'dump', options.dump, load: true if options.dump
32
32
  invoke_cmd 'tests' if options.test
33
33
  end
@@ -8,7 +8,7 @@ tests.
8
8
  When called with `--setup`, will guide through the setup of VNC.
9
9
  LONGDESC
10
10
 
11
- option :setup, :type => :boolean
11
+ option :setup, type: :boolean
12
12
 
13
13
  def vnc
14
14
  if options.setup
@@ -1,13 +1,13 @@
1
- desc 'with-rake', 'Run tests with `rake`', :hide => true
1
+ desc 'with-rake', 'Run tests with `rake`', hide: true
2
2
  def with_rake
3
3
  if Util.file_containing?('Rakefile', /^task.+default.+(spec|test|feature)/)
4
4
  invoke_cmd 'bundle_install'
5
5
  invoke_cmd 'yarn_install'
6
6
 
7
- announce 'Running tests with `rake`'
7
+ Interaction.announce 'Running tests with `rake`'
8
8
  Util.system! 'rake'
9
9
  else
10
- note '`rake` does not run tests.'
10
+ Interaction.note '`rake` does not run tests.'
11
11
  :did_not_perform
12
12
  end
13
13
  end
@@ -1,8 +1,8 @@
1
- desc 'yarn-install', 'Runs yarn install if required', :hide => true
1
+ desc 'yarn-install', 'Runs yarn install if required', hide: true
2
2
 
3
3
  def yarn_install
4
- if File.exists?('package.json') and !system('yarn check --integrity > /dev/null 2>&1')
5
- announce 'Yarn install'
4
+ if File.exist?('package.json') && !system('yarn check --integrity > /dev/null 2>&1')
5
+ Interaction.announce 'Yarn install'
6
6
  Util.system! 'yarn install'
7
7
  end
8
8
  end
@@ -3,17 +3,16 @@ require 'tempfile'
3
3
 
4
4
  # This require-style is to prevent Ruby from loading files of a different
5
5
  # version of Geordi.
6
- require File.expand_path('../interaction', __FILE__)
7
- require File.expand_path('../firefox_for_selenium', __FILE__)
6
+ require File.expand_path('interaction', __dir__)
7
+ require File.expand_path('firefox_for_selenium', __dir__)
8
8
 
9
9
  module Geordi
10
10
  class Cucumber
11
- include Geordi::Interaction
12
11
 
13
- VNC_DISPLAY = ':17'
14
- VNC_SERVER_COMMAND = "vncserver #{VNC_DISPLAY} -localhost -nolisten tcp -SecurityTypes None -geometry 1280x1024"
15
- VNC_VIEWER_COMMAND = "vncviewer #{VNC_DISPLAY}"
16
- VNC_ENV_VARIABLES = %w[DISPLAY BROWSER LAUNCHY_BROWSER]
12
+ VNC_DISPLAY = ':17'.freeze
13
+ VNC_SERVER_COMMAND = "vncserver #{VNC_DISPLAY} -localhost -nolisten tcp -SecurityTypes None -geometry 1280x1024".freeze
14
+ VNC_VIEWER_COMMAND = "vncviewer #{VNC_DISPLAY}".freeze
15
+ VNC_ENV_VARIABLES = %w[DISPLAY BROWSER LAUNCHY_BROWSER].freeze
17
16
 
18
17
  def run(files, cucumber_options, options = {})
19
18
  self.argv = files + cucumber_options.map { |option| option.split('=') }.flatten
@@ -23,27 +22,27 @@ module Geordi
23
22
  setup_vnc
24
23
 
25
24
  command = use_parallel_tests?(options) ? parallel_execution_command : serial_execution_command
26
- note_cmd(command) if options[:verbose]
25
+ Interaction.note_cmd(command) if options[:verbose]
27
26
 
28
27
  puts # Make newline
29
28
  system command # Util.system! would reset the Firefox PATH
30
29
  end
31
30
 
32
31
  def launch_vnc_viewer
33
- fork {
32
+ fork do
34
33
  error = capture_stderr do
35
34
  system(VNC_VIEWER_COMMAND)
36
35
  end
37
36
  unless $?.success?
38
37
  if $?.exitstatus == 127
39
- fail 'VNC viewer not found. Install it with `geordi vnc --setup`.'
38
+ Interaction.fail 'VNC viewer not found. Install it with `geordi vnc --setup`.'
40
39
  else
41
- note 'VNC viewer could not be opened:'
40
+ Interaction.note 'VNC viewer could not be opened:'
42
41
  puts error
43
42
  puts
44
43
  end
45
44
  end
46
- }
45
+ end
47
46
  end
48
47
 
49
48
  def restore_env
@@ -57,10 +56,10 @@ module Geordi
57
56
  VNC_ENV_VARIABLES.each do |variable|
58
57
  ENV["OUTER_#{variable}"] = ENV[variable] if ENV[variable]
59
58
  end
60
- ENV["BROWSER"] = ENV["LAUNCHY_BROWSER"] = File.expand_path('../../../bin/launchy_browser', __FILE__)
61
- ENV["DISPLAY"] = VNC_DISPLAY
59
+ ENV['BROWSER'] = ENV['LAUNCHY_BROWSER'] = File.expand_path('../../bin/launchy_browser', __dir__)
60
+ ENV['DISPLAY'] = VNC_DISPLAY
62
61
 
63
- note 'Run `geordi vnc` to view the Selenium test browsers'
62
+ Interaction.note 'Run `geordi vnc` to view the Selenium test browsers'
64
63
  end
65
64
  end
66
65
 
@@ -73,11 +72,11 @@ module Geordi
73
72
  unless argv.include?('--format') || argv.include?('-f')
74
73
  format_args = spinner_available? ? ['--format', 'CucumberSpinner::CuriousProgressBarFormatter'] : ['--format', 'progress']
75
74
  end
76
- [use_firefox_for_selenium, "b", "cucumber", format_args, escape_shell_args(argv)].flatten.compact.join(" ")
75
+ [use_firefox_for_selenium, 'b', 'cucumber', format_args, escape_shell_args(argv)].flatten.compact.join(' ')
77
76
  end
78
77
 
79
78
  def parallel_execution_command
80
- note 'Using parallel_tests'
79
+ Interaction.note 'Using parallel_tests'
81
80
  self.argv = argv - command_line_features
82
81
 
83
82
  type_arg = Util.gem_version('parallel_tests') > Gem::Version.new('0.7.0') ? 'cucumber' : 'features'
@@ -87,8 +86,8 @@ module Geordi
87
86
  [
88
87
  use_firefox_for_selenium,
89
88
  'b parallel_test -t ' + type_arg,
90
- %(-o '#{ command_line_options.join(' ') } --tags "#{not_tag('@solo')}"'),
91
- "-- #{ features.join(' ') }"
89
+ %(-o '#{command_line_options.join(' ')} --tags "#{not_tag('@solo')}"'),
90
+ "-- #{features.join(' ')}",
92
91
  ].compact.join(' ')
93
92
  end
94
93
 
@@ -109,21 +108,21 @@ module Geordi
109
108
 
110
109
  def escape_shell_args(*args)
111
110
  args.flatten.collect do |arg|
112
- arg.gsub(/([\\ "])/) { |match| "\\#{$1}" }
111
+ arg.gsub(/([\\ "])/) { |_match| "\\#{Regexp.last_match(1)}" }
113
112
  end
114
113
  end
115
114
 
116
115
  def show_features_to_run
117
116
  if command_line_options.include? '@solo'
118
- note 'All features tagged with @solo'
117
+ Interaction.note 'All features tagged with @solo'
119
118
  elsif command_line_options.include? 'rerun'
120
- note 'Rerunning failed scenarios'
119
+ Interaction.note 'Rerunning failed scenarios'
121
120
  elsif features_to_run.empty?
122
- note 'All features in features/'
121
+ Interaction.note 'All features in features/'
123
122
  else
124
123
  notification = 'Only: ' + features_to_run.join(', ')
125
124
  notification << ' (from rerun.txt)' if (features_to_run == rerun_txt_features) && (features_to_run != command_line_features)
126
- note notification
125
+ Interaction.note notification
127
126
  end
128
127
  end
129
128
 
@@ -137,8 +136,8 @@ module Geordi
137
136
 
138
137
  def rerun_txt_features
139
138
  @rerun_txt_features ||= begin
140
- if File.exists?("rerun.txt")
141
- IO.read("rerun.txt").to_s.strip.split(/\s+/)
139
+ if File.exist?('rerun.txt')
140
+ IO.read('rerun.txt').to_s.strip.split(/\s+/)
142
141
  else
143
142
  []
144
143
  end
@@ -150,7 +149,7 @@ module Geordi
150
149
  end
151
150
 
152
151
  def command_line_options
153
- @command_line_options ||= Array.new.tap do |args|
152
+ @command_line_options ||= [].tap do |args|
154
153
  # Sorry for this mess. Option parsing doesn't get much prettier.
155
154
  argv.each_cons(2) do |a, b|
156
155
  break if a == '--' # This is the common no-options-beyond marker
@@ -171,9 +170,9 @@ module Geordi
171
170
  end
172
171
 
173
172
  def consolidate_rerun_txt_files
174
- parallel_rerun_files = Dir.glob("parallel_rerun*.txt")
173
+ parallel_rerun_files = Dir.glob('parallel_rerun*.txt')
175
174
  unless parallel_rerun_files.empty?
176
- note 'Consolidating parallel_rerun.txt files ...'
175
+ Interaction.note 'Consolidating parallel_rerun.txt files ...'
177
176
 
178
177
  rerun_content = []
179
178
  parallel_rerun_files.each do |filename|
@@ -181,8 +180,8 @@ module Geordi
181
180
  File.unlink(filename)
182
181
  end
183
182
 
184
- File.open("rerun.txt", "w") do |f|
185
- f.puts(rerun_content.join(" "))
183
+ File.open('rerun.txt', 'w') do |f|
184
+ f.puts(rerun_content.join(' '))
186
185
  end
187
186
  end
188
187
  end
@@ -190,14 +189,14 @@ module Geordi
190
189
  def find_all_features_recursively(files_or_dirs)
191
190
  Array(files_or_dirs).map do |file_or_dir|
192
191
  if File.directory?(file_or_dir)
193
- file_or_dir = Dir.glob(File.join(file_or_dir, "**", "*.feature"))
192
+ file_or_dir = Dir.glob(File.join(file_or_dir, '**', '*.feature'))
194
193
  end
195
194
  file_or_dir
196
195
  end.flatten.uniq.compact
197
196
  end
198
197
 
199
198
  def spinner_available?
200
- @spinner_available ||= File.exists?('Gemfile') && File.open('Gemfile').read.scan(/cucumber_spinner/).any?
199
+ @spinner_available ||= File.exist?('Gemfile') && File.open('Gemfile').read.scan(/cucumber_spinner/).any?
201
200
  end
202
201
 
203
202
  def use_parallel_tests?(options)
@@ -209,7 +208,7 @@ module Geordi
209
208
 
210
209
  def try_and_start_vnc
211
210
  # check if vnc is already running
212
- #return true if vnc_server_running?
211
+ # return true if vnc_server_running?
213
212
  error = capture_stderr do
214
213
  system(VNC_SERVER_COMMAND)
215
214
  end
@@ -218,10 +217,10 @@ module Geordi
218
217
  98 # was already running after all
219
218
  true
220
219
  when 127 # not installed
221
- warn 'Could not launch VNC server. Install it with `geordi vnc --setup`.'
220
+ Interaction.warn 'Could not launch VNC server. Install it with `geordi vnc --setup`.'
222
221
  false
223
222
  else
224
- warn 'Starting VNC failed:'
223
+ Interaction.warn 'Starting VNC failed:'
225
224
  puts error
226
225
  puts
227
226
  false
@@ -4,17 +4,16 @@ require 'tempfile'
4
4
 
5
5
  module Geordi
6
6
  class DBCleaner
7
- include Geordi::Interaction
8
7
 
9
8
  def initialize(extra_flags)
10
9
  puts 'Please enter your sudo password if asked, for db operations as system users'
11
10
  puts "We're going to run `sudo -u postgres psql` for PostgreSQL"
12
11
  puts ' and `sudo mysql` for MariaDB (which uses PAM auth)'
13
12
  `sudo true`
14
- fail 'sudo access is required for database operations as database users' if $? != 0
13
+ Interaction.fail 'sudo access is required for database operations as database users' if $? != 0
15
14
  @derivative_dbname = /_(test\d*|development|cucumber)$/
16
15
  base_directory = ENV['XDG_CONFIG_HOME']
17
- base_directory = "#{Dir.home}" if base_directory.nil?
16
+ base_directory = Dir.home.to_s if base_directory.nil?
18
17
  @whitelist_directory = File.join(base_directory, '.config', 'geordi', 'whitelists')
19
18
  FileUtils.mkdir_p(@whitelist_directory) unless File.directory? @whitelist_directory
20
19
  @mysql_command = decide_mysql_command(extra_flags['mysql'])
@@ -23,11 +22,11 @@ module Geordi
23
22
 
24
23
  def edit_whitelist(dbtype)
25
24
  whitelist = whitelist_fname(dbtype)
26
- if File.exist? whitelist
27
- whitelisted_dbs = Geordi::Util.stripped_lines(File.read(whitelist))\
25
+ whitelisted_dbs = if File.exist? whitelist
26
+ Geordi::Util.stripped_lines(File.read(whitelist))\
28
27
  .delete_if { |l| l.start_with? '#' }
29
28
  else
30
- whitelisted_dbs = Array.new
29
+ []
31
30
  end
32
31
  all_dbs = list_all_dbs(dbtype)
33
32
  tmp = Tempfile.open("geordi_whitelist_#{dbtype}")
@@ -66,7 +65,7 @@ HEREDOC
66
65
  tmpfile_content.push(['keep', db_name]) unless db_name.empty?
67
66
  end
68
67
  if warn_manual_whitelist
69
- warn <<-ERROR_MSG.gsub(/^\s*/, '')
68
+ Interaction.warn <<-ERROR_MSG.gsub(/^\s*/, '')
70
69
  Your whitelist #{whitelist} seems to have been generated manually.
71
70
  In that case, make sure to use only one database name per line and omit the 'keep' prefix."
72
71
 
@@ -82,16 +81,16 @@ HEREDOC
82
81
  texteditor = Geordi::Util.decide_texteditor
83
82
  system("#{texteditor} #{tmp.path}")
84
83
  File.open(tmp.path, 'r') do |wl_edited|
85
- whitelisted_dbs = Array.new
84
+ whitelisted_dbs = []
86
85
  whitelist_storage = File.open(whitelist, 'w')
87
86
  lines = Geordi::Util.stripped_lines(wl_edited.read)
88
87
  lines.each do |line|
89
88
  next if line.start_with?('#')
90
89
  unless line.split.length == 2
91
- fail "Invalid edit to whitelist file: \`#{line}\` - Syntax is: ^[keep|drop] dbname$"
90
+ Interaction.fail "Invalid edit to whitelist file: \`#{line}\` - Syntax is: ^[keep|drop] dbname$"
92
91
  end
93
92
  unless %w[keep drop k d].include? line.split.first
94
- fail "Invalid edit to whitelist file: \`#{line}\` - must start with either drop or keep."
93
+ Interaction.fail "Invalid edit to whitelist file: \`#{line}\` - must start with either drop or keep."
95
94
  end
96
95
  db_status, db_name = line.split
97
96
  if db_status == 'keep'
@@ -107,32 +106,32 @@ HEREDOC
107
106
  cmd = 'sudo mysql'
108
107
  unless extra_flags.nil?
109
108
  if extra_flags.include? 'port'
110
- port = Integer(extra_flags.split('=')[1].split()[0])
111
- fail "Port #{port} is not open" unless Geordi::Util.is_port_open? port
109
+ port = Integer(extra_flags.split('=')[1].split[0])
110
+ Interaction.fail "Port #{port} is not open" unless Geordi::Util.is_port_open? port
112
111
  end
113
112
  cmd << " #{extra_flags}"
114
113
  end
115
- Open3.popen3("#{cmd} -e 'QUIT'") do |stdin, stdout, stderr, thread|
114
+ Open3.popen3("#{cmd} -e 'QUIT'") do |_stdin, _stdout, stderr, thread|
116
115
  break if thread.value.exitstatus == 0
117
116
  # sudo mysql was not successful, switching to mysql-internal user management
118
117
  mysql_error = stderr.read.lines[0].chomp.strip.split[1]
119
- if %w[1045 1698].include? mysql_error # authentication failed
118
+ if %w[1045 1698].include? mysql_error # authentication failed
120
119
  cmd = 'mysql -uroot'
121
120
  cmd << " #{extra_flags}" unless extra_flags.nil?
122
121
  unless File.exist? File.join(Dir.home, '.my.cnf')
123
122
  puts "Please enter your MySQL/MariaDB password for account 'root'."
124
- warn "You should create a ~/.my.cnf file instead, or you'll need to enter your MySQL root password for each db."
125
- warn "See https://makandracards.com/makandra/50813-store-mysql-passwords-for-development for more information."
126
- cmd << ' -p' # need to ask for password now
123
+ Interaction.warn "You should create a ~/.my.cnf file instead, or you'll need to enter your MySQL root password for each db."
124
+ Interaction.warn 'See https://makandracards.com/makandra/50813-store-mysql-passwords-for-development for more information.'
125
+ cmd << ' -p' # need to ask for password now
127
126
  end
128
- Open3.popen3("#{cmd} -e 'QUIT'") do |stdin2, stdout2, stderr2, thread2|
129
- fail 'Could not connect to MySQL/MariaDB' unless thread2.value.exitstatus == 0
127
+ Open3.popen3("#{cmd} -e 'QUIT'") do |_stdin_2, _stdout_2, _stderr_2, thread_2|
128
+ Interaction.fail 'Could not connect to MySQL/MariaDB' unless thread_2.value.exitstatus == 0
130
129
  end
131
- elsif mysql_error == '2013' # connection to port or socket failed
132
- fail 'MySQL/MariaDB connection failed, is this the correct port?'
130
+ elsif mysql_error == '2013' # connection to port or socket failed
131
+ Interaction.fail 'MySQL/MariaDB connection failed, is this the correct port?'
133
132
  end
134
133
  end
135
- return cmd
134
+ cmd
136
135
  end
137
136
  private :decide_mysql_command
138
137
 
@@ -141,22 +140,22 @@ HEREDOC
141
140
  unless extra_flags.nil?
142
141
  begin
143
142
  port = Integer(extra_flags.split('=')[1])
144
- fail "Port #{port} is not open" unless Geordi::Util.is_port_open? port
143
+ Interaction.fail "Port #{port} is not open" unless Geordi::Util.is_port_open? port
145
144
  rescue ArgumentError
146
145
  socket = extra_flags.split('=')[1]
147
- fail "Socket #{socket} does not exist" unless File.exist? socket
146
+ Interaction.fail "Socket #{socket} does not exist" unless File.exist? socket
148
147
  end
149
148
  cmd << " #{extra_flags}"
150
149
  end
151
- return cmd
150
+ cmd
152
151
  end
153
152
  private :decide_postgres_command
154
153
 
155
154
  def list_all_dbs(dbtype)
156
155
  if dbtype == 'postgres'
157
- return list_all_postgres_dbs
156
+ list_all_postgres_dbs
158
157
  else
159
- return list_all_mysql_dbs
158
+ list_all_mysql_dbs
160
159
  end
161
160
  end
162
161
 
@@ -172,7 +171,7 @@ HEREDOC
172
171
  end
173
172
 
174
173
  def clean_mysql
175
- announce 'Checking for MySQL databases'
174
+ Interaction.announce 'Checking for MySQL databases'
176
175
  database_list = list_all_dbs('mysql')
177
176
  # confirm_deletion includes option for whitelist editing
178
177
  deletable_dbs = confirm_deletion('mysql', database_list)
@@ -181,19 +180,19 @@ HEREDOC
181
180
  if @mysql_command.include? '-p'
182
181
  puts "Please enter your MySQL/MariaDB account 'root' for: DROP DATABASE #{db}"
183
182
  else
184
- note "Dropping MySQL/MariaDB database #{db}"
183
+ Interaction.note "Dropping MySQL/MariaDB database #{db}"
185
184
  end
186
185
  `#{@mysql_command} -e 'DROP DATABASE \`#{db}\`;'`
187
186
  end
188
187
  end
189
188
 
190
189
  def clean_postgres
191
- announce 'Checking for Postgres databases'
190
+ Interaction.announce 'Checking for Postgres databases'
192
191
  database_list = list_all_dbs('postgres')
193
192
  deletable_dbs = confirm_deletion('postgres', database_list)
194
193
  return if deletable_dbs.nil?
195
194
  deletable_dbs.each do |db|
196
- note "Dropping PostgreSQL database `#{db}`."
195
+ Interaction.note "Dropping PostgreSQL database `#{db}`."
197
196
  `#{@postgres_command} -c 'DROP DATABASE "#{db}";'`
198
197
  end
199
198
  end
@@ -207,27 +206,27 @@ HEREDOC
207
206
  until %w[y n].include? proceed
208
207
  deletable_dbs = filter_whitelisted(dbtype, database_list)
209
208
  if deletable_dbs.empty?
210
- note "No #{dbtype} databases found that were not whitelisted"
211
- if prompt('Edit the whitelist? [y]es or [n]o') == 'y'
209
+ Interaction.note "No #{dbtype} databases found that were not whitelisted"
210
+ if Interaction.prompt('Edit the whitelist? [y]es or [n]o') == 'y'
212
211
  proceed = 'e'
213
212
  else
214
213
  return []
215
214
  end
216
215
  end
217
216
  if proceed.empty?
218
- note "The following #{dbtype} databases are not whitelisted and could be deleted:"
217
+ Interaction.note "The following #{dbtype} databases are not whitelisted and could be deleted:"
219
218
  deletable_dbs.sort.each do |db|
220
219
  puts db
221
220
  end
222
- note "Those #{dbtype} databases are not whitelisted and could be deleted."
223
- proceed = prompt('Proceed? [y]es, [n]o or [e]dit whitelist')
221
+ Interaction.note "Those #{dbtype} databases are not whitelisted and could be deleted."
222
+ proceed = Interaction.prompt('Proceed? [y]es, [n]o or [e]dit whitelist')
224
223
  end
225
224
  case proceed
226
225
  when 'e'
227
- proceed = '' # reset user selection
226
+ proceed = '' # reset user selection
228
227
  edit_whitelist dbtype
229
228
  when 'n'
230
- success 'Not deleting anything'
229
+ Interaction.success 'Not deleting anything'
231
230
  return []
232
231
  when 'y'
233
232
  return deletable_dbs
@@ -245,10 +244,10 @@ HEREDOC
245
244
  end
246
245
 
247
246
  def is_whitelisted?(dbtype, database_name)
248
- if File.exist? whitelist_fname(dbtype)
249
- whitelist_content = Geordi::Util.stripped_lines(File.open(whitelist_fname(dbtype), 'r').read)
247
+ whitelist_content = if File.exist? whitelist_fname(dbtype)
248
+ Geordi::Util.stripped_lines(File.open(whitelist_fname(dbtype), 'r').read)
250
249
  else
251
- whitelist_content = Array.new
250
+ []
252
251
  end
253
252
  # Allow explicit whitelisting of derivative databases like projectname_test2
254
253
  if whitelist_content.include? database_name