ruby-terraform 0.65.0.pre.5 → 0.65.0.pre.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (32) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +5 -5
  3. data/lib/ruby_terraform/commands/apply.rb +2 -2
  4. data/lib/ruby_terraform/commands/base.rb +16 -11
  5. data/lib/ruby_terraform/commands/destroy.rb +2 -2
  6. data/lib/ruby_terraform/commands/format.rb +2 -2
  7. data/lib/ruby_terraform/commands/get.rb +2 -2
  8. data/lib/ruby_terraform/commands/import.rb +1 -1
  9. data/lib/ruby_terraform/commands/init.rb +2 -2
  10. data/lib/ruby_terraform/commands/output.rb +2 -2
  11. data/lib/ruby_terraform/commands/plan.rb +5 -5
  12. data/lib/ruby_terraform/commands/refresh.rb +3 -3
  13. data/lib/ruby_terraform/commands/show.rb +3 -3
  14. data/lib/ruby_terraform/commands/validate.rb +2 -2
  15. data/lib/ruby_terraform/commands/workspace.rb +1 -1
  16. data/lib/ruby_terraform/options/base.rb +22 -0
  17. data/lib/ruby_terraform/options/boolean.rb +14 -0
  18. data/lib/ruby_terraform/options/factory.rb +116 -0
  19. data/lib/ruby_terraform/options/flag.rb +14 -0
  20. data/lib/ruby_terraform/options/standard.rb +39 -0
  21. data/lib/ruby_terraform/options/switch.rb +41 -0
  22. data/lib/ruby_terraform/{command_line/option/boolean_value.rb → options/values/boolean.rb} +5 -5
  23. data/lib/ruby_terraform/output.rb +1 -0
  24. data/lib/ruby_terraform/version.rb +1 -1
  25. metadata +11 -12
  26. data/lib/ruby_terraform/command_line/builder.rb +0 -55
  27. data/lib/ruby_terraform/command_line/option/base.rb +0 -24
  28. data/lib/ruby_terraform/command_line/option/boolean.rb +0 -16
  29. data/lib/ruby_terraform/command_line/option/flag.rb +0 -16
  30. data/lib/ruby_terraform/command_line/option/standard.rb +0 -40
  31. data/lib/ruby_terraform/command_line/option/switch.rb +0 -43
  32. data/lib/ruby_terraform/command_line/options_factory.rb +0 -79
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: fc71a524e8870cabf47b5d3d88f474119bb38ed849afc036af51f95475335c37
4
- data.tar.gz: 11bf8ae65abe06ff4e0cec9f347a82f613976cbd7378c62fc22fb97d336e05f4
3
+ metadata.gz: c5cfd39cb3e8dbe09c0589280ac5b3879e913a9588574420bb285d89a8507217
4
+ data.tar.gz: 0e87b3b820aff40c28c38073735c4da17c14f95081b6a57f861df034a326bfa1
5
5
  SHA512:
6
- metadata.gz: a6cd2f1ac3bc0b91d270925ddea294c6c30fe3385061437467fc78c1964bea141ac410212f0358a091e483898bf2d06a4b27931783c444e5176bb184b5ede8c9
7
- data.tar.gz: 8a863584cdf4d4bc90ebe62cb289b893fd6082f704f828ab00ba21b67228841ceb774b7d16a03332feebcdd4174364a340124b2796ca6e5acc2b2383050a2b83
6
+ metadata.gz: 86d696b30097ac1248ae4f421c591307bad5002ce91fb0352e30334d1c5861ec8abd43c734e6fb1eb0c6efefb07d7f9b09706684bd97b616a6f556e2e6fb9064
7
+ data.tar.gz: c55bd0a0a10da6bf852b097c17e11890c26ddbeb123edff321a31d5c89fa09404145299c69cda3b403979a0f88d6eca7d9ebf676b5e570933cd4e14f63b36483
data/Gemfile.lock CHANGED
@@ -1,8 +1,8 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- ruby-terraform (0.65.0.pre.5)
5
- lino (>= 1.5)
4
+ ruby-terraform (0.65.0.pre.6)
5
+ lino (>= 2.3)
6
6
 
7
7
  GEM
8
8
  remote: https://rubygems.org/
