rivet 2.0.0 → 3.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.
Files changed (44) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +1 -0
  3. data/.rubocop.yml +4 -4
  4. data/.travis.yml +5 -5
  5. data/CHANGELOG.md +7 -0
  6. data/Gemfile +4 -2
  7. data/Gemfile.lock +42 -26
  8. data/README.md +61 -10
  9. data/bin/rivet +14 -9
  10. data/example/ec2/defaults.rb +6 -0
  11. data/example/ec2/example.rb +8 -0
  12. data/example/ec2/user_data.erb +2 -0
  13. data/lib/rivet/{autoscale.rb → as/autoscale.rb} +33 -4
  14. data/lib/rivet/{config.rb → as/autoscale_config.rb} +3 -33
  15. data/lib/rivet/{launch_config.rb → as/launch_config.rb} +8 -11
  16. data/lib/rivet/{aws_utils.rb → common/aws_utils.rb} +27 -29
  17. data/lib/rivet/common/base_aws_attributes.rb +15 -0
  18. data/lib/rivet/common/base_config.rb +40 -0
  19. data/lib/rivet/{client.rb → common/client.rb} +11 -10
  20. data/lib/rivet/ec2/ec2.rb +163 -0
  21. data/lib/rivet/ec2/ec2_config.rb +19 -0
  22. data/lib/rivet/utils.rb +4 -3
  23. data/lib/rivet/version.rb +1 -1
  24. data/lib/rivet.rb +16 -11
  25. data/rivet.gemspec +6 -5
  26. data/spec/as/autoscale_config_spec.rb +65 -0
  27. data/spec/{aws_autoscale_wrapper_spec.rb → as/aws_autoscale_wrapper_spec.rb} +1 -1
  28. data/spec/aws_utils_spec.rb +44 -0
  29. data/spec/base_config_spec.rb +31 -0
  30. data/spec/bootstrap_spec.rb +1 -1
  31. data/spec/ec2/ec2_config_spec.rb +29 -0
  32. data/spec/launch_config_spec.rb +1 -1
  33. data/spec/shared_examples/a_config.rb +98 -0
  34. data/spec/shared_examples/a_config_util.rb +33 -0
  35. data/spec/spec_setup.rb +63 -39
  36. data/spec/util_spec.rb +16 -23
  37. metadata +63 -43
  38. data/lib/rivet/deep_merge.rb +0 -29
  39. data/spec/config_spec.rb +0 -168
  40. /data/lib/rivet/{aws_autoscale_wrapper.rb → as/aws_autoscale_wrapper.rb} +0 -0
  41. /data/lib/rivet/{bootstrap.rb → common/bootstrap.rb} +0 -0
  42. /data/lib/rivet/{config_proxy.rb → common/config_proxy.rb} +0 -0
  43. /data/lib/rivet/{logger.rb → common/logger.rb} +0 -0
  44. /data/lib/rivet/{open_state.rb → common/open_state.rb} +0 -0
