tugboat 2.2.2 → 2.2.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (91) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +520 -0
  3. data/CHANGELOG.md +9 -0
  4. data/Gemfile +0 -6
  5. data/README.md +34 -2
  6. data/Rakefile +6 -1
  7. data/bin/tugboat +2 -2
  8. data/features/cassettes/config/Array_of_SSH_Keys_in_Config.yml +1 -1
  9. data/features/cassettes/config/Single_SSH_key_as_number_in_config.yml +1 -1
  10. data/features/step_definitions/steps.rb +1 -1
  11. data/features/support/env.rb +7 -3
  12. data/lib/tugboat.rb +2 -2
  13. data/lib/tugboat/cli.rb +394 -444
  14. data/lib/tugboat/config.rb +43 -61
  15. data/lib/tugboat/middleware.rb +33 -33
  16. data/lib/tugboat/middleware/add_key.rb +12 -13
  17. data/lib/tugboat/middleware/ask_for_credentials.rb +12 -13
  18. data/lib/tugboat/middleware/base.rb +25 -20
  19. data/lib/tugboat/middleware/check_configuration.rb +3 -6
  20. data/lib/tugboat/middleware/check_credentials.rb +0 -1
  21. data/lib/tugboat/middleware/check_droplet_active.rb +2 -4
  22. data/lib/tugboat/middleware/check_droplet_inactive.rb +2 -4
  23. data/lib/tugboat/middleware/config.rb +3 -5
  24. data/lib/tugboat/middleware/confirm_action.rb +4 -6
  25. data/lib/tugboat/middleware/create_droplet.rb +27 -44
  26. data/lib/tugboat/middleware/custom_logger.rb +52 -54
  27. data/lib/tugboat/middleware/destroy_droplet.rb +5 -6
  28. data/lib/tugboat/middleware/destroy_image.rb +5 -6
  29. data/lib/tugboat/middleware/find_droplet.rb +43 -47
  30. data/lib/tugboat/middleware/find_image.rb +23 -29
  31. data/lib/tugboat/middleware/halt_droplet.rb +9 -10
  32. data/lib/tugboat/middleware/info_droplet.rb +30 -33
  33. data/lib/tugboat/middleware/info_image.rb +1 -1
  34. data/lib/tugboat/middleware/inject_client.rb +8 -10
  35. data/lib/tugboat/middleware/inject_configuration.rb +1 -2
  36. data/lib/tugboat/middleware/list_droplets.rb +9 -10
  37. data/lib/tugboat/middleware/list_images.rb +9 -9
  38. data/lib/tugboat/middleware/list_regions.rb +1 -1
  39. data/lib/tugboat/middleware/list_sizes.rb +1 -1
  40. data/lib/tugboat/middleware/list_ssh_keys.rb +1 -3
  41. data/lib/tugboat/middleware/password_reset.rb +6 -7
  42. data/lib/tugboat/middleware/rebuild_droplet.rb +7 -7
  43. data/lib/tugboat/middleware/resize_droplet.rb +6 -7
  44. data/lib/tugboat/middleware/restart_droplet.rb +4 -11
  45. data/lib/tugboat/middleware/snapshot_droplet.rb +7 -8
  46. data/lib/tugboat/middleware/ssh_droplet.rb +30 -31
  47. data/lib/tugboat/middleware/start_droplet.rb +5 -5
  48. data/lib/tugboat/middleware/wait_for_state.rb +2 -3
  49. data/lib/tugboat/version.rb +1 -1
  50. data/spec/cli/add_key_spec.rb +25 -28
  51. data/spec/cli/authorize_cli_spec.rb +57 -60
  52. data/spec/cli/config_cli_spec.rb +8 -11
  53. data/spec/cli/create_cli_spec.rb +40 -46
  54. data/spec/cli/debug_cli_spec.rb +29 -29
  55. data/spec/cli/destroy_cli_spec.rb +58 -60
  56. data/spec/cli/destroy_image_cli_spec.rb +42 -45
  57. data/spec/cli/droplets_cli_spec.rb +62 -64
  58. data/spec/cli/env_variable_spec.rb +14 -15
  59. data/spec/cli/halt_cli_spec.rb +65 -69
  60. data/spec/cli/help_cli_spec.rb +8 -8
  61. data/spec/cli/images_cli_spec.rb +28 -30
  62. data/spec/cli/info_cli_spec.rb +144 -147
  63. data/spec/cli/info_image_cli_spec.rb +57 -60
  64. data/spec/cli/keys_cli_spec.rb +8 -10
  65. data/spec/cli/password_reset_cli_spec.rb +56 -56
  66. data/spec/cli/rebuild_cli_spec.rb +194 -198
  67. data/spec/cli/regions_cli_spec.rb +8 -8
  68. data/spec/cli/resize_cli_spec.rb +54 -56
  69. data/spec/cli/restart_cli_spec.rb +53 -57
  70. data/spec/cli/sizes_cli_spec.rb +7 -8
  71. data/spec/cli/snapshot_cli_spec.rb +50 -53
  72. data/spec/cli/ssh_cli_spec.rb +41 -42
  73. data/spec/cli/start_cli_spec.rb +48 -52
  74. data/spec/cli/verify_cli_spec.rb +22 -25
  75. data/spec/cli/version_cli_spec.rb +6 -8
  76. data/spec/cli/wait_cli_spec.rb +50 -52
  77. data/spec/config_spec.rb +56 -57
  78. data/spec/middleware/base_spec.rb +5 -6
  79. data/spec/middleware/check_configuration_spec.rb +5 -7
  80. data/spec/middleware/check_credentials_spec.rb +9 -10
  81. data/spec/middleware/check_droplet_active_spec.rb +5 -7
  82. data/spec/middleware/check_droplet_inactive_spec.rb +5 -7
  83. data/spec/middleware/find_droplet_spec.rb +4 -5
  84. data/spec/middleware/find_image_spec.rb +4 -5
  85. data/spec/middleware/inject_client_spec.rb +9 -12
  86. data/spec/middleware/inject_configuration_spec.rb +4 -7
  87. data/spec/middleware/ssh_droplet_spec.rb +70 -73
  88. data/spec/shared/environment.rb +18 -20
  89. data/spec/spec_helper.rb +4 -4
  90. data/tugboat.gemspec +10 -6
  91. metadata +88 -17