@@ -50,7 +50,7 @@ GEM
50
50
  concurrent-ruby (~> 1.0)
51
51
  i18n (1.8.10)
52
52
  concurrent-ruby (~> 1.0)
53
- lino (1.9.0)
53
+ lino (2.3.0)
54
54
  hamster (~> 3.0)
55
55
  open4 (~> 1.3)
56
56
  listen (3.5.1)
@@ -101,7 +101,7 @@ GEM
101
101
  rb-inotify (0.10.1)
102
102
  ffi (~> 1.0)
103
103
  regexp_parser (2.1.1)
104
- rexml (3.2.4)
104
+ rexml (3.2.5)
105
105
  rspec (3.10.0)
106
106
  rspec-core (~> 3.10.0)
107
107
  rspec-expectations (~> 3.10.0)
@@ -115,7 +115,7 @@ GEM
115
115
  diff-lcs (>= 1.2.0, < 2.0)
116
116
  rspec-support (~> 3.10.0)
117
117
  rspec-support (3.10.2)
118
- rubocop (1.12.0)
118
+ rubocop (1.12.1)
119
119
  parallel (~> 1.10)
120
120
  parser (>= 3.0.0.0)
121
121
  rainbow (>= 2.2.2, < 4.0)
@@ -4,7 +4,7 @@ module RubyTerraform
4
4
  module Commands
5
5
  class Apply < Base
6
6
  def sub_commands(_values)
7
- 'apply'
7
+ %w[apply]
8
8
  end
9
9
 
10
10
  def switches
@@ -13,7 +13,7 @@ module RubyTerraform
13
13
  end
14
14
 
15
15
  def arguments(values)
16
- values[:plan] || values[:directory]
16
+ [values[:plan] || values[:directory]]
17
17
  end
18
18
 
19
19
  def option_default_values(_opts)
@@ -1,6 +1,7 @@
1
+ require 'lino'
2
+
1
3
  require_relative '../errors'
2
- require_relative '../command_line/builder'
3
- require_relative '../command_line/options_factory'
4
+ require_relative '../options/factory'
4
5
 
5
6
  module RubyTerraform
6
7
  module Commands
@@ -54,17 +55,21 @@ module RubyTerraform
54
55
 
55
56
  def build_command(opts)
56
57
  values = apply_option_defaults_and_overrides(opts)
57
- RubyTerraform::CommandLine::Builder.new(
58
- binary: @binary,
59
- sub_commands: sub_commands(values),
60
- options: options(values),
61
- arguments: arguments(values)
62
- ).build
58
+
59
+ Lino::CommandLineBuilder
60
+ .for_command(@binary)
61
+ .with_options_after_subcommands
62
+ .with_option_separator('=')
63
+ .with_appliables(options(values))
64
+ .with_subcommands(sub_commands(values))
65
+ .with_arguments(arguments(values))
66
+ .build
63
67
  end
64
68
 
65
69
  def apply_option_defaults_and_overrides(opts)
66
- option_default_values(opts).merge(opts)
67
- .merge(option_override_values(opts))
70
+ option_default_values(opts)
71
+ .merge(opts)
72
+ .merge(option_override_values(opts))
68
73
  end
69
74
 
70
75
  def option_default_values(_values)
@@ -80,7 +85,7 @@ module RubyTerraform
80
85
  end
81
86
 
82
87
  def options(values)
83
- RubyTerraform::CommandLine::OptionsFactory.from(values, switches)
88
+ RubyTerraform::Options::Factory.from(values, switches)
84
89
  end
85
90
 
86
91
  def switches
@@ -8,11 +8,11 @@ module RubyTerraform
8
8
  end
9
9
 
10
10
  def sub_commands(_values)
11
- 'destroy'
11
+ %w[destroy]
12
12
  end
13
13
 
14
14
  def arguments(values)
15
- values[:directory]
15
+ [values[:directory]]
16
16
  end
17
17
 
18
18
  def option_default_values(_opts)
@@ -8,11 +8,11 @@ module RubyTerraform
8
8
  end
9
9
 
10
10
  def sub_commands(_values)
11
- 'fmt'
11
+ %w[fmt]
12
12
  end
13
13
 
14
14
  def arguments(values)
15
- values[:directory]
15
+ [values[:directory]]
16
16
  end
17
17
  end
