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
@@ -5,10 +5,13 @@ require 'geordi/util'
5
5
 
6
6
  module Geordi
7
7
  class CLI < Thor
8
- include Geordi::Interaction
8
+
9
+ def self.exit_on_failure?
10
+ true
11
+ end
9
12
 
10
13
  # load all tasks defined in lib/geordi/commands
11
- Dir[File.expand_path '../commands/*.rb', __FILE__].each do |file|
14
+ Dir[File.expand_path 'commands/*.rb', __dir__].each do |file|
12
15
  class_eval File.read(file), file
13
16
  end
14
17
 
@@ -1,34 +1,34 @@
1
- desc '-setup-vnc', 'Setup VNC for running Selenium tests there', :hide => true
1
+ desc '-setup-vnc', 'Setup VNC for running Selenium tests there', hide: true
2
2
  def _setup_vnc
3
3
  `clear`
4
4
 
5
- note 'This script will help you install a VNC server and a VNC viewer.'
5
+ Interaction.note 'This script will help you install a VNC server and a VNC viewer.'
6
6
  puts
7
- puts strip_heredoc <<-TEXT
7
+ puts Util.strip_heredoc <<-TEXT
8
8
  With those you will be able to use our cucumber script without being
9
9
  disturbed by focus-stealing Selenium windows. Instead, they will open
10
10
  inside a VNC session.
11
11
 
12
12
  You can still inspect everything with:
13
13
  TEXT
14
- note_cmd 'geordi vnc'
14
+ Interaction.note_cmd 'geordi vnc'
15
15
  puts
16
- note 'Please open a second shell to execute instructions.'
17
- prompt 'Continue ...'
16
+ Interaction.note 'Please open a second shell to execute instructions.'
17
+ Interaction.prompt 'Continue ...'
18
18
 
19
- announce 'Setup VNC server'
19
+ Interaction.announce 'Setup VNC server'
20
20
 
21
21
  vnc_server_installed = system('which vncserver > /dev/null 2>&1')
22
22
  if vnc_server_installed
23
- success 'It appears you already have a VNC server installed. Good job!'
23
+ Interaction.success 'It appears you already have a VNC server installed. Good job!'
24
24
  else
25
25
  puts 'Please run:'
26
- note_cmd 'sudo apt-get install vnc4server'
27
- prompt 'Continue ...'
26
+ Interaction.note_cmd 'sudo apt-get install vnc4server'
27
+ Interaction.prompt 'Continue ...'
28
28
 
29
29
  puts
30
- note 'We will now set a password for your VNC server.'
31
- puts strip_heredoc <<-TEXT
30
+ Interaction.note 'We will now set a password for your VNC server.'
31
+ puts Util.strip_heredoc <<-TEXT
32
32
  When running our cucumber script, you will not actually need this
33
33
  password, and there is no security risk. However, if you start a vncserver
34
34
  without our cucumber script, a user with your password can connect to
@@ -36,31 +36,31 @@ def _setup_vnc
36
36
 
37
37
  TEXT
38
38
  puts 'Please run:'
39
- note_cmd 'vncserver :20'
40
- warn 'Enter a secure password!'
41
- prompt 'Continue ...'
39
+ Interaction.note_cmd 'vncserver :20'
40
+ Interaction.warn 'Enter a secure password!'
41
+ Interaction.prompt 'Continue ...'
42
42
 
43
43
  puts 'Now stop the server again. Please run:'
44
- note_cmd 'vncserver -kill :20'
45
- prompt 'Continue ...'
44
+ Interaction.note_cmd 'vncserver -kill :20'
45
+ Interaction.prompt 'Continue ...'
46
46
  end
47
47
 
48
- announce 'Setup VNC viewer'
48
+ Interaction.announce 'Setup VNC viewer'
49
49
 
50
50
  vnc_viewer_installed = system('which vncviewer > /dev/null 2>&1')
51
51
  if vnc_viewer_installed
52
- success 'It appears you already have a VNC viewer installed. Good job!'
52
+ Interaction.success 'It appears you already have a VNC viewer installed. Good job!'
53
53
  else
54
54
  puts 'Please run:'
55
- note_cmd 'sudo apt-get install xtightvncviewer'
56
- prompt 'Continue ...'
55
+ Interaction.note_cmd 'sudo apt-get install xtightvncviewer'
56
+ Interaction.prompt 'Continue ...'
57
57
  end
