ruby-terraform 1.8.0.pre.7 → 1.8.0.pre.8

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
  SHA256:
3
- metadata.gz: 36fc9d207f09fd5b4f339dc3457ba9c6fe8e6a62fa378402737e50818011356d
4
- data.tar.gz: e02c7b49ad9c7dc67340b783ccfe0ed2c7069a04f992d62d432d3a78386a42c8
3
+ metadata.gz: 908fc48e01d74bb56dfb1f87a6c644745e6e2cb20fc54e12b1d7a6b1faf6c246
4
+ data.tar.gz: 93f6b5277831d620241132bed8ace26fb817fa1ee7d65f4b44b915de3f7c334d
5
5
  SHA512:
6
- metadata.gz: 909dc06efb67d6d83ca2f1e4b26445d80beb3b8af6f8ec52ac9abb5391344ab21e2248237b97bfaa6e45ef23f850a0a670d6f11e773dbffcbf06047a7a0df8cf
7
- data.tar.gz: b832fd4404b1f34e4377569c740d7a451040064160f4d440599f087aee8316f0a4cc4a416a1c70540bcade21cae362161bc8f4ad7fc8446280d21f6916ae7f19
6
+ metadata.gz: 1cac9d3ce236f366ca205e24fd7706866278d04af7dd8b281d887848a0b0a8d1535756045fb45753e572d9c9999a6105f7f54cb888e94a683dbc4840f49fe34b
7
+ data.tar.gz: d4eb8e29739ac35a4a75de7ebbf18ca36f321965676be132e5cf51a9e3548d7aa19263c682ce0c8affba89b74900bef847650858af71652e84438cfae86d6d42
data/Gemfile.lock CHANGED
@@ -1,9 +1,9 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- ruby-terraform (1.8.0.pre.7)
4
+ ruby-terraform (1.8.0.pre.8)
5
5
  immutable-struct (~> 2.4)
6
- lino (= 3.2.0.pre.7)
6
+ lino (= 3.2.0.pre.9)
7
7
 
8
8
  GEM
9
9
  remote: https://rubygems.org/
@@ -31,7 +31,7 @@ GEM
31
31
  diff-lcs (1.5.1)
32
32
  docile (1.4.0)
33
33
  drb (2.2.1)
34
- excon (0.110.0)
34
+ excon (0.111.0)
35
35
  faker (3.4.1)
36
36
  i18n (>= 1.8.11, < 2)
37
37
  faraday (2.10.0)
@@ -66,7 +66,7 @@ GEM
66
66
  immutable-struct (2.4.1)
67
67
  json (2.7.2)
68
68
  language_server-protocol (3.17.0.3)
69
- lino (3.2.0.pre.7)
69
+ lino (3.2.0.pre.9)
70
70
  childprocess (~> 5.0.0)
71
71
  hamster (~> 3.0)
72
72
  open4 (~> 1.3)
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'lino'
4
+ require 'tempfile'
4
5
 
5
6
  require_relative '../errors'
6
7
 
@@ -12,12 +13,12 @@ module RubyTerraform
12
13
  # Constructs an instance of the command.
13
14
  #
14
15
  def initialize(opts = {})
15
- @binary = opts[:binary] || RubyTerraform.configuration.binary
16
- @logger = opts[:logger] || RubyTerraform.configuration.logger
16
+ @binary = opts[:binary] || RubyTerraform.configuration.binary
17
+ @logger = opts[:logger] || RubyTerraform.configuration.logger
17
18
  @options = opts[:options] || RubyTerraform.configuration.options
18
- @stdin = opts[:stdin] || RubyTerraform.configuration.stdin
19
- @stdout = opts[:stdout] || RubyTerraform.configuration.stdout
20
- @stderr = opts[:stderr] || RubyTerraform.configuration.stderr
19
+ @stdin = opts[:stdin] || RubyTerraform.configuration.stdin
20
+ @stdout = opts[:stdout] || RubyTerraform.configuration.stdout
21
+ @stderr = opts[:stderr] || RubyTerraform.configuration.stderr
21
22
  end
22
23
 
23
24
  # rubocop:enable Metrics/AbcSize
@@ -32,30 +33,24 @@ module RubyTerraform
32
33
  # @option invocation_options [Hash<String, String>] :environment A map
33
34
  # of environment variables to expose at command invocation time.
34
35
  def execute(parameters = {}, invocation_options = {})
36
+ parameters = resolve_parameters(parameters)
37
+ invocation_options = resolve_invocation_options(invocation_options)
38
+
35
39
  do_before(parameters)
36
- build_and_execute_command(parameters, invocation_options)
40
+ result = build_and_execute_command(parameters, invocation_options)
37
41
  do_after(parameters)
42
+
43
+ prepare_result(result, parameters, invocation_options)
38
44
  rescue Lino::Errors::ExecutionError
39
45
  message = "Failed while running '#{command_name}'."
40
46
  logger.error(message)
41
47
  raise Errors::ExecutionError, message
42
48
  end
43
49
 
44
- protected
50
+ private
45
51
 
46
52
  attr_reader :binary, :logger, :stdin, :stdout, :stderr
47
53
 
48
- def build_and_execute_command(parameters, invocation_options)
49
- command = build_command(parameters, invocation_options)
50
-
51
- logger.debug("Running '#{command}'.")
52
- command.execute(
53
- stdin:,
54
- stdout:,
55
- stderr:
56
- )
57
- end
58
-
59
54
  def command_name
60
55
  self.class.to_s.split('::')[-1].downcase
61
56
  end
@@ -64,11 +59,7 @@ module RubyTerraform
64
59
 
65
60
  def do_after(_parameters); end
66
61
 