18
18
  end
@@ -8,11 +8,11 @@ module RubyTerraform
8
8
  end
9
9
 
10
10
  def sub_commands(_values)
11
- 'get'
11
+ %w[get]
12
12
  end
13
13
 
14
14
  def arguments(values)
15
- values[:directory]
15
+ [values[:directory]]
16
16
  end
17
17
  end
18
18
  end
@@ -8,7 +8,7 @@ module RubyTerraform
8
8
  end
9
9
 
10
10
  def sub_commands(_values)
11
- 'import'
11
+ %w[import]
12
12
  end
13
13
 
14
14
  def arguments(values)
@@ -9,11 +9,11 @@ module RubyTerraform
9
9
  end
10
10
 
11
11
  def sub_commands(_values)
12
- 'init'
12
+ %w[init]
13
13
  end
14
14
 
15
15
  def arguments(values)
16
- values[:path]
16
+ [values[:path]]
17
17
  end
18
18
 
19
19
  def option_default_values(_opts)
@@ -15,11 +15,11 @@ module RubyTerraform
15
15
  end
16
16
 
17
17
  def sub_commands(_values)
18
- 'output'
18
+ %w[output]
19
19
  end
20
20
 
21
21
  def arguments(values)
22
- values[:name]
22
+ [values[:name]]
23
23
  end
24
24
 
25
25
  def do_after(opts)
@@ -8,15 +8,15 @@ module RubyTerraform
8
8
  end
9
9
 
10
10
  def sub_commands(_values)
11
- 'plan'
11
+ %w[plan]
12
12
  end
13
13
 
14
- def option_default_values(_opts)
15
- { vars: {}, var_files: [], targets: [] }
14
+ def arguments(values)
15
+ [values[:directory]]
16
16
  end
17
17
 
18
- def arguments(values)
19
- values[:directory]
18
+ def option_default_values(_opts)
19
+ { vars: {}, var_files: [], targets: [] }
20
20
  end
21
21
  end
22
22
  end
@@ -4,15 +4,15 @@ module RubyTerraform
4
4
  module Commands
5
5
  class Refresh < Base
6
6
  def switches
7
- %w[-input -no-color -state -target -var -var-file] + super
7
+ %w[-input -no-color -state -target -var -var-file]
8
8
  end
9
9
 
10
10
  def sub_commands(_values)
11
- 'refresh'
11
+ %w[refresh]
12
12
  end
13
13
 
14
14
  def arguments(values)
15
- values[:directory]
15
+ [values[:directory]]
16
16
  end
17
17
 
18
18
  def option_default_values(_opts)
@@ -4,15 +4,15 @@ module RubyTerraform
4
4
  module Commands
5
5
  class Show < Base
6
6
  def switches
7
- %w[-json -no-color -module-depth] + super
7
+ %w[-json -no-color -module-depth]
8
8
  end
9
9
 
10
10
  def sub_commands(_values)
11
- 'show'
11
+ %w[show]
12
12
  end
13
13
 
14
14
  def arguments(values)
15
- values[:path] || values[:directory]
15
+ [values[:path] || values[:directory]]
16
16
  end
17
17
  end
18
18
  end
@@ -8,11 +8,11 @@ module RubyTerraform
8
8
  end
9
9
 
10
10
  def sub_commands(_values)
11
- 'validate'
11
+ %w[validate]
12
12
  end
13
13
 
14
14
  def arguments(values)
15
- values[:directory]
15
+ [values[:directory]]
16
16
  end
17
17
 
18
18
  def option_default_values(_opts)
@@ -13,7 +13,7 @@ module RubyTerraform
13
13
  end
14
14
 
15
15
  def arguments(values)
16
- values[:directory]
16
+ [values[:directory]]
17
17
  end
18
18
 
19
19
  def option_default_values(_opts)
