geordi 2.11.0 → 3.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (85) hide show
  1. checksums.yaml +4 -4
  2. data/.ruby-version +1 -1
  3. data/.travis.yml +8 -2
  4. data/CHANGELOG.md +40 -0
  5. data/Gemfile +2 -5
  6. data/Gemfile.lock +50 -3
  7. data/README.md +34 -7
  8. data/Rakefile +6 -10
  9. data/{bin → exe}/b +0 -0
  10. data/{bin → exe}/cap-all +0 -0
  11. data/{bin → exe}/console-for +0 -0
  12. data/{bin → exe}/cuc +0 -0
  13. data/{bin → exe}/cuc-show +0 -0
  14. data/{bin → exe}/cuc-vnc-setup +0 -0
  15. data/{bin → exe}/deploy-to-production +0 -0
  16. data/{bin → exe}/dump-for +0 -0
  17. data/{bin → exe}/dumple +0 -0
  18. data/{bin → exe}/geordi +0 -0
  19. data/{bin → exe}/gitpt +0 -0
  20. data/{bin → exe}/launchy_browser +0 -0
  21. data/{bin → exe}/load-dump +0 -0
  22. data/{bin → exe}/migrate-all +0 -0
  23. data/{bin → exe}/rs +0 -0
  24. data/{bin → exe}/run_tests +0 -0
  25. data/{bin → exe}/shell-for +0 -0
  26. data/{bin → exe}/tests +0 -0
  27. data/geordi.gemspec +23 -20
  28. data/lib/geordi/COMMAND_TEMPLATE +4 -6
  29. data/lib/geordi/capistrano_config.rb +7 -7
  30. data/lib/geordi/chromedriver_updater.rb +9 -10
  31. data/lib/geordi/cli.rb +1 -7
  32. data/lib/geordi/commands/_setup_vnc.rb +23 -23
  33. data/lib/geordi/commands/apache_site.rb +3 -3
  34. data/lib/geordi/commands/bundle_install.rb +3 -3
  35. data/lib/geordi/commands/capistrano.rb +5 -6
  36. data/lib/geordi/commands/chromedriver_update.rb +0 -9
  37. data/lib/geordi/commands/clean.rb +5 -6
  38. data/lib/geordi/commands/commit.rb +0 -1
  39. data/lib/geordi/commands/console.rb +4 -4
  40. data/lib/geordi/commands/create_database_yml.rb +4 -4
  41. data/lib/geordi/commands/create_databases.rb +3 -3
  42. data/lib/geordi/commands/cucumber.rb +25 -25
  43. data/lib/geordi/commands/delete_dumps.rb +12 -12
  44. data/lib/geordi/commands/deploy.rb +27 -28
  45. data/lib/geordi/commands/drop_databases.rb +13 -15
  46. data/lib/geordi/commands/dump.rb +12 -13
  47. data/lib/geordi/commands/eurest.rb +2 -2
  48. data/lib/geordi/commands/firefox.rb +4 -4
  49. data/lib/geordi/commands/migrate.rb +3 -3
  50. data/lib/geordi/commands/png_optimize.rb +15 -14
  51. data/lib/geordi/commands/rake.rb +3 -3
  52. data/lib/geordi/commands/remove_executable_flags.rb +3 -3
  53. data/lib/geordi/commands/rspec.rb +11 -11
  54. data/lib/geordi/commands/security_update.rb +84 -27
  55. data/lib/geordi/commands/server.rb +6 -6
  56. data/lib/geordi/commands/setup.rb +8 -8
  57. data/lib/geordi/commands/shell.rb +3 -3
  58. data/lib/geordi/commands/tests.rb +1 -1
  59. data/lib/geordi/commands/unit.rb +3 -3
  60. data/lib/geordi/commands/update.rb +7 -7
  61. data/lib/geordi/commands/vnc.rb +1 -1
  62. data/lib/geordi/commands/with_rake.rb +3 -3
  63. data/lib/geordi/commands/yarn_install.rb +3 -3
  64. data/lib/geordi/cucumber.rb +35 -36
  65. data/lib/geordi/db_cleaner.rb +40 -41
  66. data/lib/geordi/dump_loader.rb +6 -5
  67. data/lib/geordi/firefox_for_selenium.rb +26 -29
  68. data/lib/geordi/gitpt.rb +14 -15
  69. data/lib/geordi/interaction.rb +2 -6
  70. data/lib/geordi/remote.rb +9 -10
  71. data/lib/geordi/util.rb +26 -27
  72. data/lib/geordi/version.rb +1 -1
  73. metadata +25 -37
  74. data/features/commit.feature +0 -17
  75. data/features/console.feature +0 -7
  76. data/features/cucumber.feature +0 -261
  77. data/features/deploy.feature +0 -66
  78. data/features/dump.feature +0 -34
  79. data/features/firefox.feature +0 -44
  80. data/features/server.feature +0 -31
  81. data/features/setup.feature +0 -11
  82. data/features/shell.feature +0 -78
  83. data/features/support/env.rb +0 -8
  84. data/features/support/step_definitions/aruba_backport_steps.rb +0 -5
  85. data/features/support/step_definitions/miscellaneous_steps.rb +0 -11