@@ -0,0 +1,98 @@
1
+ # encoding: UTF-8
2
+
3
+ shared_examples_for "a config" do
4
+ context 'without DSL content' do
5
+ describe '#name' do
6
+ it 'returns the name' do
7
+ default_config.name.should == 'default_unit_test_config'
8
+ end
9
+ end
10
+
11
+ describe '#bootstrap' do
12
+ before do
13
+ default_config.bootstrap.unit_test 'goat simulator'
14
+ end
15
+
16
+ it 'should allow you to set an arbitrary bootstrap value' do
17
+ default_config.bootstrap.unit_test.should == 'goat simulator'
18
+ end
19
+ end
20
+
21
+ describe '#path' do
22
+ context 'with no arguments' do
23
+ it 'returns the default . path' do
24
+ default_config.path.should == '.'
25
+ end
26
+ end
27
+ context 'with an argument' do
28
+ it 'returns the set path joined with the argument' do
29
+ default_config.path('test').should == './test'
30
+ end
31
+ end
32
+ end
33
+
34
+ describe '#normalize_security_groups' do
35
+ before do
36
+ default_config.security_groups %w(group2 group1 group3)
37
+ end
38
+
39
+ it 'should return a sorted array of security groups' do
40
+ default_config.normalize_security_groups.should == %w(group1 group2 group3)
41
+ end
42
+ end
43
+ end
44
+
45
+ context 'with DSL content' do
46
+ describe '#name' do
47
+ it 'returns the name' do
48
+ config.name.should == 'unit_test_config'
49
+ end
50
+ end
51
+
52
+ describe 'generated attributes' do
53
+ it 'should contain all the attributes defined in the DSL CONTENT' do
54
+ dsl_values.each_pair do |k, v|
55
+ # bootstrap is an attribute of the BaseConfig class, not a generated one
56
+ unless k == :bootstrap
57
+ config.generated_attributes.should include(k)
58
+ end
59
+ end
60
+ end
61
+
62
+ it 'should have all values properly set according to the DSL CONTENT' do
63
+ dsl_values.each_pair do |k, v|
64
+ unless k == :bootstrap
65
+ config.send(k).should == eval(v)
66
+ end
67
+ end
68
+ if dsl_values.key? :bootstrap
69
+ dsl_values[:bootstrap].each_pair do |k, v|
70
+ config.bootstrap.send(k).should == eval(v)
71
+ end
72
+ end
73
+ end
74
+ end
75
+ end
76
+
77
+ tempdir_context 'with DSL content inside of a file on disk' do
78
+ before do
79
+ File.open('unit_test.rb', 'w') { |f| f.write(config_content) }
80
+ end
81
+
82
+ describe '::from_file' do
83
+ it 'should have all values properly set according to the DSL CONTENT' do
84
+ dsl_values.each_pair do |k, v|
85
+ unless k == :bootstrap
86
+ config_from_file.send(k).should == eval(v)
87
+ end
88
+ end
89
+ if dsl_values.key? :bootstrap
90
+ dsl_values[:bootstrap].each_pair do |k, v|
91
+ config_from_file.bootstrap.send(k).should == eval(v)
92
+ end
93
+ end
94
+ end
95
+ end
96
+ end
97
+ end
98
+
@@ -0,0 +1,33 @@
1
+ # encoding: UTF-8
2
+
3
+ shared_examples 'a config util' do
4
+ tempdir_context 'with an existing config directory' do
5
+
6
+ before do
7
+ FileUtils.mkdir_p config_dir
8
+ end
9
+
10
+ context 'without an existing configuration' do
11
+ describe '#get_config' do
12
+ it 'should return false' do
13
+ Rivet::Utils.get_config('autoscale','unit_test', config_dir).should be_false
14
+ end
15
+ end
16
+ end
17
+
18
+ context 'with a configuration file' do
19
+ before do
20
+ File.open(config_file, 'w') { |f| f.write(config_content) }
21
+ end
22
+
23
+ describe '#get_config' do
24
+ it 'should return a valid configuration' do
25
+ config = Rivet::Utils.get_config('autoscale', 'unit_test', config_dir)
26
+ valid_config?(config, dsl_values)
27
+ end
28
+ end
29
+ end
30
+
31
+ end
32
+ end
33
+
data/spec/spec_setup.rb CHANGED
@@ -9,62 +9,91 @@ require_relative '../lib/rivet'
9
9
  Rivet::Log.level(Logger::FATAL)
10
10
 
11
11
  module SpecHelpers
12
+
13
+ def self.generate_config_content(values)
14
+ values.inject(String.new) do |a, (k, v)|
15
+ if k == :bootstrap
16
+ v.each_pair do |bootstrap_attr, bootstrap_value|
17
+ a << "bootstrap.#{bootstrap_attr} #{bootstrap_value}\n"
18
+ end
19
+ else
20
+ a << "#{k} #{v}\n"
21
+ end
22
+ a
23
+ end
24
+ end
25
+
12
26
  AUTOSCALE_DIR = File.join('.', 'autoscale')
13
- CONFIG_FILE = File.join(AUTOSCALE_DIR, 'unit_test.rb')
27
+ ASG_CONFIG_FILE = File.join(AUTOSCALE_DIR, 'unit_test.rb')
28
+ EC2_DIR = File.join('.', 'ec2')
29
+ EC2_CONFIG_FILE = File.join(EC2_DIR, 'unit_test.rb')
30
+
14
31
  TEMPLATE_FILE = File.join(AUTOSCALE_DIR, 'default.erb')
15
32
  BOOTSTRAP_TEMPLATE = '<%= "bar" %>'\
16
33
 
