kumo_keisei 1.0.0 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: dc16c5ba072a33ceabf7d6a08a74354fddfb084c
4
- data.tar.gz: c414a847fa90b0504e1627f62937e59271049134
3
+ metadata.gz: 359900941b787e935e12301f79e9689e4c930fd1
4
+ data.tar.gz: 1c4c3bf8d3341f174067f63ff7230ae3595d90c3
5
5
  SHA512:
6
- metadata.gz: 2021c220e17bdad3b627e3c6615da6ebccc53f1c4efe6f9912f49091ab88712d7daa592b60b62cfba4d66b9ce64dfd4198e076946fdd52f678c9bfaab01b8727
7
- data.tar.gz: d0744a8ffe785042e53a54faeff90dbb14a2b2cfc7e2200c523e78fd128cc8b683d81d478600cf68577c6f6510d0430c2666b950b8847d3a1522a7a239c3a499
6
+ metadata.gz: b2f680a64a1f28a6322555182f81345f7aa168216ba60978e20490a9a7bf241bc560ef946747ec4ecbe0265079d60aafcca4e653c30203554d2ce406e1386db0
7
+ data.tar.gz: 5f699f518da44562cd9ca1b004e456d877e038c7a322d78817e78f60c5e9e7f5335e4576ee0e110cbe28c89653ee2c254e06e528e231746b0a94a15552b83b57
data/CHANGELOG.md ADDED
@@ -0,0 +1,7 @@
1
+ # CHANGELOG
2
+
3
+ This file records potentially breaking changes to the API or User Experience.
4
+
5
+ ## Version 2.0.0
6
+
7
+ Destroying a stack now requires user confirmation at the console before the action will be carried out.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.0.0
1
+ 2.0.0
@@ -30,11 +30,11 @@ module KumoKeisei
30
30
  self.new(stack_name, nil).exists?
31
31
  end
32
32
 
33
- def initialize(stack_name, stack_template, stack_params_filepath = nil)
33
+ def initialize(stack_name, stack_template, stack_params_filepath = nil, confirmation_timeout=30)
34
34
  @stack_name = stack_name
35
35
  @stack_template = stack_template
36
36
  @stack_params_filepath = stack_params_filepath
37
-
37
+ @confirmation_timeout = confirmation_timeout
38
38
  flash_message "Stack name: #{stack_name}"
39
39
  end
40
40
 
@@ -51,6 +51,9 @@ module KumoKeisei
51
51
  def destroy!
52
52
  return if get_stack.nil?
53
53
 
54
+ flash_message "Warning! You are about to delete the CloudFormation Stack #{@stack_name}, enter 'yes' to continue."
55
+ return unless ConsoleJockey.get_confirmation(@confirmation_timeout)
56
+
54
57
  wait_until_ready(false)
55
58
  ensure_deleted!
56
59
  end
@@ -1,5 +1,8 @@
1
+ require 'timeout'
2
+
1
3
  module KumoKeisei
2
4
  class ConsoleJockey
5
+
3
6
  def self.flash_message(message)
4
7
  puts "\n"
5
8
  puts "###################=============================------------"
@@ -15,5 +18,18 @@ module KumoKeisei
15
18
 
16
19
  $stdout.flush
17
20
  end
21
+
22
+ def self.get_confirmation(timeout=30)
23
+ begin
24
+ status = Timeout::timeout(timeout) {
25
+ STDIN.gets.chomp
26
+ }
27
+ rescue
28
+ status = false
29
+ end
30
+ proceed = status == "yes"
31
+ proceed ? puts('Proceeding.') : puts('Aborted!')
32
+ proceed
33
+ end
18
34
  end
19
35
  end
@@ -27,12 +27,13 @@ describe KumoKeisei::CloudFormationStack do
27
27
  let(:cf_stack_create_params) do
28
28
  cf_stack_update_params.merge(on_failure: "DELETE")
29
29
  end
30
-
31
- subject(:instance) { KumoKeisei::CloudFormationStack.new(stack_name, stack_template_path, file_params_path) }
30
+ let(:confirmation_timeout) { 0.5 }
31
+ subject(:instance) { KumoKeisei::CloudFormationStack.new(stack_name, stack_template_path, file_params_path, confirmation_timeout) }
32
32
 
33
33
  before do
34
34
  allow(KumoKeisei::ConsoleJockey).to receive(:flash_message)
35
35
  allow(KumoKeisei::ConsoleJockey).to receive(:write_line).and_return(nil)