@@ -4,20 +4,20 @@ module Tugboat
4
4
  def call(env)
5
5
  ocean = env['barge']
6
6
 
7
- say "Queuing rebuild for droplet #{env["droplet_id"]} #{env["droplet_name"]} with image #{env["image_id"]} #{env["image_name"]}...", nil, false
7
+ say "Queuing rebuild for droplet #{env['droplet_id']} #{env['droplet_name']} with image #{env['image_id']} #{env['image_name']}...", nil, false
8
8
 
9
- response = ocean.droplet.rebuild env["droplet_id"],
10
- :image => env["image_id"]
9
+ response = ocean.droplet.rebuild env['droplet_id'],
10
+ image: env['image_id']
11
11
 
12
- unless response.success?
12
+ if response.success?
13
+ say 'Rebuild complete', :green
14
+ else
13
15
  say "Failed to rebuild Droplet: #{response.message}", :red
14
16
  exit 1
15
- else
16
- say "Rebuild complete", :green
17
17
  end
18
18
 
19
19
  @app.call(env)
20
20
  end
21
21
  end
22
22
  end
23
- end
23
+ end
@@ -4,16 +4,16 @@ module Tugboat
4
4
  def call(env)
5
5
  ocean = env['barge']
6
6
 
7
- say "Queuing resize for #{env["droplet_id"]} #{env["droplet_name"]}...", nil, false
7
+ say "Queuing resize for #{env['droplet_id']} #{env['droplet_name']}...", nil, false
8
8
 
9
- response = ocean.droplet.resize env["droplet_id"],
10
- :size => env["user_droplet_size"]
9
+ response = ocean.droplet.resize env['droplet_id'],
10
+ size: env['user_droplet_size']
11
11
 
12
- unless response.success?
12
+ if response.success?
13
+ say 'Resize complete!', :green
14
+ else
13
15
  say "Failed to resize Droplet: #{response.message}", :red
14
16
  exit 1
15
- else
16
- say "Resize complete!", :green
17
17
  end
18
18
 
19
19
  @app.call(env)
@@ -21,4 +21,3 @@ module Tugboat
21
21
  end
22
22
  end
23
23
  end
24
-
@@ -4,19 +4,13 @@ module Tugboat
4
4
  def call(env)
5
5
  ocean = env['barge']
6
6
 
7
- response = if env["user_droplet_hard"]
8
- say "Queuing hard restart for #{env["droplet_id"]} #{env["droplet_name"]}...", nil, false
9
- ocean.droplet.power_cycle env["droplet_id"]
10
- else
11
- say "Queuing restart for #{env["droplet_id"]} #{env["droplet_name"]}...", nil, false
12
- ocean.droplet.reboot env["droplet_id"]
13
- end
7
+ response = restart_droplet(env['user_droplet_hard'], ocean, env['droplet_id'], env['droplet_name'])
14
8
 