@@ -2,53 +2,110 @@ desc 'security-update [STEP]', 'Support for performing security updates'
2
2
  long_desc <<-LONGDESC
3
3
  Preparation for security update: `geordi security-update`
4
4
 
5
+ Checks out production and pulls.
6
+
5
7
  After performing the update: `geordi security-update finish`
6
8
 
7
9
  Switches branches, pulls, pushes and deploys as required by our workflow. Tells
8
- what it will do before it does it.
10
+ what it will do before it does it. In detail:
11
+
12
+ 1. Asks user, if tests are green
13
+
14
+ 2. Pushes production
15
+
16
+ 3. Checks out master and pulls
17
+
18
+ 4. Merges production and pushes in master
19
+
20
+ 5. Deploys staging first, if there is a staging environment
21
+
22
+ 6. Asks user, if deployment log is okay and application is still running on staging
23
+
24
+ 7. Deploys other stages
25
+
26
+ 8. Asks user, if deployment log is okay and application is still running on all other stages
27
+
28
+ 9. Informs user about the next steps
9
29
  LONGDESC
10
30
 
11
- def security_update(step='prepare')
31
+ def security_update(step = 'prepare')
12
32
  case step
13
33
  when 'prepare'
14
- announce 'Preparing for security update'
15
- warn 'Please read https://makandracards.com/makandra/1587 before applying security updates!'
16
- note 'About to checkout production and pull'
17
- prompt('Continue?', 'y', /y|yes/) or fail 'Cancelled.'
34
+ Interaction.announce 'Preparing for security update'
35
+ Interaction.warn 'Please read https://makandracards.com/makandra/1587 before applying security updates!'
36
+ Interaction.note 'About to checkout production and pull.'
37
+ Interaction.prompt('Continue?', 'y', /y|yes/) || Interaction.fail('Cancelled.')
18
38
 
19
- Util.system! 'git checkout production', :show_cmd => true
20
- Util.system! 'git pull', :show_cmd => true
39
+ Util.system! 'git checkout production', show_cmd: true
40
+ Util.system! 'git pull', show_cmd: true
21
41
 
22
- success 'Successfully prepared for security update'
42
+ Interaction.success 'Successfully prepared for security update'
23
43
  puts
24
- note 'Please apply the security update now and commit your changes.'
25
- note 'When you are done, run `geordi security-update finish`.'
44
+ Interaction.note 'Please apply the security update now and commit your changes.'
45
+ Interaction.note 'When you are done, run `geordi security-update finish`.'
26
46
 
27
47
 
28
48
  when 'f', 'finish'
29
49
  # ensure everything is committed
30
- `git status --porcelain`.empty? or fail('Please commit your changes before finishing the update.')
50
+ if Util.testing?
51
+ puts 'Util.system! git status --porcelain'
52
+ else
53
+ `git status --porcelain`.empty? || Interaction.fail('Please commit your changes before finishing the update.')
54
+ end
31
55
 
32
- announce 'Finishing security update'
33
- note 'Working directory clean.'
34
- prompt('Have you successfully run all tests?', 'n', /y|yes/) or fail 'Please run tests first.'
56
+ Interaction.announce 'Finishing security update'
57
+ Interaction.note 'Working directory clean.'
58
+ Interaction.prompt('Have you successfully run all tests?', 'n', /y|yes/) || Interaction.fail('Please run tests first.')
35
59
 
36
- note 'About to: push production, checkout & pull master, merge production, push master'
37
- prompt('Continue?', 'n', /y|yes/) or fail 'Cancelled.'
60
+ Interaction.note 'About to: push production, checkout & pull master, merge production, push master.'
61
+ Interaction.prompt('Continue?', 'n', /y|yes/) || Interaction.fail('Cancelled.')
38
62
 
39
- Util.system! 'git push', :show_cmd => true
40
- Util.system! 'git checkout master', :show_cmd => true
41
- Util.system! 'git pull', :show_cmd => true
42
- Util.system! 'git merge production', :show_cmd => true
43
- Util.system! 'git push', :show_cmd => true
63
+ Util.system! 'git push', show_cmd: true
64
+ Util.system! 'git checkout master', show_cmd: true
65
+ Util.system! 'git pull', show_cmd: true
66
+ Util.system! 'git merge production', show_cmd: true
67
+ Util.system! 'git push', show_cmd: true
44
68
 
45
- announce 'Deploying all targets'
69
+ Interaction.announce 'Deployment'
46
70
  deploy = (Util.gem_major_version('capistrano') == 3) ? 'deploy' : 'deploy:migrations'
47
- invoke_cmd 'capistrano', deploy
48
71
 