17
- DSL_VALUES = {
34
+ COMMON_DSL_VALUES = {
35
+ :iam_instance_profile => "'ec2_unit_test_profile'",
36
+ :block_device_mappings => "[{:device_name => '/dev/sda1', :virtual_name => 'ephemeral0'}]",
37
+ :placement_group => "'unit test placement group'",
38
+ :image_id => "'ami-12345678'",
39
+ :key_name => "'UnitTests'",
40
+ :security_groups => '%w(unit_test3 unit_tests1 unit_tests2)',
41
+ :instance_type => "'m1.large'",
42
+ :kernel_id => "'aki-12345678'",
43
+ :ramdisk_id => "'ari-12345678'",
44
+ :associate_public_ip_address => 'false'
45
+ }
46
+
47
+ EC2_DSL_VALUES = {
48
+ :count => '1',
49
+ :monitoring_enabled => 'true',
50
+ :availability_zone => "'a'",
51
+ :placement_group => "'unit test placement group'",
52
+ :key_pair => "''",
53
+ :security_group_ids => '%w(sg-12345678 sg-01234567 sg-801234567)',
54
+ :user_data => "'ec2 user data'",
55
+ :disable_api_termination => 'false',
56
+ :instance_initiated_shutdown_behavior => "'Stop'",
57
+ :subnet => "'subnet-4292a736'",
58
+ :private_ip_address => "'10.129.64.2'",
59
+ :dedicated_tenancy => 'false',
60
+ :ebs_optimized => 'false',
61
+ }.merge(COMMON_DSL_VALUES)
62
+
63
+ ASG_DSL_VALUES = {
18
64
  :min_size => '1',
19
65
  :desired_capacity => '1',
20
66
  :max_size => '3',
21
67
  :region => "'us-west-2'",
22
68
  :availability_zones => '%w(b c a)',
23
- :key_name => "'UnitTests'",
24
- :instance_type => "'m1.large'",
25
- :security_groups => '%w(unit_test3 unit_tests1 unit_tests2)',
26
- :image_id => "'ami-12345678'",
27
- :iam_instance_profile => "'unit_test_profile'",
28
69
  :default_cooldown => '300',
29
- :placement_group => "'unit test placement group'",
30
70
  :health_check_type => ':ec2',
31
71
  :termination_policies => '%w(policy2 policy1)',
32
72
  :load_balancers => '%w(balancer2 balancer1)',
33
73
  :health_check_grace_period => '100',
34
- :associate_public_ip_address => 'true',
35
74
  :detailed_instance_monitoring => 'true',
36
- :block_device_mappings => "[{:device_name => '/dev/sda1', :virtual_name => 'ephemeral0'}]",
37
- :kernel_id => "'aki-12345678'",
38
- :ramdisk_id => "'ari-12345678'",
39
75
  :spot_price => "'0.01'",
40
76
  :bootstrap => {
41
77
  :template => "'#{TEMPLATE_FILE}'",
42
78
  :foo => "'bar'"
43
79
  }
44
- }
45
- DSL_CONFIG_CONTENT = DSL_VALUES.inject(String.new) do |a, (k, v)|
46
- if k == :bootstrap
47
- v.each_pair do |bootstrap_attr, bootstrap_value|
48
- a << "bootstrap.#{bootstrap_attr} #{bootstrap_value}\n"
49
- end
50
- else
51
- a << "#{k} #{v}\n"
52
- end
53
- a
54
- end
80
+ }.merge(COMMON_DSL_VALUES)
81
+
82
+ ASG_CONFIG_CONTENT = generate_config_content ASG_DSL_VALUES
83
+ EC2_CONFIG_CONTENT = generate_config_content EC2_DSL_VALUES
55
84
 
56
85
  AUTOSCALE_IDENTITY_STRING = "bootstrap#{Base64.encode64('unit_test_user_data')}"\