58
58
 
59
59
  puts
60
- puts strip_heredoc <<-TEXT
60
+ puts Util.strip_heredoc <<-TEXT
61
61
  All done. Our cucumber script will now automatically run Selenium features
62
62
  in VNC.
63
63
  TEXT
64
64
 
65
- success 'Happy cuking!'
65
+ Interaction.success 'Happy cuking!'
66
66
  end
@@ -10,13 +10,13 @@ def apache_site(*args)
10
10
  puts 'Please call: apache-site my-site'
11
11
  puts
12
12
  puts 'Available sites:'
13
- Dir.new(".").each do |file|
13
+ Dir.new('.').each do |file|
14
14
  puts "- #{file}" if file != '.' && file != '..'
15
15
  end
16
16
  exit
17
17
  end
18
18
 
19
- has_default = File.exists?('default')
20
- exec "sudo a2dissite \*; sudo a2ensite #{"default " if has_default}#{site} && sudo apache2ctl restart"
19
+ has_default = File.exist?('default')
20
+ exec "sudo a2dissite \*; sudo a2ensite #{'default ' if has_default}#{site} && sudo apache2ctl restart"
21
21
  Dir.chdir old_cwd
22
22
  end
@@ -1,7 +1,7 @@
1
- desc 'bundle-install', 'Run bundle install if required', :hide => true
1
+ desc 'bundle-install', 'Run bundle install if required', hide: true
2
2
  def bundle_install
3
- if File.exists?('Gemfile') and !system('bundle check > /dev/null 2>&1')
4
- announce 'Bundling'
3
+ if File.exist?('Gemfile') && !system('bundle check > /dev/null 2>&1')
4
+ Interaction.announce 'Bundling'
5
5
  Util.system! 'bundle install'
6
6
  end
7
7
  end
@@ -6,18 +6,17 @@ LONGDESC
6
6
  def capistrano(*args)
7
7
  targets = Dir['config/deploy/*.rb'].map { |file| File.basename(file, '.rb') }.sort
8
8
 
9
- note 'Found the following deploy targets:'
9
+ Interaction.note 'Found the following deploy targets:'
10
10
  puts targets
11
- prompt('Continue?', 'n', /y|yes/) or fail 'Cancelled.'
11
+ Interaction.prompt('Continue?', 'n', /y|yes/) || Interaction.fail('Cancelled.')
12
12
 
13
13
  targets << nil if targets.empty? # default target
14
14
  targets.each do |stage|
15
- announce 'Target: ' + (stage || '(default)')
15
+ Interaction.announce 'Target: ' + (stage || '(default)')
16
16
 
17
17
  command = "bundle exec cap #{stage} " + args.join(' ')
18
- note_cmd command
18
+ Interaction.note_cmd command
19
19
 
20
- Util.system!(command, :fail_message => 'Capistrano failed. Have a look!')
20
+ Util.system!(command, fail_message: 'Capistrano failed. Have a look!')
21
21
  end
22
-
23
22
  end
@@ -9,14 +9,5 @@ LONGDESC
9
9
  def chromedriver_update
10
10
  require 'geordi/chromedriver_updater'
11
11
 
12
- # Ruby 1.9.3 introduces #capture3 in open3
13
- supported_ruby_version = '1.9.2'
14
-
15
- # We do not want to backport this command to Ruby 1.8.7, a user can just use a newer Ruby version to run it. For all
16
- # other commands it still is necessary to have a proper Ruby 1.8.7 support.
17
- if Gem::Version.new(RUBY_VERSION) < Gem::Version.new(supported_ruby_version)
18
- raise("Unsupported ruby version #{RUBY_VERSION}, please use at least #{supported_ruby_version} to run this command!")
19
- end
20
-
21
12
  ChromedriverUpdater.new.run
22
13
  end
@@ -1,16 +1,15 @@
1
1
  desc 'clean', 'Remove unneeded files from the current directory'
2
2
  def clean
3
3
 