36
+ allow(KumoKeisei::ConsoleJockey).to receive(:get_confirmation).with(confirmation_timeout).and_return(false)
36
37
  allow(Aws::CloudFormation::Client).to receive(:new).and_return(cloudformation)
37
38
  allow(cloudformation).to receive(:describe_stacks).with({stack_name: stack_name}).and_return(cf_stack)
38
39
  allow(KumoKeisei::ParameterBuilder).to receive(:new).and_return(parameter_builder)
@@ -40,12 +41,21 @@ describe KumoKeisei::CloudFormationStack do
40
41
  end
41
42
 
42
43
  describe "#destroy!" do
44
+ it "notifies the user of what it is about to delete" do
45
+ expect(KumoKeisei::ConsoleJockey).to receive(:flash_message).with("Warning! You are about to delete the CloudFormation Stack #{stack_name}, enter 'yes' to continue.")
46
+ subject.destroy!
47
+ end
43
48
 
44
- it "deletes the stack" do
45
- expect(cloudformation).to receive(:delete_stack).with({stack_name: stack_name}).and_return(cf_stack)
46
- allow(cloudformation).to receive(:wait_until).with(:stack_delete_complete, stack_name: stack_name).and_return(nil)
49
+ it "does delete the stack if the user confirms" do
50
+ expect(KumoKeisei::ConsoleJockey).to receive(:get_confirmation).with(confirmation_timeout).and_return(true)
51
+ expect(cloudformation).to receive(:delete_stack).with({stack_name: stack_name}).and_return(cf_stack)
52
+ allow(cloudformation).to receive(:wait_until).with(:stack_delete_complete, stack_name: stack_name).and_return(nil)
53
+ subject.destroy!
54
+ end
47
55
 
48
- subject.destroy!
56
+ it "does not delete the stack if the the user refuses confirmation" do
57
+ expect(KumoKeisei::ConsoleJockey).to receive(:get_confirmation).with(confirmation_timeout).and_return(false)
58
+ subject.destroy!
49
59
  end
50
60
 
51
61
  end
@@ -0,0 +1,29 @@
1
+ require 'spec_helper'
2
+ require 'ostruct'
3
+
4
+ describe KumoKeisei::ConsoleJockey do
5
+ describe "#get_confirmation" do
6
+ let(:timeout) { 0.5 }
7
+ subject { described_class }
8
+
9
+ context 'no timeout' do
10
+
11
+ it 'returns true if user enters yes' do
12
+ allow(STDIN).to receive(:gets) { 'yes'}
13
+ expect(subject.get_confirmation(timeout)).to be true
14
+ end
15
+
16
+ it 'returns false if user enters anything other than yes' do
17
+ allow(STDIN).to receive(:gets) { 'aoisdjofa'}
18
+ expect(subject.get_confirmation).to be false
19
+ end
20
+ end
21
+
22
+ context 'timeout' do
23
+ it 'returns false if there is a timeout' do
24
+ expect(subject.get_confirmation(timeout)).to be false
25
+ end
26
+ end
27
+
28
+ end
29
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kumo_keisei
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 2.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Redbubble
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-05-13 00:00:00.000000000 Z
11
+ date: 2016-05-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: aws-sdk
@@ -89,6 +89,7 @@ extra_rdoc_files: []
89
89
  files:
90
90
  - ".buildkite/pipeline.yml"
91
91
  - ".gitignore"
92
+ - CHANGELOG.md
92
93
  - Gemfile
93
94
  - LICENSE.txt
94
95
  - README.md
@@ -105,6 +106,7 @@ files:
105
106
  - script/release-gem
106
107
  - script/unit_test.sh
107
108
  - spec/lib/kumo_keisei/cloud_formation_stack_spec.rb
109
+ - spec/lib/kumo_keisei/console_jockey_spec.rb
108
110
  - spec/lib/kumo_keisei/environment_config_spec.rb
109
111
  - spec/lib/kumo_keisei/file_loader_spec.rb
110
112
  - spec/lib/kumo_keisei/parameter_builder_spec.rb
@@ -135,6 +137,7 @@ specification_version: 4
135
137
  summary: A collection of utilities for dealing with AWS Cloud Formation.
136
138
  test_files:
137
139
  - spec/lib/kumo_keisei/cloud_formation_stack_spec.rb
140
+ - spec/lib/kumo_keisei/console_jockey_spec.rb
138
141
  - spec/lib/kumo_keisei/environment_config_spec.rb
139
142
  - spec/lib/kumo_keisei/file_loader_spec.rb
140
143
  - spec/lib/kumo_keisei/parameter_builder_spec.rb