@@ -0,0 +1,22 @@
1
+ module RubyTerraform
2
+ module Options
3
+ class Base
4
+ def initialize(switch, value)
5
+ @switch = switch
6
+ coerce_value(value)
7
+ end
8
+
9
+ def apply(_builder)
10
+ raise 'not implemented'
11
+ end
12
+
13
+ private
14
+
15
+ attr_reader :switch, :value
16
+
17
+ def coerce_value(value)
18
+ @value = value
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,14 @@
1
+ require_relative 'base'
2
+ require_relative 'values/boolean'
3
+
4
+ module RubyTerraform
5
+ module Options
6
+ class Boolean < Base
7
+ include Values::Boolean
8
+
9
+ def apply(builder)
10
+ builder.with_option(switch, value)
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,116 @@
1
+ require_relative 'switch'
2
+ require_relative 'boolean'
3
+ require_relative 'flag'
4
+ require_relative 'standard'
5
+
6
+ module RubyTerraform
7
+ module Options
8
+ class Factory
9
+ PLURAL_SWITCHES =
10
+ Set.new(
11
+ %w[
12
+ -var
13
+ -target
14
+ -var-file
15
+ ]
16
+ ).freeze
17
+
18
+ BOOLEAN_SWITCHES =
19
+ Set.new(
20
+ %w[
21
+ -auto-approve
22
+ -backend
23
+ -get
24
+ -get-plugins
25
+ -input
26
+ -list
27
+ -lock
28
+ -refresh
29
+ -upgrade
30
+ -verify-plugins
31
+ -write
32
+ ]
33
+ ).freeze
34
+
35
+ FLAG_SWITCHES =
36
+ Set.new(
37
+ %w[
38
+ -allow-missing
39
+ -allow-missing-config
40
+ -check
41
+ -compact-warnings
42
+ -destroy
43
+ -detailed-exitcode
44
+ -diff
45
+ -draw-cycles
46
+ -force
47
+ -force-copy
48
+ -ignore-remote-version
49
+ -json
50
+ -no-color
51
+ -raw
52
+ -reconfigure
53
+ -recursive
54
+ -update
55
+ ]
56
+ ).freeze
57
+
58
+ OVERRIDE_SWITCHES =
59
+ {
60
+ config: :directory,
61
+ out: :plan
62
+ }.freeze
63
+
64
+ def self.from(values, switches)
65
+ new(values, switches).from
66
+ end
67
+
68
+ private_class_method :new
69
+
70
+ def initialize(values, switches)
71
+ @switches = switches.map { |switch| Switch.new(switch) }
72
+ @values = values
73
+ end
74
+
75
+ def from
76
+ switches.each_with_object([]) do |switch, options|
77
+ options.append(*options_from_switch(switch))
78
+ end
79
+ end
80
+
81
+ private
82
+
83
+ attr_reader :switches, :values
84
+
85
+ def options_from_switch(switch)
86
+ return plural_options(switch) if PLURAL_SWITCHES.include?(switch)
87
+ return boolean_option(switch) if BOOLEAN_SWITCHES.include?(switch)
88
+ return flag_option(switch) if FLAG_SWITCHES.include?(switch)
89
+ return override_option(switch) if OVERRIDE_SWITCHES.key?(switch.as_key)
90
+
91
+ standard_option(switch, switch.as_key)
92
+ end
93
+
94
+ def boolean_option(switch)
95
+ [Boolean.new(switch.to_s, values[switch.as_key])]
96
+ end
97
+
98
+ def flag_option(switch)
99
+ [Flag.new(switch.to_s, values[switch.as_key])]
100
+ end
101
+
102
+ def standard_option(switch, hash_key)
103
+ [Standard.new(switch.to_s, values[hash_key])]
104
+ end
105
+
106
+ def override_option(switch)
107
+ standard_option(switch, OVERRIDE_SWITCHES[switch.as_key])
108
+ end
109
+
110
+ def plural_options(switch)
111
+ standard_option(switch.to_s, switch.as_key) +
112
+ standard_option(switch.to_s, switch.as_plural_key)
113
+ end
114
+ end
115
+ end
116
+ end
@@ -0,0 +1,14 @@
1
+ require_relative 'base'
2
+ require_relative 'values/boolean'
3
+
4
+ module RubyTerraform
5
+ module Options
6
+ class Flag < Base
7
+ include Values::Boolean
8
+
9
+ def apply(builder)
10
+ value ? builder.with_flag(switch) : builder
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,39 @@
1
+ require 'json'
2
+
3
+ require_relative 'base'
4
+
5
+ module RubyTerraform
6
+ module Options
7
+ class Standard < Base
8
+ def apply(builder)
9
+ if value.respond_to?(:keys)
10
+ apply_hash(builder)
11
+ elsif value.respond_to?(:each)
12
+ apply_array(builder)
13
+ else
14
+ builder.with_option(switch, value)
15
+ end
16
+ end
17
+
18
+ private
19
+
20
+ def apply_hash(builder)
21
+ builder.with_repeated_option(
22
+ switch,
23
+ value.map do |hash_key, hash_value|
24
+ "'#{hash_key}=#{as_string(hash_value)}'"
25
+ end,
26
+ separator: ' '
27
+ )
28
+ end
29
+
30
+ def apply_array(builder)
31
+ builder.with_repeated_option(switch, value)
32
+ end
33
+
34
+ def as_string(value)
35
+ value.is_a?(String) ? value : JSON.generate(value)
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,41 @@
1
+ module RubyTerraform
2
+ module Options
3
+ class Switch
4
+ def initialize(switch)
5
+ @switch_without_prefix = switch[0] == '-' ? switch[1..] : switch
6
+ end
7
+
8
+ def to_s
9
+ "-#{switch_without_prefix}"
10
+ end
11
+
12
+ def as_key
13
+ snake_case.to_sym
14
+ end
15
+
16
+ def as_plural_key
17
+ "#{snake_case}s".to_sym
18
+ end
19
+
20
+ def ==(other)
21
+ to_s == other
22
+ end
23
+
24
+ def eql?(other)
25
+ to_s == other
26
+ end
27
+
28
+ def hash
29
+ to_s.hash
30
+ end
31
+
32
+ private
33
+
34
+ attr_reader :switch_without_prefix
35
+
36
+ def snake_case
37
+ switch_without_prefix.gsub('-', '_')
38
+ end
39
+ end
40
+ end
41
+ end
@@ -1,14 +1,14 @@
1
1
  module RubyTerraform