49
- success 'Successfully pushed and deployed security update'
72
+ all_deploy_targets = Util.deploy_targets
73
+ Interaction.fail 'There are no deploy targets!' if all_deploy_targets.empty?
74
+
75
+ if all_deploy_targets.include?('staging')
76
+ Interaction.note 'There is a staging environment.'
77
+ Interaction.prompt('Deploy staging now?', 'y', /y|yes/) || Interaction.fail('Cancelled.')
78
+
79
+ Interaction.announce 'Deploy staging'
80
+ Util.system! "bundle exec cap staging #{deploy}", show_cmd: true
81
+
82
+ Interaction.prompt('Is the deployment log okay and the application is still running on staging?', 'y', /y|yes/) || Interaction.fail('Please fix the deployment issues on staging before you continue.')
83
+ else
84
+ Interaction.note 'There is no staging environment.'
85
+ end
86
+
87
+ deploy_targets_without_staging = all_deploy_targets.select { |target| target != 'staging' }
88
+
89
+ if deploy_targets_without_staging.empty?
90
+ Interaction.note 'There are no other stages.'
91
+ else
92
+ puts
93
+ Interaction.note 'Found the following other stages:'
94
+ puts deploy_targets_without_staging
95
+ puts
96
+ Interaction.prompt('Deploy other stages now?', 'y', /y|yes/) || Interaction.fail('Cancelled.')
97
+
98
+ deploy_targets_without_staging.each do |target|
99
+ Interaction.announce "Deploy #{target}"
100
+ Util.system! "bundle exec cap #{target} #{deploy}", show_cmd: true
101
+ end
102
+
103
+ Interaction.prompt('Is the application still running on all other stages and the logs are okay?', 'y', /y|yes/) || Interaction.fail('Please fix the application immediately!')
104
+ end
105
+
106
+ Interaction.success 'Successfully pushed and deployed security update'
50
107
  puts
51
- note 'Now send an email to customer and project lead, informing them about the update.'
52
- note 'Do not forget to make a joblog on a security budget, if available.'
108
+ Interaction.note 'Now send an email to customer and project lead, informing them about the update.'
109
+ Interaction.note 'Do not forget to make a joblog on a security budget, if available.'
53
110
  end
54
111
  end
@@ -1,18 +1,18 @@
1
1
  desc 'server [PORT]', 'Start a development server'
2
2
 
3
- option :port, :aliases => '-p', :default => '3000',
4
- :desc => 'Choose a port'
5
- option :public, :aliases => '-P', :type => :boolean,
6
- :desc => 'Make the server accessible in the local network'
3
+ option :port, aliases: '-p', default: '3000',
4
+ desc: 'Choose a port'
5
+ option :public, aliases: '-P', type: :boolean,
6
+ desc: 'Make the server accessible in the local network'
7
7
 
8
8
  def server(port = nil)
9
9
  invoke_cmd 'bundle_install'
10
10
  invoke_cmd 'yarn_install'
11
11
  require 'geordi/util'
12
12
 
13
- announce 'Booting a development server'
13
+ Interaction.announce 'Booting a development server'
14
14
  port ||= options.port
15
- note "URL: http://#{ File.basename(Dir.pwd) }.vcap.me:#{port}"
15
+ Interaction.note "URL: http://#{File.basename(Dir.pwd)}.vcap.me:#{port}"
16
16
  puts
17
17
 
18
18
  command = Util.server_command
@@ -19,14 +19,14 @@ After setting up, runs all tests when called with the `--test` option:
19
19
  geordi setup -t
20
20
  LONGDESC
21
21
 
22
- option :dump, :type => :string, :aliases => '-d', :banner => 'TARGET',
23
- :desc => 'After setup, dump the TARGET db and source it into the development db'
24
- option :test, :type => :boolean, :aliases => '-t', :desc => 'After setup, run tests'
22
+ option :dump, type: :string, aliases: '-d', banner: 'TARGET',
23
+ desc: 'After setup, dump the TARGET db and source it into the development db'
24
+ option :test, type: :boolean, aliases: '-t', desc: 'After setup, run tests'
25
25
 
26
26
  def setup
27
- if File.exists? 'bin/setup'
28
- announce 'Running bin/setup'
29
- note "Geordi's own setup routine is skipped"
27
+ if File.exist? 'bin/setup'
28
+ Interaction.announce 'Running bin/setup'
29
+ Interaction.note "Geordi's own setup routine is skipped"
30
30
 
31
31
  Util.system! 'bin/setup'
32
32
  else
@@ -34,8 +34,8 @@ def setup
34
34
  invoke_cmd 'migrate'
35
35
  end
36
36
 
37
- success 'Successfully set up the project.'
37
+ Interaction.success 'Successfully set up the project.'
38
38
 
39
- invoke_cmd 'dump', options.dump, :load => true if options.dump
39
+ invoke_cmd 'dump', options.dump, load: true if options.dump
40
40
  invoke_cmd 'tests' if options.test
41
41
  end
@@ -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