67
- private
68
-
69
62
  def build_command(parameters, invocation_options)
70
- parameters = resolve_parameters(parameters)
71
-
72
63
  Lino::CommandLineBuilder
73
64
  .for_command(@binary)
74
65
  .with_environment_variables(invocation_options[:environment] || {})
@@ -80,10 +71,8 @@ module RubyTerraform
80
71
  .build
81
72
  end
82
73
 
83
- def resolve_parameters(parameters)
84
- parameter_defaults(parameters)
85
- .merge(parameters)
86
- .merge(parameter_overrides(parameters))
74
+ def process_result(result, _parameters, _invocation_options)
75
+ result
87
76
  end
88
77
 
89
78
  def parameter_defaults(_parameters)
@@ -94,6 +83,10 @@ module RubyTerraform
94
83
  {}
95
84
  end
96
85
 
86
+ def invocation_option_defaults(_invocation_options)
87
+ { capture: [], result: :processed }
88
+ end
89
+
97
90
  def subcommands
98
91
  []
99
92
  end
@@ -105,6 +98,59 @@ module RubyTerraform
105
98
  def arguments(_parameters)
106
99
  []
107
100
  end
101
+
102
+ def build_and_execute_command(parameters, invocation_options)
103
+ command = build_command(parameters, invocation_options)
104
+ stdout = resolve_stdout(invocation_options)
105
+ stderr = resolve_stderr(invocation_options)
106
+
107
+ logger.debug("Running '#{command}'.")
108
+ command.execute(stdin:, stdout:, stderr:)
109
+
110
+ process_streams(invocation_options, stdout, stderr)
111
+ end
112
+
113
+ def resolve_parameters(parameters)
114
+ parameter_defaults(parameters)
115
+ .merge(parameters)
116
+ .merge(parameter_overrides(parameters))
117
+ end
118
+
119
+ def resolve_invocation_options(invocation_options)
120
+ invocation_option_defaults(invocation_options)
121
+ .merge(invocation_options)
122
+ end
123
+
124
+ def resolve_stdout(invocation_options)
125
+ invocation_options[:capture].include?(:stdout) ? Tempfile.new : @stdout
126
+ end
127
+
128
+ def resolve_stderr(invocation_options)
129
+ invocation_options[:capture].include?(:stderr) ? Tempfile.new : @stderr
130
+ end
131
+
132
+ def process_streams(invocation_options, stdout, stderr)
133
+ cap = invocation_options[:capture]
134
+
135
+ return nil if cap == []
136
+
137
+ result = {}
138
+ result = add_contents_to_result(cap, result, :stdout, stdout, :output)
139
+ add_contents_to_result(cap, result, :stderr, stderr, :error)
140
+ end
141
+
142
+ def add_contents_to_result(capture, result, stream_name, stream, type)
143
+ return result unless capture.include?(stream_name)
144
+
145
+ stream.rewind
146
+ result.merge({ type => stream.read })
147
+ end
148
+
149
+ def prepare_result(result, parameters, invocation_options)
150
+ return result if invocation_options[:result] == :raw
151
+
152
+ process_result(result, parameters, invocation_options)
153
+ end
108
154
  end
109
155
  end
110
156
  end
@@ -42,8 +42,8 @@ module RubyTerraform
42
42
  include RubyTerraform::Options::Global
43
43
 
44
44
  # @!visibility private
45
- def stdout
46
- @stdout.respond_to?(:string) ? @stdout : (@stdout = StringIO.new)
45
+ def invocation_option_defaults(invocation_options)
46
+ super.merge(capture: [:stdout])
47
47
  end
48
48
 
49
49
  # @!visibility private
@@ -67,9 +67,8 @@ module RubyTerraform
67
67
  end
68
68
 
69
69
  # @!visibility private
70
- def do_after(parameters)
71
- result = stdout.string
72
- parameters[:name] ? result.chomp : result
70
+ def process_result(result, parameters, _invocation_options)
71
+ parameters[:name] ? result[:output].chomp : result[:output]
73
72
  end
74
73
  end
75
74
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module RubyTerraform
4
- VERSION = '1.8.0.pre.7'
4
+ VERSION = '1.8.0.pre.8'
5
5
  end
@@ -1618,7 +1618,7 @@ module RubyTerraform
1618
1618
  @binary = 'terraform'
1619
1619
  @logger = default_logger
1620
1620
  @options = default_options
1621
- @stdin = ''
1621
+ @stdin = nil
1622
1622
  @stdout = $stdout
1623
1623
  @stderr = $stderr
1624
1624
  end
@@ -39,7 +39,7 @@ Gem::Specification.new do |spec|
39
39
  spec.required_ruby_version = '>= 3.1'
40
40
 
41
41
  spec.add_dependency 'immutable-struct', '~> 2.4'
42
- spec.add_dependency 'lino', '3.2.0.pre.7'
42
+ spec.add_dependency 'lino', '3.2.0.pre.9'
43
43
 
44
44
  spec.add_development_dependency 'bundler'
45
45
  spec.add_development_dependency 'faker'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby-terraform
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.8.0.pre.7
4
+ version: 1.8.0.pre.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - InfraBlocks Maintainers
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2024-07-08 00:00:00.000000000 Z
11
+ date: 2024-07-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: immutable-struct
@@ -30,14 +30,14 @@ dependencies:
30
30
  requirements:
31
31
  - - '='
32
32
  - !ruby/object:Gem::Version
33
- version: 3.2.0.pre.7
33
+ version: 3.2.0.pre.9
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - '='
39
39
  - !ruby/object:Gem::Version
40
- version: 3.2.0.pre.7
40
+ version: 3.2.0.pre.9
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: bundler
43
43
  requirement: !ruby/object:Gem::Requirement