2
- module CommandLine
3
- module Option
4
- module BooleanValue
2
+ module Options
3
+ module Values
4
+ module Boolean
5
5
  def coerce_value(value)
6
- @value = boolean_val(value)
6
+ @value = to_boolean(value)
7
7
  end
8
8
 
9
9
  private
10
10
 
11
- def boolean_val(value)
11
+ def to_boolean(value)
12
12
  return nil if value.nil?
13
13
  return value if a_boolean?(value)
14
14
  return true if true_as_string?(value)
@@ -17,6 +17,7 @@ module RubyTerraform
17
17
  configuration_directory = File.join(work_directory, source_directory)
18
18
  FileUtils.mkdir_p File.dirname(configuration_directory)
19
19
  FileUtils.cp_r source_directory, configuration_directory
20
+
20
21
  configuration_directory
21
22
  end
22
23
  end
@@ -1,3 +1,3 @@
1
1
  module RubyTerraform
2
- VERSION = '0.65.0.pre.5'.freeze
2
+ VERSION = '0.65.0.pre.6'.freeze
3
3
  end
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: 0.65.0.pre.5
4
+ version: 0.65.0.pre.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Toby Clemson
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-04-04 00:00:00.000000000 Z
11
+ date: 2021-04-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: lino
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '1.5'
19
+ version: '2.3'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: '1.5'
26
+ version: '2.3'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: bundler
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -238,14 +238,6 @@ files:
238
238
  - bin/setup
239
239
  - lib/ruby-terraform.rb
240
240
  - lib/ruby_terraform.rb
241
- - lib/ruby_terraform/command_line/builder.rb
242
- - lib/ruby_terraform/command_line/option/base.rb
243
- - lib/ruby_terraform/command_line/option/boolean.rb
244
- - lib/ruby_terraform/command_line/option/boolean_value.rb
245
- - lib/ruby_terraform/command_line/option/flag.rb
246
- - lib/ruby_terraform/command_line/option/standard.rb
247
- - lib/ruby_terraform/command_line/option/switch.rb
248
- - lib/ruby_terraform/command_line/options_factory.rb
249
241
  - lib/ruby_terraform/commands.rb
250
242
  - lib/ruby_terraform/commands/apply.rb
251
243
  - lib/ruby_terraform/commands/base.rb
@@ -264,6 +256,13 @@ files:
264
256
  - lib/ruby_terraform/commands/workspace.rb