57
- "iam_instance_profile#{Base64.encode64(eval(DSL_VALUES[:iam_instance_profile]))}"\
58
- "image_id#{Base64.encode64(eval(DSL_VALUES[:image_id]))}"\
59
- "instance_type#{Base64.encode64(eval(DSL_VALUES[:instance_type]))}"\
60
- "key_name#{Base64.encode64(eval(DSL_VALUES[:key_name]))}"\
61
- "security_groups#{Base64.encode64(eval(DSL_VALUES[:security_groups]).join("\t"))}"\
62
- "associate_public_ip_address#{Base64.encode64(eval(DSL_VALUES[:associate_public_ip_address]).to_s)}"\
63
- "detailed_instance_monitoring#{Base64.encode64(eval(DSL_VALUES[:detailed_instance_monitoring]).to_s)}"\
64
- "block_device_mappings#{Base64.encode64(eval(DSL_VALUES[:block_device_mappings]).join("\t"))}"\
65
- "kernel_id#{Base64.encode64(eval(DSL_VALUES[:kernel_id]))}"\
66
- "ramdisk_id#{Base64.encode64(eval(DSL_VALUES[:ramdisk_id]))}"\
67
- "spot_price#{Base64.encode64(eval(DSL_VALUES[:spot_price]))}"
86
+ "detailed_instance_monitoring#{Base64.encode64(eval(ASG_DSL_VALUES[:detailed_instance_monitoring]).to_s)}"\
87
+ "spot_price#{Base64.encode64(eval(ASG_DSL_VALUES[:spot_price]))}" \
88
+ "iam_instance_profile#{Base64.encode64(eval(ASG_DSL_VALUES[:iam_instance_profile]))}"\
89
+ "block_device_mappings#{Base64.encode64(eval(ASG_DSL_VALUES[:block_device_mappings]).join("\t"))}"\
90
+ "image_id#{Base64.encode64(eval(ASG_DSL_VALUES[:image_id]))}"\
91
+ "key_name#{Base64.encode64(eval(ASG_DSL_VALUES[:key_name]))}"\
92
+ "security_groups#{Base64.encode64(eval(ASG_DSL_VALUES[:security_groups]).join("\t"))}"\
93
+ "instance_type#{Base64.encode64(eval(ASG_DSL_VALUES[:instance_type]))}"\
94
+ "kernel_id#{Base64.encode64(eval(ASG_DSL_VALUES[:kernel_id]))}"\
95
+ "ramdisk_id#{Base64.encode64(eval(ASG_DSL_VALUES[:ramdisk_id]))}"\
96
+ "associate_public_ip_address#{Base64.encode64(eval(ASG_DSL_VALUES[:associate_public_ip_address]).to_s)}"
68
97
 
69
98
  def tempdir_context(name, &block)
70
99
  context name do
@@ -83,11 +112,6 @@ module SpecHelpers
83
112
  end
84
113
  end
85
114
 
86
- def dsl_from_hash(hash)
87
-
88
-
89
- end
90
-
91
115
  def generate_config_mock(mock, attrs)
92
116
  attrs.each_pair do |a, v|
93
117
  if v.respond_to? :each_pair
data/spec/util_spec.rb CHANGED
@@ -1,34 +1,27 @@
1
1
  # encoding: UTF-8
2
2
  require_relative './spec_setup'
3
+ require_relative './shared_examples/a_config_util'
3
4
 
4
5
  include SpecHelpers
5
6
 
6
- describe 'rivet utils' do
7
- tempdir_context 'with an autoscale directory' do
8
- before do
9
- FileUtils.mkdir_p AUTOSCALE_DIR
10
- end
7
+ describe "rivet utils" do
8
+ context "with client_type set to autoscale" do
11
9
 
12
- context 'without an existing configuration' do
13
- describe '#get_config' do
14
- it 'should return false' do
15
- Rivet::Utils.get_config('unit_test', AUTOSCALE_DIR).should be_false
16
- end
17
- end
18
- end
10
+ let(:config_dir) { AUTOSCALE_DIR }
11
+ let(:config_content) { ASG_CONFIG_CONTENT }
12
+ let(:config_file) { ASG_CONFIG_FILE }
13
+ let(:dsl_values) { ASG_DSL_VALUES }
19
14
 
20
- context 'with a configuration file' do
21
- before do
22
- File.open(CONFIG_FILE, 'w') { |f| f.write(DSL_CONFIG_CONTENT) }
23
- end
15
+ it_behaves_like "a config util"
16
+ end
24
17
 
25
- describe '#get_config' do
26
- it 'should return a valid configuration' do
27
- config = Rivet::Utils.get_config('unit_test', AUTOSCALE_DIR)
28
- valid_config?(config, DSL_VALUES)
29
- end
30
- end
31
- end
18
+ context "with client_type set to ec2" do
19
+ let(:config_dir) { EC2_DIR }
20
+ let(:config_content) { EC2_CONFIG_CONTENT }
21
+ let(:config_file) { EC2_CONFIG_FILE }
22
+ let(:dsl_values) { EC2_DSL_VALUES }
32
23
 
24
+ it_behaves_like "a config util"
33
25
  end
26
+
34
27
  end