15
- unless response.success?
9
+ if response.success?
10
+ say 'Restart complete!', :green
11
+ else
16
12
  say "Failed to restart Droplet: #{response.message}", :red
17
13
  exit 1
18
- else
19
- say "Restart complete!", :green
20
14
  end
21
15
 
22
16
  @app.call(env)
@@ -24,4 +18,3 @@ module Tugboat
24
18
  end
25
19
  end
26
20
  end
27
-
@@ -6,18 +6,18 @@ module Tugboat
6
6
  # Right now, the digital ocean API doesn't return an error
7
7
  # when your droplet is not powered off and you try to snapshot.
8
8
  # This is a temporary measure to let the user know.
9
- say "Warning: Droplet must be in a powered off state for snapshot to be successful", :yellow
9
+ say 'Warning: Droplet must be in a powered off state for snapshot to be successful', :yellow
10
10
 
11
- say "Queuing snapshot '#{env["user_snapshot_name"]}' for #{env["droplet_id"]} #{env["droplet_name"]}...", nil, false
11
+ say "Queuing snapshot '#{env['user_snapshot_name']}' for #{env['droplet_id']} #{env['droplet_name']}...", nil, false
12
12
 
13
- response = ocean.droplet.snapshot env["droplet_id"],
14
- :name => env["user_snapshot_name"]
13
+ response = ocean.droplet.snapshot env['droplet_id'],
14
+ name: env['user_snapshot_name']
15
15
 
16
- unless response.success?
16
+ if response.success?
17
+ say 'Snapshot successful!', :green
18
+ else
17
19
  say "Failed to snapshot Droplet: #{response.message}", :red
18
20
  exit 1
19
- else
20
- say "Snapshot successful!", :green
21
21
  end
22
22
 
23
23
  @app.call(env)
@@ -25,4 +25,3 @@ module Tugboat
25
25
  end
26
26
  end
27
27
  end
28
-
@@ -2,47 +2,47 @@ module Tugboat
2
2
  module Middleware
3
3
  class SSHDroplet < Base
4
4
  def call(env)
5
- say "Executing SSH on Droplet #{env["droplet_name"]}..."
5
+ say "Executing SSH on Droplet #{env['droplet_name']}..."
6
6
 
7
7
  options = [
8
- "-o", "LogLevel=ERROR",
9
- "-o", "StrictHostKeyChecking=no",
10
- "-o", "UserKnownHostsFile=/dev/null",
8
+ '-o', 'LogLevel=ERROR',
9
+ '-o', 'StrictHostKeyChecking=no',
10
+ '-o', 'UserKnownHostsFile=/dev/null'
11
11
  ]
12
12
 
13
- if env["config"].ssh_key_path.nil? || env["config"].ssh_key_path.empty?
14
- options.push("-o", "IdentitiesOnly=no")
13
+ if env['config'].ssh_key_path.nil? || env['config'].ssh_key_path.empty?
14
+ options.push('-o', 'IdentitiesOnly=no')
15
15
  else
16
- options.push("-o", "IdentitiesOnly=yes")
17
- options.push("-i", File.expand_path(env["config"].ssh_key_path.to_s))
16
+ options.push('-o', 'IdentitiesOnly=yes')
17
+ options.push('-i', File.expand_path(env['config'].ssh_key_path.to_s))
18
18
  end
19
19
 
20
- if env["user_droplet_ssh_port"]
21
- options.push("-p", env["user_droplet_ssh_port"].to_s)
22
- elsif env["config"].ssh_port
23
- options.push("-p", env["config"].ssh_port.to_s)
20
+ if env['user_droplet_ssh_port']
21
+ options.push('-p', env['user_droplet_ssh_port'].to_s)
22
+ elsif env['config'].ssh_port
23
+ options.push('-p', env['config'].ssh_port.to_s)
24
24
  else
25
- options.push("-p", "22")
25
+ options.push('-p', '22')
26
26
  end
27
27
 
28
- if env["user_droplet_ssh_opts"]
29
- options.concat env["user_droplet_ssh_opts"].split
28
+ if env['user_droplet_ssh_opts']
29
+ options.concat env['user_droplet_ssh_opts'].split
30
30
  end
31
31
 
32
- ssh_user = env["user_droplet_ssh_user"] || env["config"].ssh_user
32
+ ssh_user = env['user_droplet_ssh_user'] || env['config'].ssh_user
33
33
 
34
- host_ip = env["droplet_ip"]
34
+ host_ip = env['droplet_ip']
35
35
 