4
- announce 'Removing tempfiles'
4
+ Interaction.announce 'Removing tempfiles'
5
5
  for pattern in %w[ webrat-* capybara-* tmp/webrat-* tmp/capybara-* tmp/rtex/* log/*.log ]
6
- note pattern
6
+ Interaction.note pattern
7
7
  puts `rm -vfR #{pattern}`
8
8
  end
9
9
 
10
- announce 'Finding recursively and removing backup files'
11
- for pattern in %w[ *~ ]
12
- note pattern
10
+ Interaction.announce 'Finding recursively and removing backup files'
11
+ %w[*~].each do |pattern|
12
+ Interaction.note pattern
13
13
  `find . -name #{pattern} -exec rm {} ';'`
14
14
  end
15
-
16
15
  end
@@ -21,4 +21,3 @@ Unsupported Ruby Version #{RUBY_VERSION}. `geordi commit` requires Ruby 2.1+.
21
21
 
22
22
  Gitpt.new.run(git_args)
23
23
  end
24
-
@@ -6,19 +6,19 @@ Open a Rails console on `staging`: `geordi console staging`
6
6
  LONGDESC
7
7
 
8
8
 
9
- option :select_server, :default => false, :type => :boolean, :aliases => '-s'
9
+ option :select_server, default: false, type: :boolean, aliases: '-s'
10
10
 
11
- def console(target = 'development', *args)
11
+ def console(target = 'development', *_args)
12
12
  require 'geordi/remote'
13
13
 
14
14
  if target == 'development'
15
15
  invoke_cmd 'yarn_install'
16
16
 
17
- announce 'Opening a local Rails console'
17
+ Interaction.announce 'Opening a local Rails console'
18
18
 
19
19
  Util.system! Util.console_command(target)
20
20
  else
21
- announce 'Opening a Rails console on ' + target
21
+ Interaction.announce 'Opening a Rails console on ' + target
22
22
 
23
23
  Geordi::Remote.new(target).console(options)
24
24
  end
@@ -1,10 +1,10 @@
1
- desc 'create-database-yml', '[sic]', :hide => true
1
+ desc 'create-database-yml', '[sic]', hide: true
2
2
  def create_database_yml
3
3
  real_yml = 'config/database.yml'
4
4
  sample_yml = 'config/database.sample.yml'
5
5
 
6
- if File.exists?(sample_yml) and not File.exists?(real_yml)
7
- announce 'Creating ' + real_yml
6
+ if File.exist?(sample_yml) && !File.exist?(real_yml)
7
+ Interaction.announce 'Creating ' + real_yml
8
8
 
9
9
  sample = File.read(sample_yml)
10
10
  adapter = sample.match(/adapter: (\w+)\n/).captures.first
@@ -15,6 +15,6 @@ def create_database_yml
15
15
  real = sample.gsub(/password:.*$/, "password: #{db_password}")
16
16
  File.open(real_yml, 'w') { |f| f.write(real) }
17
17
 
18
- note "Created #{real_yml}."
18
+ Interaction.note "Created #{real_yml}."
19
19
  end
20
20
  end
@@ -1,11 +1,11 @@
1
- desc 'create-databases', 'Create all databases', :hide => true
1
+ desc 'create-databases', 'Create all databases', hide: true
2
2
  def create_databases
3
3
  invoke_cmd 'create_database_yml'
4
4
  invoke_cmd 'bundle_install'
5
5
 
6
- announce 'Creating databases'
6
+ Interaction.announce 'Creating databases'
7
7
 
8
- if File.exists?('config/database.yml')
8
+ if File.exist?('config/database.yml')
9
9
  command = 'bundle exec rake db:create:all'
10
10
  command << ' parallel:create' if Util.file_containing?('Gemfile', /parallel_tests/)
11
11
 
@@ -17,30 +17,30 @@ or `-d`.
17
17
  e.g. `--format pretty`.
18
18
  LONGDESC
19
19
 
20
- option :modified, :aliases => '-m', :type => :boolean,
21
- :desc => 'Run all modified features'
22
- option :containing, :aliases => '-c', :banner => 'STRING',
23
- :desc => 'Run all features that contain STRING'
24
- option :verbose, :aliases => '-v', :type => :boolean,
25
- :desc => 'Print the testrun command'
26
- option :debug, :aliases => '-d', :type => :boolean,
27
- :desc => 'Run with `-f pretty -b` which helps hunting down bugs'
28
- option :rerun, :aliases => '-r', :type => :numeric, :default => 0,
29
- :desc => 'Rerun features up to N times while failing'
20
+ option :modified, aliases: '-m', type: :boolean,
21
+ desc: 'Run all modified features'
22
+ option :containing, aliases: '-c', banner: 'STRING',
23
+ desc: 'Run all features that contain STRING'
24
+ option :verbose, aliases: '-v', type: :boolean,
25
+ desc: 'Print the testrun command'
26
+ option :debug, aliases: '-d', type: :boolean,
27
+ desc: 'Run with `-f pretty -b` which helps hunting down bugs'
28
+ option :rerun, aliases: '-r', type: :numeric, default: 0,
29
+ desc: 'Rerun features up to N times while failing'
30
30
 
31
31
  def cucumber(*args)
32
32
  if args.empty?
33
33
  # This is not testable as there is no way to stub `git` :(
34
34
  if options.modified?
35
- modified_features = `git status --short`.split($/).map do |line|
35
+ modified_features = `git status --short`.split($INPUT_RECORD_SEPARATOR).map do |line|
36
36
  indicators = line.slice!(0..2) # Remove leading indicators
37
- line if line.include?('.feature') and not indicators.include?('D')
37
+ line if line.include?('.feature') && !indicators.include?('D')
38
38
  end.compact
39
39
  args = modified_features
40
40
  end
41
41
 
42
42
  if options.containing
43
- matching_features = `grep -lri '#{options.containing}' --include=*.feature features/`.split($/)
43
+ matching_features = `grep -lri '#{options.containing}' --include=*.feature features/`.split($INPUT_RECORD_SEPARATOR)
44
44
  args = matching_features.uniq
45
45
  end
46
46
  end
@@ -56,7 +56,7 @@ def cucumber(*args)
56
56
 
57
57
  # Serial run of @solo scenarios ############################################
58
58
  if files.any? { |f| f.include? ':' }
59
- note '@solo run skipped when called with line numbers' if options.verbose
59
+ Interaction.note '@solo run skipped when called with line numbers' if options.verbose
60
60
  else
61
61
  solo_files = if files.empty?
62
62
  'features' # Proper grepping
@@ -64,37 +64,37 @@ def cucumber(*args)
64
64
  files.join(' ')
65
65
  end
66
66
 
67
- solo_tag_usages = `grep -r '@solo' #{ solo_files }`.split("\n")
67
+ solo_tag_usages = `grep -r '@solo' #{solo_files}`.split("\n")
68
68
 
69
69
  if solo_tag_usages.any?
70
70
  solo_cmd_opts = cmd_opts.dup
71
71
  solo_cmd_opts << '--tags' << '@solo'
72
72
 
73
- announce 'Running @solo features'
74
- solo_success = Geordi::Cucumber.new.run files, solo_cmd_opts, :verbose => options.verbose, :parallel => false
75
- solo_success or fail 'Features failed.'
73
+ Interaction.announce 'Running @solo features'
74
+ solo_success = Geordi::Cucumber.new.run files, solo_cmd_opts, verbose: options.verbose, parallel: false
75
+ solo_success || Interaction.fail('Features failed.')
76
76
  end
77
77
  end
78
78
 
79
79
  # Parallel run of all given features + reruns ##############################
80
- announce 'Running features'
81
- normal_run_successful = Geordi::Cucumber.new.run(files, cmd_opts, :verbose => options.verbose)
80
+ Interaction.announce 'Running features'
81
+ normal_run_successful = Geordi::Cucumber.new.run(files, cmd_opts, verbose: options.verbose)
82
82
 
83
83
  unless normal_run_successful
84
84
  cmd_opts << '--profile' << 'rerun'
85
85
 
86
86
  # Reruns
87
87
  (options.rerun + 1).times do |i|
88
- fail 'Features failed.' if (i == options.rerun) # All reruns done?
88
+ Interaction.fail 'Features failed.' if i == options.rerun # All reruns done?
89
89
 
90
- announce "Rerun ##{ i + 1 } of #{ options.rerun }"
91
- break if Geordi::Cucumber.new.run([], cmd_opts, :verbose => options.verbose, :parallel => false)
90
+ Interaction.announce "Rerun ##{i + 1} of #{options.rerun}"
91
+ break if Geordi::Cucumber.new.run([], cmd_opts, verbose: options.verbose, parallel: false)
92
92
  end
93
93
  end
94
94
 
95
- success 'Features green.'
95
+ Interaction.success 'Features green.'
96
96
 
97
97
  else
98
- note 'Cucumber not employed.'
98
+ Interaction.note 'Cucumber not employed.'
99
99
  end
100
100
  end
@@ -12,32 +12,32 @@ LONGDESC
12
12
 
13
13
  def delete_dumps(dump_directory = nil)
14
14
  deletable_dumps = []
15
- if dump_directory.nil?
16
- dump_directories = [
15
+ dump_directories = if dump_directory.nil?
16
+ [
17
17
  File.join(Dir.home, 'dumps'),
18
- Dir.pwd
18
+ Dir.pwd,
19
19
  ]
20
20
  else
21
- dump_directories = [dump_directory]
21
+ [dump_directory]
22
22
  end
23
- announce 'Looking for *.dump in ' << dump_directories.join(',')
23
+ Interaction.announce 'Looking for *.dump in ' << dump_directories.join(',')
24
24
  dump_directories.each do |d|
25
- d2 = File.expand_path(d)
26
- unless File.directory? File.realdirpath(d2)
27
- warn "Directory #{d2} does not exist"
25
+ d_2 = File.expand_path(d)
26
+ unless File.directory? File.realdirpath(d_2)
27
+ Interaction.warn "Directory #{d_2} does not exist"
28
28
  next
29
29
  end
30
- deletable_dumps.concat(Dir.glob("#{d2}/**/*.dump"))
30
+ deletable_dumps.concat(Dir.glob("#{d_2}/**/*.dump"))
31
31
  end
32
32
  if deletable_dumps.empty?
33
- success 'No dumps to delete' if deletable_dumps.empty?
33
+ Interaction.success 'No dumps to delete' if deletable_dumps.empty?
34
34
  exit 0
35
35
  end
36
36
  deletable_dumps.uniq!.sort!
37
- note 'The following dumps can be deleted:'
37
+ Interaction.note 'The following dumps can be deleted:'
38
38
  puts
39
39
  puts deletable_dumps
40
- prompt 'Delete those dumps', 'n', /y|yes/ or fail 'Cancelled.'
40
+ Interaction.prompt('Delete those dumps', 'n', /y|yes/) || raise('Cancelled.')
41
41
  deletable_dumps.each do |dump|
42
42
  File.delete dump unless File.directory? dump
43
43
  end
@@ -30,25 +30,25 @@ instead of `cap deploy:migrations`. You can force using `deploy` by passing the
30
30
  -M option: `geordi deploy -M staging`.
31
31
  LONGDESC
32
32
 
33
- option :no_migrations, :aliases => '-M', :type => :boolean,
34
- :desc => 'Run cap deploy instead of cap deploy:migrations'
35
- option :current_branch, :aliases => '-c', :type => :boolean,
36
- :desc => 'Set DEPLOY_BRANCH to the current branch during deploy'
33
+ option :no_migrations, aliases: '-M', type: :boolean,
34
+ desc: 'Run cap deploy instead of cap deploy:migrations'
35
+ option :current_branch, aliases: '-c', type: :boolean,
36
+ desc: 'Set DEPLOY_BRANCH to the current branch during deploy'
37
37
 
38
38
  def deploy(target_stage = nil)
39
39
  # Set/Infer default values
40
- branch_stage_map = { 'master' => 'staging', 'production' => 'production'}
41
- if target_stage and not Util.deploy_targets.include? target_stage
40
+ branch_stage_map = { 'master' => 'staging', 'production' => 'production' }
41
+ if target_stage && !Util.deploy_targets.include?(target_stage)
42
42
  # Target stage autocompletion from available stages
43
43
  target_stage = Util.deploy_targets.find { |t| t.start_with? target_stage }
44
- target_stage || warn('Given deployment stage not found')
44
+ target_stage || Interaction.warn('Given deployment stage not found')
45
45
  end
46
46
 
47
47
  # Ask for required information
48
- target_stage ||= prompt 'Deployment stage:', branch_stage_map.fetch(Util.current_branch, 'staging')
48
+ target_stage ||= Interaction.prompt 'Deployment stage:', branch_stage_map.fetch(Util.current_branch, 'staging')
49
49
  if options.current_branch
50
50
  stage_file = "config/deploy/#{target_stage}.rb"
51
- Util.file_containing? stage_file, 'DEPLOY_BRANCH' or fail <<-ERROR
51
+ Util.file_containing?(stage_file, 'DEPLOY_BRANCH') || Interaction.fail(<<-ERROR)
52
52
  To deploy from the current branch, configure #{stage_file} to respect the
53
53
  environment variable DEPLOY_BRANCH. Example:
54
54
 
@@ -57,38 +57,38 @@ set :branch, ENV['DEPLOY_BRANCH'] || 'master'
57
57
 
58
58
  source_branch = target_branch = Util.current_branch
59
59
  else
60
- source_branch = prompt 'Source branch:', Util.current_branch
61
- target_branch = prompt 'Deploy branch:', branch_stage_map.invert.fetch(target_stage, 'master')
60
+ source_branch = Interaction.prompt 'Source branch:', Util.current_branch
61
+ target_branch = Interaction.prompt 'Deploy branch:', branch_stage_map.invert.fetch(target_stage, 'master')
62
62
  end
63
63
 
64
64
  merge_needed = (source_branch != target_branch)
65
65
  push_needed = merge_needed || `git cherry -v | wc -l`.strip.to_i > 0
66
66
  push_needed = false if Util.testing? # Hard to test
67
67
 
68
- announce "Checking whether your #{source_branch} branch is ready" ############
68
+ Interaction.announce "Checking whether your #{source_branch} branch is ready" ############
69
69
  Util.system! "git checkout #{source_branch}"
70
- if `git status -s | wc -l`.strip != '0' and not Util.testing?
71
- warn "Your #{source_branch} branch holds uncommitted changes."
72
- prompt('Continue anyway?', 'n', /y|yes/) or fail 'Cancelled.'
70
+ if (`git status -s | wc -l`.strip != '0') && !Util.testing?
71
+ Interaction.warn "Your #{source_branch} branch holds uncommitted changes."
72
+ Interaction.prompt('Continue anyway?', 'n', /y|yes/) || raise('Cancelled.')
73
73
  else
74
- note 'All good.'
74
+ Interaction.note 'All good.'
75
75
  end
76
76
 
77
77
  if merge_needed
78
- announce "Checking what's in your #{target_branch} branch right now" #######
78
+ Interaction.announce "Checking what's in your #{target_branch} branch right now" #######
79
79
  Util.system! "git checkout #{target_branch} && git pull"
80
80
  end
81
81
 
82
- announce 'You are about to:' #################################################
83
- note "Merge branch #{source_branch} into #{target_branch}" if merge_needed
82
+ Interaction.announce 'You are about to:' #################################################
83
+ Interaction.note "Merge branch #{source_branch} into #{target_branch}" if merge_needed
84
84
  if push_needed
85
- note 'Push these commits:' if push_needed
85
+ Interaction.note 'Push these commits:' if push_needed
86
86
  Util.system! "git --no-pager log origin/#{target_branch}..#{source_branch} --oneline"
87
87
  end
88
- note "Deploy to #{target_stage}"
89
- note "From current branch #{source_branch}" if options.current_branch
88
+ Interaction.note "Deploy to #{target_stage}"
89
+ Interaction.note "From current branch #{source_branch}" if options.current_branch
90
90
 
91
- if prompt('Go ahead with the deployment?', 'n', /y|yes/)
91
+ if Interaction.prompt('Go ahead with the deployment?', 'n', /y|yes/)
92
92
  puts
93
93
  git_call = []
94
94
  git_call << "git merge #{source_branch}" if merge_needed
@@ -100,17 +100,16 @@ set :branch, ENV['DEPLOY_BRANCH'] || 'master'
100
100
  capistrano_call = "DEPLOY_BRANCH=#{source_branch} #{capistrano_call}" if options.current_branch
101
101
 
102
102
  if git_call.any?
103
- Util.system! git_call.join(' && '), :show_cmd => true
103
+ Util.system! git_call.join(' && '), show_cmd: true
104
104
  end
105
105
 
106
106
  invoke_cmd 'bundle_install'
107
107
 
108
- Util.system! capistrano_call, :show_cmd => true
108
+ Util.system! capistrano_call, show_cmd: true
109
109
 
110
- success 'Deployment complete.'
110
+ Interaction.success 'Deployment complete.'
111
111
  else
112
112
  Util.system! "git checkout #{source_branch}"
113
- fail 'Deployment cancelled.'
113
+ Interaction.fail 'Deployment cancelled.'
114
114
  end
115
-
116
115
  end