metadata CHANGED
@@ -1,78 +1,83 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rivet
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0
5
- prerelease:
4
+ version: 3.0.0
6
5
  platform: ruby
7
6
  authors:
8
7
  - Brian Bianco
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2014-06-24 00:00:00.000000000 Z
11
+ date: 2014-12-01 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: aws-sdk
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
- - - ! '>='
17
+ - - ">="
20
18
  - !ruby/object:Gem::Version
21
19
  version: 1.11.1
22
20
  type: :runtime
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
- - - ! '>='
24
+ - - ">="
28
25
  - !ruby/object:Gem::Version
29
26
  version: 1.11.1
27
+ - !ruby/object:Gem::Dependency
28
+ name: diff-lcs
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: 1.2.5
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: 1.2.5
30
41
  - !ruby/object:Gem::Dependency
31
42
  name: pry
32
43
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
44
  requirements:
35
- - - ~>
45
+ - - "~>"
36
46
  - !ruby/object:Gem::Version
37
47
  version: 0.9.12
38
48
  type: :development
39
49
  prerelease: false
40
50
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
51
  requirements:
43
- - - ~>
52
+ - - "~>"
44
53
  - !ruby/object:Gem::Version
45
54
  version: 0.9.12
46
55
  - !ruby/object:Gem::Dependency
47
56
  name: rake
48
57
  requirement: !ruby/object:Gem::Requirement
49
- none: false
50
58
  requirements:
51
- - - ! '>='
59
+ - - ">="
52
60
  - !ruby/object:Gem::Version
53
61
  version: 10.1.0
54
62
  type: :development
55
63
  prerelease: false
56
64
  version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
65
  requirements:
59
- - - ! '>='
66
+ - - ">="
60
67
  - !ruby/object:Gem::Version
61
68
  version: 10.1.0
62
69
  - !ruby/object:Gem::Dependency
63
70
  name: rspec
64
71
  requirement: !ruby/object:Gem::Requirement
65
- none: false
66
72
  requirements:
67
- - - ~>
73
+ - - "~>"
68
74
  - !ruby/object:Gem::Version
69
75
  version: 2.14.1
70
76
  type: :development
71
77
  prerelease: false
72
78
  version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
79
  requirements:
75
- - - ~>
80
+ - - "~>"
76
81
  - !ruby/object:Gem::Version
77
82
  version: 2.14.1
78
83
  description: Rivet allows you to define autoscaling groups and launch configurations
@@ -84,9 +89,9 @@ executables:
84
89
  extensions: []
85
90
  extra_rdoc_files: []
86
91
  files:
87
- - .gitignore
88
- - .rubocop.yml
89
- - .travis.yml
92
+ - ".gitignore"
93
+ - ".rubocop.yml"
94
+ - ".travis.yml"
90
95
  - CHANGELOG.md
91
96
  - Gemfile
92
97
  - Gemfile.lock
@@ -97,60 +102,75 @@ files:
97
102
  - bin/rivet
98
103
  - example/autoscale/defaults.rb
99
104
  - example/autoscale/example_group.rb
105
+ - example/ec2/defaults.rb
106
+ - example/ec2/example.rb
107
+ - example/ec2/user_data.erb
100
108
  - lib/rivet.rb
101
- - lib/rivet/autoscale.rb
102
- - lib/rivet/aws_autoscale_wrapper.rb
103
- - lib/rivet/aws_utils.rb
104
- - lib/rivet/bootstrap.rb
105
- - lib/rivet/client.rb
106
- - lib/rivet/config.rb
107
- - lib/rivet/config_proxy.rb
108
- - lib/rivet/deep_merge.rb
109
- - lib/rivet/launch_config.rb
110
- - lib/rivet/logger.rb
111
- - lib/rivet/open_state.rb
109
+ - lib/rivet/as/autoscale.rb
110
+ - lib/rivet/as/autoscale_config.rb
111
+ - lib/rivet/as/aws_autoscale_wrapper.rb
112
+ - lib/rivet/as/launch_config.rb
113
+ - lib/rivet/common/aws_utils.rb
114
+ - lib/rivet/common/base_aws_attributes.rb
115
+ - lib/rivet/common/base_config.rb
116
+ - lib/rivet/common/bootstrap.rb
117
+ - lib/rivet/common/client.rb
118
+ - lib/rivet/common/config_proxy.rb
119
+ - lib/rivet/common/logger.rb
120
+ - lib/rivet/common/open_state.rb
121
+ - lib/rivet/ec2/ec2.rb
122
+ - lib/rivet/ec2/ec2_config.rb
112
123
  - lib/rivet/utils.rb