265
257
  - lib/ruby_terraform/errors.rb
266
258
  - lib/ruby_terraform/errors/execution_error.rb
259
+ - lib/ruby_terraform/options/base.rb
260
+ - lib/ruby_terraform/options/boolean.rb
261
+ - lib/ruby_terraform/options/factory.rb
262
+ - lib/ruby_terraform/options/flag.rb
263
+ - lib/ruby_terraform/options/standard.rb
264
+ - lib/ruby_terraform/options/switch.rb
265
+ - lib/ruby_terraform/options/values/boolean.rb
267
266
  - lib/ruby_terraform/output.rb
268
267
  - lib/ruby_terraform/version.rb
269
268
  homepage: https://github.com/infrablocks/ruby_terraform
@@ -1,55 +0,0 @@
1
- require 'lino'
2
-
3
- module RubyTerraform
4
- module CommandLine
5
- class Builder
6
- def initialize(binary:, sub_commands:, options:, arguments:)
7
- @builder = instantiate_builder(binary)
8
- @sub_commands = array_of(sub_commands)
9
- @options = array_of(options)
10
- @arguments = array_of(arguments)
11
- end
12
-
13
- def build
14
- configure_builder
15
- builder.build
16
- end
17
-
18
- private
19
-
20
- attr_reader :builder, :sub_commands, :options, :arguments
21
-
22
- def configure_builder
23
- add_subcommands_and_options
24
- add_arguments
25
- end
26
-
27
- def add_subcommands_and_options
28
- sub_commands[0...-1].each do |command|
29
- @builder = builder.with_subcommand(command)
30
- end
31
- @builder = builder.with_subcommand(sub_commands.last) do |sub|
32
- options.inject(sub) do |sub_command, option|
33
- option.add_to_subcommand(sub_command)
34
- end
35
- end
36
- end
37
-
38
- def add_arguments
39
- @builder = builder.with_arguments(arguments)
40
- end
41
-
42
- def instantiate_builder(binary)
43
- Lino::CommandLineBuilder
44
- .for_command(binary)
45
- .with_option_separator('=')
46
- end
47
-
48
- def array_of(value)
49
- return value if value.respond_to?(:each)
50
-
51
- value.nil? ? [] : [value]
52
- end
53
- end
54
- end
55
- end
@@ -1,24 +0,0 @@
1
- module RubyTerraform
2
- module CommandLine
3
- module Option
4
- class Base
5
- def initialize(switch, value)
6
- @switch = switch
7
- coerce_value(value)
8
- end
9
-
10
- def add_to_subcommand(_sub)
11
- raise 'not implemented'
12
- end
13
-
14
- private
15
-
16
- attr_reader :switch, :value
17
-
18
- def coerce_value(value)
19
- @value = value
20
- end
21
- end
22
- end
23
- end
24
- end
@@ -1,16 +0,0 @@
1
- require_relative 'boolean_value'
2
- require_relative 'base'
3
-
4
- module RubyTerraform
5
- module CommandLine
6
- module Option
7
- class Boolean < Base
8
- include BooleanValue
9
-
10
- def add_to_subcommand(sub)
11
- sub.with_option(switch, value)
12
- end
13
- end
14
- end
15
- end
16
- end
@@ -1,16 +0,0 @@
1
- require_relative 'boolean_value'
2
- require_relative 'base'
3
-
4
- module RubyTerraform
5
- module CommandLine
6
- module Option
7
- class Flag < Base
8
- include BooleanValue
9
-
10
- def add_to_subcommand(sub)
11
- value ? sub.with_flag(switch) : sub
12
- end
13
- end
14
- end
15
- end
16
- end
@@ -1,40 +0,0 @@
1
- require 'json'
2
- require_relative 'base'
3
-
4
- module RubyTerraform
5
- module CommandLine
6
- module Option
7
- class Standard < Base
8
- def add_to_subcommand(sub)
9
- if value.respond_to?(:keys)
10
- add_hash_to_subcommand(sub)
11
- elsif value.respond_to?(:each)
12
- add_array_to_subcommand(sub)
13
- else
14
- sub.with_option(switch, value)
15
- end
16
- end
17
-
18
- private
19
-
20
- def add_hash_to_subcommand(sub)
21
- sub.with_repeated_option(
22
- switch,
23
- value.map do |hash_key, hash_value|
24
- "'#{hash_key}=#{as_string(hash_value)}'"
25
- end,
26
- separator: ' '
27
- )
28
- end
29
-
30
- def add_array_to_subcommand(sub)
31
- sub.with_repeated_option(switch, value)
32
- end
33
-
34
- def as_string(value)
35
- value.is_a?(String) ? value : JSON.generate(value)
36
- end
37
- end
38
- end
39
- end
40
- end
@@ -1,43 +0,0 @@
1
- module RubyTerraform
2
- module CommandLine
3
- module Option
4
- class Switch
5
- def initialize(switch)
6
- @switch_without_prefix = switch[0] == '-' ? switch[1..] : switch
7
- end
8
-
9
- def to_s
10
- "-#{switch_without_prefix}"
11
- end
12
-
13
- def as_key
14
- snake_case.to_sym
15
- end
16
-
17
- def as_plural_key
18
- "#{snake_case}s".to_sym
19
- end
20
-
21
- def ==(other)
22
- to_s == other
23
- end
24
-
25
- def eql?(other)
26
- to_s == other
27
- end
28
-
29
- def hash
30
- to_s.hash
31
- end
32
-
33
- private
34
-
35
- attr_reader :switch_without_prefix
36
-
37
- def snake_case
38
- switch_without_prefix.gsub('-', '_')
39
- end
40
- end
41
- end
42
- end
43
- end
@@ -1,79 +0,0 @@
1
- require_relative 'option/standard'
2
- require_relative 'option/flag'
3
- require_relative 'option/boolean'
4
- require_relative 'option/switch'
5
-
6
- module RubyTerraform
7
- module CommandLine
8
- class OptionsFactory
9
- PLURAL_SWITCHES = Set.new(
10
- %w[-var -target -var-file]
11
- ).freeze
12
- BOOLEAN_SWITCHES = Set.new(
13
- %w[-auto-approve -backend -get -get-plugins -input -list -lock
14
- -refresh -upgrade -verify-plugins -write]
15
- ).freeze
16
- FLAG_SWITCHES = Set.new(
17
- %w[-allow-missing -allow-missing-config -check -compact-warnings
18
- -destroy -detailed-exitcode -diff -draw-cycles -force -force-copy
19
- -ignore-remote-version -json -no-color -raw -reconfigure -recursive
20
- -update]
21
- ).freeze
22
- OVERRIDE_SWITCHES = {
23
- config: :directory,
24
- out: :plan
25
- }.freeze
26
-
27
- def self.from(values, switches)
28
- new(values, switches).from
29
- end
30
-
31
- private_class_method :new
32
-
33
- def initialize(values, switches)
34
- @switches = switches.map { |switch| Option::Switch.new(switch) }
35
- @values = values
36
- end
37
-
38
- def from
39
- switches.each_with_object([]) do |switch, options|
40
- options.append(*options_from_switch(switch))
41
- end
42
- end
43
-
44
- private
45
-
46
- attr_reader :switches, :values
47
-
48
- def options_from_switch(switch)
49
- return plural_options(switch) if PLURAL_SWITCHES.include?(switch)
50
- return boolean_option(switch) if BOOLEAN_SWITCHES.include?(switch)
51
- return flag_option(switch) if FLAG_SWITCHES.include?(switch)
52
- return override_option(switch) if OVERRIDE_SWITCHES.key?(switch.as_key)
53
-
54
- standard_option(switch, switch.as_key)
55
- end
56
-
57
- def boolean_option(switch)
58
- [Option::Boolean.new(switch.to_s, values[switch.as_key])]
59
- end
60
-
61
- def flag_option(switch)
62
- [Option::Flag.new(switch.to_s, values[switch.as_key])]
63
- end
64
-
65
- def standard_option(switch, hash_key)
66
- [Option::Standard.new(switch.to_s, values[hash_key])]
67
- end
68
-
69
- def override_option(switch)
70
- standard_option(switch, OVERRIDE_SWITCHES[switch.as_key])
71
- end
72
-
73
- def plural_options(switch)
74
- standard_option(switch.to_s, switch.as_key) +
75
- standard_option(switch.to_s, switch.as_plural_key)
76
- end
77
- end
78
- end
79
- end