rspec-terraform 0.1.0.pre.21 → 0.1.0.pre.24

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d3a1d7d419c7e13ea95d8cf7b04ffe5183aa1cfce3d48e3027609b061416e640
4
- data.tar.gz: 1f33098b03b9cba5294b2894f691d55d26f666185d1d6e9a748345a0fc383080
3
+ metadata.gz: 0d7a8abc81671eea02a2fd4f6d3b4f8a3060eca51d50c70ebb76c3b0c064b027
4
+ data.tar.gz: c423cb560f674bc848cea3fcfdd57ef21e41742bc2a86e0db74755ec0c86c8d4
5
5
  SHA512:
6
- metadata.gz: f3dedee60ba29285bc292f263791cd117cff0adff0b092042f6774d321a9eba268431d601ce2cf7d39688c50777c342cde6ab4b20f6ac5603ad7eb3bbe665afa
7
- data.tar.gz: 52fe2ac848e6e1d0d5e4677731dcd51db1483d2119966157d7d854ab73f1d2acd676f5412c4bb051ab740d77e9927c3d3e5bbf14bd756dc331853e1a93b13e09
6
+ metadata.gz: 9623a90a33ba6cd9f7948e3856c3954ef822a9eb94bdd48d44126b467985071e4a27654c1d8848168586a9ead4668d6e407e656163c5b1330500eb48e04c1eec
7
+ data.tar.gz: 0f4766cda2dd7a4fe0335094e155f5731d215b25dde91d135777546839859a82377833485ef0b8459dd32a77b9cf705d3934fa14bd3d2b330273d4895d944782
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- rspec-terraform (0.1.0.pre.21)
4
+ rspec-terraform (0.1.0.pre.24)
5
5
  rspec (>= 3.0)
6
6
  ruby-terraform (= 1.7.0.pre.13)
7
7
 
@@ -17,29 +17,36 @@ module RSpec
17
17
  end
18
18
 
19
19
  def merge_accumulating_maps(left, right)
20
- left_vars = left[:vars] || {}
21
- right_vars = right[:vars] || {}
22
- vars = left_vars.merge(right_vars)
23
-
24
- merged = {}
25
- unless left_vars == {} && right_vars == {}
26
- merged = merged.merge(vars: vars)
20
+ %i[vars backend_config].inject({}) do |merged, parameter|
21
+ merge_accumulating_map(parameter, merged, left, right)
27
22
  end
23
+ end
24
+
25
+ def merge_accumulating_map(parameter, accumulator, left, right)
26
+ left_value = left[parameter] || {}
27
+ right_value = right[parameter] || {}
28
+ merged_value = left_value.merge(right_value)
29
+
30
+ return accumulator if merged_value == {}
28
31
 
29
- merged
32
+ accumulator.merge(parameter => merged_value)
30
33
  end
31
34
 
32
35
  def merge_accumulating_lists(left, right)
33
- left_var_files = left[:var_files] || []
34
- right_var_files = right[:var_files] || []
35
- var_files = left_var_files + right_var_files
36
-
37
- merged = {}
38
- unless left_var_files == [] && right_var_files == []
39
- merged = merged.merge(var_files: var_files)
36
+ %i[var_files targets replaces plugin_dirs platforms]
37
+ .inject({}) do |merged, parameter|
38
+ merge_accumulating_list(parameter, merged, left, right)
40
39
  end
40
+ end
41
+
42
+ def merge_accumulating_list(parameter, accumulator, left, right)
43
+ left_value = left[parameter] || []
44
+ right_value = right[parameter] || []
45
+ merged_value = left_value + right_value
46
+
47
+ return accumulator if merged_value == []
41
48
 
42
- merged
49
+ accumulator.merge(parameter => merged_value)
43
50
  end
44
51
  end
45
52
  end
@@ -0,0 +1,39 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RSpec
4
+ module Terraform
5
+ module Configuration
6
+ class VarCaptor
7
+ def initialize(vars)
8
+ @vars = vars
9
+ end
10
+
11
+ def method_missing(method, *args, &_)
12
+ if method.to_s =~ /.*=$/
13
+ set_var(method.to_s.chop.to_sym, args[0])
14
+ else
15
+ read_var(method)
16
+ end
17
+ end
18
+
19
+ def respond_to_missing?
20
+ true
21
+ end
22
+
23
+ def to_h
24
+ @vars
25
+ end
26
+
27
+ private
28
+
29
+ def set_var(var, value)
30
+ @vars[var] = value
31
+ end
32
+
33
+ def read_var(var)
34
+ @vars[var]
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
@@ -2,6 +2,7 @@
2
2
 