113
124
  - lib/rivet/version.rb
114
125
  - rivet.gemspec
115
- - spec/aws_autoscale_wrapper_spec.rb
126
+ - spec/as/autoscale_config_spec.rb
127
+ - spec/as/aws_autoscale_wrapper_spec.rb
128
+ - spec/aws_utils_spec.rb
129
+ - spec/base_config_spec.rb
116
130
  - spec/bootstrap_spec.rb
117
131
  - spec/config_proxy_spec.rb
118
- - spec/config_spec.rb
132
+ - spec/ec2/ec2_config_spec.rb
119
133
  - spec/launch_config_spec.rb
120
134
  - spec/open_state_spec.rb
135
+ - spec/shared_examples/a_config.rb
136
+ - spec/shared_examples/a_config_util.rb
121
137
  - spec/spec_setup.rb
122
138
  - spec/util_spec.rb
123
139
  homepage: http://www.github.com/brianbianco/rivet
124
140
  licenses:
125
141
  - Apache2
142
+ metadata: {}
126
143
  post_install_message:
127
144
  rdoc_options: []
128
145
  require_paths:
129
146
  - lib
130
147
  required_ruby_version: !ruby/object:Gem::Requirement
131
- none: false
132
148
  requirements:
133
- - - ! '>='
149
+ - - ">="
134
150
  - !ruby/object:Gem::Version
135
151
  version: 1.9.1
136
152
  required_rubygems_version: !ruby/object:Gem::Requirement
137
- none: false
138
153
  requirements:
139
- - - ! '>='
154
+ - - ">="
140
155
  - !ruby/object:Gem::Version
141
156
  version: 1.3.6
142
157
  requirements: []
143
158
  rubyforge_project:
144
- rubygems_version: 1.8.23
159
+ rubygems_version: 2.4.2
145
160
  signing_key:
146
- specification_version: 3
161
+ specification_version: 4
147
162
  summary: A tool for managing autoscaling groups
148
163
  test_files:
149
- - spec/aws_autoscale_wrapper_spec.rb
164
+ - spec/as/autoscale_config_spec.rb
165
+ - spec/as/aws_autoscale_wrapper_spec.rb
166
+ - spec/aws_utils_spec.rb
167
+ - spec/base_config_spec.rb
150
168
  - spec/bootstrap_spec.rb
151
169
  - spec/config_proxy_spec.rb
152
- - spec/config_spec.rb
170
+ - spec/ec2/ec2_config_spec.rb
153
171
  - spec/launch_config_spec.rb
154
172
  - spec/open_state_spec.rb
173
+ - spec/shared_examples/a_config.rb
174
+ - spec/shared_examples/a_config_util.rb
155
175
  - spec/spec_setup.rb
156
176
  - spec/util_spec.rb
@@ -1,29 +0,0 @@
1
- # encoding: UTF-8
2
-
3
- class Hash
4
- # Returns a new hash with +self+ and +other_hash+ merged recursively.
5
- #
6
- # h1 = { x: { y: [4,5,6] }, z: [7,8,9] }
7
- # h2 = { x: { y: [7,8,9] }, z: 'xyz' }
8
- #
9
- # h1.deep_merge(h2) #=> {x: {y: [7, 8, 9]}, z: "xyz"}
10
- # h2.deep_merge(h1) #=> {x: {y: [4, 5, 6]}, z: [7, 8, 9]}
11
- # h1.deep_merge(h2) { |key, old, new| Array.wrap(old) + Array.wrap(new) }
12
- # #=> {:x=>{:y=>[4, 5, 6, 7, 8, 9]}, :z=>[7, 8, 9, "xyz"]}
13
- def deep_merge(other_hash, &block)
14
- dup.deep_merge!(other_hash, &block)
15
- end
16
-
17
- # Same as +deep_merge+, but modifies +self+.
18
- def deep_merge!(other_hash, &block)
19
- other_hash.each_pair do |k, v|
20
- tv = self[k]
21
- if tv.is_a?(Hash) && v.is_a?(Hash)
22
- self[k] = tv.deep_merge(v, &block)
23
- else
24
- self[k] = block && tv ? block.call(k, tv, v) : v
25
- end
26
- end
27
- self
28
- end
29
- end