36
- if env["user_droplet_use_private_ip"] && env["droplet_ip_private"].nil?
37
- say "You asked to ssh to the private IP, but no Private IP found!", :red
36
+ if env['user_droplet_use_private_ip'] && env['droplet_ip_private'].nil?
37
+ say 'You asked to ssh to the private IP, but no Private IP found!', :red
38
38
  exit 1
39
39
  end
40
40
 
41
- if env["droplet_ip_private"]
42
- say "This droplet has a private IP, checking if you asked to use the Private IP..."
43
- if env["user_droplet_use_private_ip"]
44
- say "You did! Using private IP for ssh...", :yellow
45
- host_ip = env["droplet_ip_private"]
41
+ if env['droplet_ip_private']
42
+ say 'This droplet has a private IP, checking if you asked to use the Private IP...'
43
+ if env['user_droplet_use_private_ip']
44
+ say 'You did! Using private IP for ssh...', :yellow
45
+ host_ip = env['droplet_ip_private']
46
46
  else
47
47
  say "You didn't! Using public IP for ssh...", :yellow
48
48
  end
@@ -51,25 +51,24 @@ module Tugboat
51
51
  host_string = "#{ssh_user}@#{host_ip}"
52
52
 
53
53
  if env['user_droplet_ssh_wait']
54
- say "Wait flag given, waiting for droplet to become active"
55
- wait_for_state(env["droplet_id"],'active',env['barge'])
54
+ say 'Wait flag given, waiting for droplet to become active'
55
+ wait_for_state(env['droplet_id'], 'active', env['barge'])
56
56
  end
57
57
 
58
58
  say "Attempting SSH: #{host_string}"
59
59
 
60
60
  options << host_string
61
61
 
62
- if env["user_droplet_ssh_command"]
63
- options.push(env["user_droplet_ssh_command"])
62
+ if env['user_droplet_ssh_command']
63
+ options.push(env['user_droplet_ssh_command'])
64
64
  end
65
65
 
66
- say "SShing with options: #{options.join(" ")}"
66
+ say "SShing with options: #{options.join(' ')}"
67
67
 
68
- Kernel.exec("ssh", *options)
68
+ Kernel.exec('ssh', *options)
69
69
 
70
70
  @app.call(env)
71
71
  end
72
72
  end
73
73
  end
74
74
  end
75
-
@@ -4,14 +4,14 @@ module Tugboat
4
4
  def call(env)
5
5
  ocean = env['barge']
6
6
 
7
- say "Queuing start for #{env["droplet_id"]} #{env["droplet_name"]}...", nil, false
8
- response = ocean.droplet.power_on env["droplet_id"]
7
+ say "Queuing start for #{env['droplet_id']} #{env['droplet_name']}...", nil, false
8
+ response = ocean.droplet.power_on env['droplet_id']
9
9
 
10
- unless response.success?
10
+ if response.success?
11
+ say 'Start complete!', :green
12
+ else
11
13
  say "Failed to start Droplet: #{response.message}", :red
12
14
  exit 1
13
- else
14
- say "Start complete!", :green
15
15
  end
16
16
 
17
17
  @app.call(env)
@@ -4,13 +4,12 @@ module Tugboat
4
4
  def call(env)
5
5
  ocean = env['barge']
6
6
 
7
- say "Waiting for droplet to become #{env["user_droplet_desired_state"]}.", nil, false
7
+ say "Waiting for droplet to become #{env['user_droplet_desired_state']}.", nil, false
8
8
 
9
- wait_for_state(env["droplet_id"],env["user_droplet_desired_state"],ocean)
9
+ wait_for_state(env['droplet_id'], env['user_droplet_desired_state'], ocean)
10
10
 
11
11
  @app.call(env)
12
12
  end
13
13
  end
14
14
  end
15
15
  end
16
-
@@ -1,3 +1,3 @@
1
1
  module Tugboat
2
- VERSION = "2.2.2"
2
+ VERSION = '2.2.3'.freeze
3
3
  end
@@ -2,29 +2,28 @@ require 'spec_helper'
2
2
  require 'fileutils'
3
3
 
4
4
  describe Tugboat::CLI do
5
- include_context "spec"
5
+ include_context 'spec'
6
6
 
7
- let(:tmp_path) { project_path + "/tmp/tugboat" }
7
+ let(:tmp_path) { project_path + '/tmp/tugboat' }
8
8
  let(:fake_home) { "#{project_path}/tmp" }
9
9
 
10
- before :each do
11
- File.open("id_dsa.pub", 'w') {|f| f.write("ssh-dss A456= user@host") }
10
+ before do
11
+ File.open('id_dsa.pub', 'w') { |f| f.write('ssh-dss A456= user@host') }
12
12
  end