3
3
  require_relative 'configuration/providers'
4
4
  require_relative 'configuration/merger'
5
+ require_relative 'configuration/var_captor'
5
6
 
6
7
  module RSpec
7
8
  module Terraform
@@ -2,6 +2,8 @@
2
2
 
3
3
  require 'ruby_terraform'
4
4
 
5
+ require_relative '../configuration/var_captor'
6
+
5
7
  module RSpec
6
8
  module Terraform
7
9
  module Helpers
@@ -14,20 +16,55 @@ module RSpec
14
16
  configuration_provider || Configuration.identity_provider
15
17
  end
16
18
 
17
- def execute
18
- parameters = configuration_provider.resolve(overrides)
19
- parameters = parameters.merge(
19
+ def execute(&block)
20
+ parameters = with_configuration_provider_parameters(overrides)
21
+ parameters = with_resolved_vars(parameters, &block)
22
+ parameters = with_mandatory_parameters(parameters)
23
+
24
+ ensure_required_parameters(parameters)
25
+
26
+ init(parameters)
27
+ apply(parameters)
28
+ end
29
+
30
+ private
31
+
32
+ def with_configuration_provider_parameters(parameters)
33
+ configuration_provider.resolve(parameters)
34
+ end
35
+
36
+ def with_resolved_vars(parameters, &block)
37
+ return parameters unless block_given?
38
+
39
+ var_captor = Configuration::VarCaptor.new(parameters[:vars] || {})
40
+ block.call(var_captor)
41
+ parameters.merge(vars: var_captor.to_h)
42
+ end
43
+
44
+ def with_mandatory_parameters(parameters)
45
+ parameters.merge(
20
46
  input: false,
21
47
  auto_approve: true
22
48
  )
49
+ end
23
50
 
24
- do_apply(parameters)
51
+ def ensure_required_parameters(parameters)
52
+ return if parameters[:configuration_directory]
53
+
54
+ throw StandardError.new(
55
+ 'No Terraform configuration directory specified.'
56
+ )
25
57
  end
26
58
 
27
- private
59
+ def init(parameters)
60
+ init_command.execute(
61
+ chdir: parameters[:configuration_directory],
62
+ input: parameters[:input]
63
+ )
64
+ end
28
65
 
29
- def do_apply(parameters)
30
- RubyTerraform.apply(
66
+ def apply(parameters)
67
+ apply_command.execute(
31
68
  chdir: parameters[:configuration_directory],
32
69
  state: parameters[:state_file],
33
70
  vars: parameters[:vars],
@@ -35,6 +72,18 @@ module RSpec
35
72
  auto_approve: parameters[:auto_approve]
36
73
  )
37
74
  end
75
+
76
+ def init_command
77
+ RubyTerraform::Commands::Init.new(
78
+ binary: RSpec.configuration.terraform_binary
79
+ )
80
+ end
81
+
82
+ def apply_command
83
+ RubyTerraform::Commands::Apply.new(
84
+ binary: RSpec.configuration.terraform_binary
85
+ )
86
+ end
38
87
  end
39
88
  end
40
89
  end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module RSpec
4
4
  module Terraform
5
- VERSION = '0.1.0.pre.21'
5
+ VERSION = '0.1.0.pre.24'
6
6
  end
7
7
  end
@@ -10,4 +10,7 @@ require_relative 'terraform/helpers'
10
10
 
11
11
  RSpec.configure do |config|
12
12
  config.include(RSpec::Terraform::Matchers)
13
+
14
+ config.add_setting(:terraform_binary, default: 'terraform')
15
+ config.add_setting(:terraform_execution_mode, default: :in_place)
13
16
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rspec-terraform
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0.pre.21
4
+ version: 0.1.0.pre.24
5
5
  platform: ruby
6
6
  authors:
7
7
  - InfraBlocks Maintainers
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-08-18 00:00:00.000000000 Z
11
+ date: 2022-08-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rspec
@@ -284,6 +284,7 @@ files:
284
284
  - lib/rspec/terraform/configuration/providers.rb
285
285
  - lib/rspec/terraform/configuration/providers/identity.rb
286
286
  - lib/rspec/terraform/configuration/providers/in_memory.rb
287
+ - lib/rspec/terraform/configuration/var_captor.rb
287
288
  - lib/rspec/terraform/helpers.rb
288
289
  - lib/rspec/terraform/helpers/apply.rb
289
290
  - lib/rspec/terraform/matchers.rb