13
13
 
14
- after :each do
15
- File.delete("id_dsa.pub") if File.exist?("id_dsa.pub")
14
+ after do
15
+ File.delete('id_dsa.pub') if File.exist?('id_dsa.pub')
16
16
  File.delete("#{fake_home}/.ssh/id_rsa.pub") if File.exist?("#{fake_home}/.ssh/id_rsa.pub")
17
17
  end
18
18
 
19
- describe "add-key" do
20
- it "with a name and key string" do
19
+ describe 'add-key' do
20
+ it 'with a name and key string' do
21
+ stub_request(:post, 'https://api.digitalocean.com/v2/account/keys').
22
+ with(body: '{"name":"macbook_pro","public_key":"ssh-dss A123= user@host"}').
23
+ to_return(status: 201, body: fixture('create_ssh_key'), headers: {})
21
24
 
22
- stub_request(:post, "https://api.digitalocean.com/v2/account/keys").
23
- with(:body => "{\"name\":\"macbook_pro\",\"public_key\":\"ssh-dss A123= user@host\"}").
24
- to_return(:status => 201, :body => fixture('create_ssh_key'), :headers => {})
25
-
26
- @cli.options = @cli.options.merge(:key => "#{ssh_public_key}")
27
- @cli.add_key(ssh_key_name)
25
+ cli.options = cli.options.merge(key: ssh_public_key.to_s)
26
+ cli.add_key(ssh_key_name)
28
27
 
29
28
  expect($stdout.string).to eq <<-eos
30
29
  Queueing upload of SSH key 'macbook_pro'...SSH Key uploaded
@@ -33,31 +32,31 @@ Name: macbook_pro
33
32
  ID: 3
34
33
  eos
35
34
 
36
- expect(a_request(:post, "https://api.digitalocean.com/v2/account/keys")).to have_been_made
35
+ expect(a_request(:post, 'https://api.digitalocean.com/v2/account/keys')).to have_been_made
37
36
  end
38
37
 
39
- before :each do
38
+ before do
40
39
  allow(ENV).to receive(:[]).with('HOME').and_return(fake_home)
41
40
  allow(ENV).to receive(:[]).with('DEBUG').and_return(nil)
42
41
  allow(ENV).to receive(:[]).with('DO_API_TOKEN').and_return(nil)
43
42
  allow(ENV).to receive(:[]).with('http_proxy').and_return(nil)
44
43
 
45
44
  FileUtils.mkdir_p "#{fake_home}/.ssh"
46
- File.open("#{fake_home}/.ssh/id_rsa.pub", 'w') {|f| f.write("ssh-dss A456= user@host") }
45
+ File.open("#{fake_home}/.ssh/id_rsa.pub", 'w') { |f| f.write('ssh-dss A456= user@host') }
47
46
  end
48
47
 
49
- it "with name, prompts from file folder" do
50
- stub_request(:post, "https://api.digitalocean.com/v2/account/keys").
51
- with(:body => "{\"name\":\"macbook_pro\",\"public_key\":\"ssh-dss A456= user@host\"}",
52
- :headers => {'Accept'=>'*/*', 'Authorization'=>'Bearer foo', 'Content-Type'=>'application/json'}).
53
- to_return(:status => 201, :body => fixture('create_ssh_key_from_file'), :headers => {})
48
+ it 'with name, prompts from file folder' do
49
+ stub_request(:post, 'https://api.digitalocean.com/v2/account/keys').
50
+ with(body: '{"name":"macbook_pro","public_key":"ssh-dss A456= user@host"}',
51
+ headers: { 'Accept' => '*/*', 'Authorization' => 'Bearer foo', 'Content-Type' => 'application/json' }).
52
+ to_return(status: 201, body: fixture('create_ssh_key_from_file'), headers: {})
54
53
 
55
54
  expect($stdout).to receive(:print).exactly(4).times
56
- expect($stdout).to receive(:print).with("Enter the path to your SSH key: ")
55
+ expect($stdout).to receive(:print).with('Enter the path to your SSH key: ')
57
56
  expect($stdout).to receive(:print).with("Queueing upload of SSH key '#{ssh_key_name}'...")
58
57
  expect($stdin).to receive(:gets).and_return("#{fake_home}/.ssh/id_rsa.pub")
59
58
 
60
- @cli.add_key(ssh_key_name)
59
+ cli.add_key(ssh_key_name)
61
60
 
62
61
  expect($stdout.string).to eq <<-eos
63
62
  Possible public key paths from #{fake_home}/.ssh:
@@ -71,11 +70,9 @@ ID: 5
71
70
  eos
72
71
  end
73
72
 
74
- after :each do
75
- File.delete("id_dsa.pub") if File.exist?("id_dsa.pub")
73
+ after do
74
+ File.delete('id_dsa.pub') if File.exist?('id_dsa.pub')
76
75
  FileUtils.rm_rf("#{fake_home}/.ssh/") if File.exist?("#{fake_home}/.ssh/")
77
76
  end
78
-
79
77
  end
80
78
  end
81
-
@@ -1,113 +1,110 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Tugboat::CLI do
4
- include_context "spec"
4
+ include_context 'spec'
5
5
 
6
- let(:tmp_path) { project_path + "/tmp/tugboat" }
6
+ let(:tmp_path) { project_path + '/tmp/tugboat' }
7
7
 
8
- describe "authorize" do
8
+ describe 'authorize' do
9
9
  before do
10
-
11
10
  end
12
11
 
13
- it "asks the right questions and checks credentials" do
14
- stub_request(:get, "https://api.digitalocean.com/v2/droplets?page=1&per_page=1").
15
- with(:headers => {'Accept'=>'*/*', 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'Authorization'=>'Bearer foo', 'Content-Type'=>'application/json', 'User-Agent'=>'Faraday v0.9.2'}).
16
- to_return(:status => 200, :body => fixture('show_droplets'), :headers => {})
12
+ it 'asks the right questions and checks credentials' do
13
+ stub_request(:get, 'https://api.digitalocean.com/v2/droplets?page=1&per_page=1').
14
+ with(headers: { 'Accept' => '*/*', 'Accept-Encoding' => 'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'Authorization' => 'Bearer foo', 'Content-Type' => 'application/json', 'User-Agent' => 'Faraday v0.11.0' }).
15
+ to_return(status: 200, body: fixture('show_droplets'), headers: {})
17
16
 
18
17
  expect($stdout).to receive(:print).exactly(6).times
19
- expect($stdout).to receive(:print).with("Enter your access token: ")
18
+ expect($stdout).to receive(:print).with('Enter your access token: ')
20
19
  expect($stdin).to receive(:gets).and_return(access_token)
21
- expect($stdout).to receive(:print).with("Enter your SSH key path (optional, defaults to ~/.ssh/id_rsa): ")
20
+ expect($stdout).to receive(:print).with('Enter your SSH key path (optional, defaults to ~/.ssh/id_rsa): ')
22
21
  expect($stdin).to receive(:gets).and_return(ssh_key_path)
23
- expect($stdout).to receive(:print).with("Enter your SSH user (optional, defaults to root): ")
22
+ expect($stdout).to receive(:print).with('Enter your SSH user (optional, defaults to root): ')
24
23
  expect($stdin).to receive(:gets).and_return(ssh_user)
25
- expect($stdout).to receive(:print).with("Enter your SSH port number (optional, defaults to 22): ")
24
+ expect($stdout).to receive(:print).with('Enter your SSH port number (optional, defaults to 22): ')
26
25
  expect($stdin).to receive(:gets).and_return(ssh_port)
27
- expect($stdout).to receive(:print).with("Enter your default region (optional, defaults to nyc1): ")
26
+ expect($stdout).to receive(:print).with('Enter your default region (optional, defaults to nyc1): ')
28
27
  expect($stdin).to receive(:gets).and_return(region)
29
- expect($stdout).to receive(:print).with("Enter your default image ID or image slug (optional, defaults to ubuntu-14-04-x64): ")
28
+ expect($stdout).to receive(:print).with('Enter your default image ID or image slug (optional, defaults to ubuntu-14-04-x64): ')
30
29
  expect($stdin).to receive(:gets).and_return(image)
31
- expect($stdout).to receive(:print).with("Enter your default size (optional, defaults to 512mb)): ")
30
+ expect($stdout).to receive(:print).with('Enter your default size (optional, defaults to 512mb)): ')
32
31
  expect($stdin).to receive(:gets).and_return(size)
33
32
  expect($stdout).to receive(:print).with("Enter your default ssh key IDs (optional, defaults to none, array of IDs of ssh keys eg. ['1234']): ")
34
33
  expect($stdin).to receive(:gets).and_return(ssh_key_id)
35
- expect($stdout).to receive(:print).with("Enter your default for private networking (optional, defaults to false): ")
34
+ expect($stdout).to receive(:print).with('Enter your default for private networking (optional, defaults to false): ')
36
35
  expect($stdin).to receive(:gets).and_return(private_networking)
37
- expect($stdout).to receive(:print).with("Enter your default for enabling backups (optional, defaults to false): ")
36
+ expect($stdout).to receive(:print).with('Enter your default for enabling backups (optional, defaults to false): ')
38
37
  expect($stdin).to receive(:gets).and_return(backups_enabled)
39
- expect($stdout).to receive(:print).with("Enter your default for IPv6 (optional, defaults to false): ")
38
+ expect($stdout).to receive(:print).with('Enter your default for IPv6 (optional, defaults to false): ')
40
39
  expect($stdin).to receive(:gets).and_return(ip6)
41
40
 
42
- @cli.authorize
41
+ cli.authorize
43
42
 
44
- expect($stdout.string).to include("Note: You can get your Access Token from https://cloud.digitalocean.com/settings/tokens/new")
43
+ expect($stdout.string).to include('Note: You can get your Access Token from https://cloud.digitalocean.com/settings/tokens/new')
45
44
  expect($stdout.string).to include("To retrieve region, image, size and key ID's, you can use the corresponding tugboat command, such as `tugboat images`.")
46
- expect($stdout.string).to include("Defaults can be changed at any time in your ~/.tugboat configuration file.")
45
+ expect($stdout.string).to include('Defaults can be changed at any time in your ~/.tugboat configuration file.')
47
46
 
48
47
  config = YAML.load_file(tmp_path)
49
48
 
50
- expect(config["defaults"]["image"]).to eq image
51
- expect(config["defaults"]["region"]).to eq region
52
- expect(config["defaults"]["size"]).to eq size
53
- expect(config["ssh"]["ssh_user"]).to eq ssh_user
54
- expect(config["ssh"]["ssh_key_path"]).to eq ssh_key_path
55
- expect(config["ssh"]["ssh_port"]).to eq ssh_port
56
- expect(config["defaults"]["ssh_key"]).to eq ssh_key_id
57
- expect(config["defaults"]["private_networking"]).to eq private_networking
58
- expect(config["defaults"]["backups_enabled"]).to eq backups_enabled
59
- expect(config["defaults"]["ip6"]).to eq ip6
49
+ expect(config['defaults']['image']).to eq image
50
+ expect(config['defaults']['region']).to eq region
51
+ expect(config['defaults']['size']).to eq size
52
+ expect(config['ssh']['ssh_user']).to eq ssh_user
53
+ expect(config['ssh']['ssh_key_path']).to eq ssh_key_path
54
+ expect(config['ssh']['ssh_port']).to eq ssh_port
55
+ expect(config['defaults']['ssh_key']).to eq ssh_key_id
56
+ expect(config['defaults']['private_networking']).to eq private_networking
57
+ expect(config['defaults']['backups_enabled']).to eq backups_enabled
58
+ expect(config['defaults']['ip6']).to eq ip6
60
59
  end
61
60
 
62
- it "sets defaults if no input given" do
63
- stub_request(:get, "https://api.digitalocean.com/v2/droplets?page=1&per_page=1").
64
- with(:headers => {'Accept'=>'*/*', 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'Authorization'=>/Bearer/, 'Content-Type'=>'application/json', 'User-Agent'=>'Faraday v0.9.2'}).
65
- to_return(:status => 200, :body => fixture('show_droplets'), :headers => {})
61
+ it 'sets defaults if no input given' do
62
+ stub_request(:get, 'https://api.digitalocean.com/v2/droplets?page=1&per_page=1').
63
+ with(headers: { 'Accept' => '*/*', 'Accept-Encoding' => 'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'Authorization' => %r{Bearer}, 'Content-Type' => 'application/json', 'User-Agent' => 'Faraday v0.11.0' }).
64
+ to_return(status: 200, body: fixture('show_droplets'), headers: {})
66
65
 
67
66
  expect($stdout).to receive(:print).exactly(6).times
68
- expect($stdout).to receive(:print).with("Enter your access token: ")
67
+ expect($stdout).to receive(:print).with('Enter your access token: ')
69
68
  expect($stdin).to receive(:gets).and_return('')
70
- expect($stdout).to receive(:print).with("Enter your SSH key path (optional, defaults to ~/.ssh/id_rsa): ")
69
+ expect($stdout).to receive(:print).with('Enter your SSH key path (optional, defaults to ~/.ssh/id_rsa): ')
71
70
  expect($stdin).to receive(:gets).and_return('')
72
- expect($stdout).to receive(:print).with("Enter your SSH user (optional, defaults to root): ")
71
+ expect($stdout).to receive(:print).with('Enter your SSH user (optional, defaults to root): ')
73
72
  expect($stdin).to receive(:gets).and_return('')
74
- expect($stdout).to receive(:print).with("Enter your SSH port number (optional, defaults to 22): ")
73
+ expect($stdout).to receive(:print).with('Enter your SSH port number (optional, defaults to 22): ')
75
74
  expect($stdin).to receive(:gets).and_return('')
76
- expect($stdout).to receive(:print).with("Enter your default region (optional, defaults to nyc1): ")
75
+ expect($stdout).to receive(:print).with('Enter your default region (optional, defaults to nyc1): ')
77
76
  expect($stdin).to receive(:gets).and_return('')
78
- expect($stdout).to receive(:print).with("Enter your default image ID or image slug (optional, defaults to ubuntu-14-04-x64): ")
77
+ expect($stdout).to receive(:print).with('Enter your default image ID or image slug (optional, defaults to ubuntu-14-04-x64): ')
79
78
  expect($stdin).to receive(:gets).and_return('')
80
- expect($stdout).to receive(:print).with("Enter your default size (optional, defaults to 512mb)): ")
79
+ expect($stdout).to receive(:print).with('Enter your default size (optional, defaults to 512mb)): ')
81
80
  expect($stdin).to receive(:gets).and_return('')
82
81
  expect($stdout).to receive(:print).with("Enter your default ssh key IDs (optional, defaults to none, array of IDs of ssh keys eg. ['1234']): ")
83
82
  expect($stdin).to receive(:gets).and_return('')
84
- expect($stdout).to receive(:print).with("Enter your default for private networking (optional, defaults to false): ")
83
+ expect($stdout).to receive(:print).with('Enter your default for private networking (optional, defaults to false): ')
85
84
  expect($stdin).to receive(:gets).and_return('')
86
- expect($stdout).to receive(:print).with("Enter your default for enabling backups (optional, defaults to false): ")
85
+ expect($stdout).to receive(:print).with('Enter your default for enabling backups (optional, defaults to false): ')
87
86
  expect($stdin).to receive(:gets).and_return('')
88
- expect($stdout).to receive(:print).with("Enter your default for IPv6 (optional, defaults to false): ")
87
+ expect($stdout).to receive(:print).with('Enter your default for IPv6 (optional, defaults to false): ')
89
88
  expect($stdin).to receive(:gets).and_return('')
90
89
 
91
- @cli.authorize
90
+ cli.authorize
92
91
 
93
- expect($stdout.string).to include("Note: You can get your Access Token from https://cloud.digitalocean.com/settings/tokens/new")
92
+ expect($stdout.string).to include('Note: You can get your Access Token from https://cloud.digitalocean.com/settings/tokens/new')
94
93
  expect($stdout.string).to include("To retrieve region, image, size and key ID's, you can use the corresponding tugboat command, such as `tugboat images`.")
95
- expect($stdout.string).to include("Defaults can be changed at any time in your ~/.tugboat configuration file.")
94
+ expect($stdout.string).to include('Defaults can be changed at any time in your ~/.tugboat configuration file.')
96
95
 
97
96
  config = YAML.load_file(tmp_path)
98
97
 
99
- expect(config["defaults"]["image"]).to eq "ubuntu-14-04-x64"
100
- expect(config["defaults"]["region"]).to eq "nyc2"
101
- expect(config["defaults"]["size"]).to eq "512mb"
102
- expect(config["ssh"]["ssh_user"]).to eq 'root'
103
- expect(config["ssh"]["ssh_key_path"]).to eq "~/.ssh/id_rsa"
104
- expect(config["ssh"]["ssh_port"]).to eq "22"
105
- expect(config["defaults"]["ssh_key"]).to eq ""
106
- expect(config["defaults"]["private_networking"]).to eq 'false'
107
- expect(config["defaults"]["backups_enabled"]).to eq 'false'
108
- expect(config["defaults"]["ip6"]).to eq 'false'
98
+ expect(config['defaults']['image']).to eq 'ubuntu-14-04-x64'
99
+ expect(config['defaults']['region']).to eq 'nyc2'
100
+ expect(config['defaults']['size']).to eq '512mb'
101
+ expect(config['ssh']['ssh_user']).to eq 'root'
102
+ expect(config['ssh']['ssh_key_path']).to eq '~/.ssh/id_rsa'
103
+ expect(config['ssh']['ssh_port']).to eq '22'
104
+ expect(config['defaults']['ssh_key']).to eq ''
105
+ expect(config['defaults']['private_networking']).to eq 'false'
106
+ expect(config['defaults']['backups_enabled']).to eq 'false'
107
+ expect(config['defaults']['ip6']).to eq 'false'
109
108
  end
110
109
  end
111
-
112
110
  end
113
-