ruby-terraform 0.65.0.pre.3 → 0.65.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.
@@ -3,18 +3,21 @@ require_relative 'base'
3
3
  module RubyTerraform
4
4
  module Commands
5
5
  class Workspace < Base
6
- def configure_command(builder, opts)
7
- directory = opts[:directory] || nil
8
- operation = opts[:operation] || 'list'
9
- workspace = opts[:workspace] || nil
6
+ def subcommands(values)
7
+ commands = ['workspace', values[:operation]]
8
+ if values[:workspace] && values[:operation] != 'list'
9
+ commands << values[:workspace]
10
+ else
11
+ commands
12
+ end
13
+ end
10
14
 
11
- builder = builder
12
- .with_subcommand('workspace')
13
- .with_subcommand(operation)
15
+ def arguments(values)
16
+ [values[:directory]]
17
+ end
14
18
 
15
- builder = builder.with_subcommand(workspace) if
16
- workspace && operation != 'list'
17
- builder.with_argument(directory)
19
+ def option_default_values(_opts)
20
+ { directory: nil, operation: 'list', workspace: nil }
18
21
  end
19
22
  end
20
23
  end
@@ -0,0 +1,5 @@
1
+ require_relative 'options/name'
2
+ require_relative 'options/types/flag'
3
+ require_relative 'options/types/boolean'
4
+ require_relative 'options/types/standard'
5
+ require_relative 'options/factory'
@@ -0,0 +1,116 @@
1
+ require_relative 'name'
2
+ require_relative 'types/boolean'
3
+ require_relative 'types/flag'
4
+ require_relative 'types/standard'
5
+
6
+ module RubyTerraform
7
+ module Options
8
+ class Factory
9
+ PLURAL_OPTIONS =
10
+ Set.new(
11
+ %w[
12
+ -var
13
+ -target
14
+ -var-file
15
+ ]
16
+ ).freeze
17
+
18
+ BOOLEAN_OPTIONS =
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_OPTIONS =
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_OPTIONS =
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, names)
71
+ @names = names.map { |switch| Name.new(switch) }
72
+ @values = values
73
+ end
74
+
75
+ def from
76
+ names.each_with_object([]) do |name, options|
77
+ options.append(*options_from_name(name))
78
+ end
79
+ end
80
+
81
+ private
82
+
83
+ attr_reader :names, :values
84
+
85
+ def options_from_name(name)
86
+ return plural_options(name) if PLURAL_OPTIONS.include?(name)
87
+ return boolean_option(name) if BOOLEAN_OPTIONS.include?(name)
88
+ return flag_option(name) if FLAG_OPTIONS.include?(name)
89
+ return override_option(name) if OVERRIDE_OPTIONS.key?(name.as_key)
90
+
91
+ standard_option(name, name.as_key)
92
+ end
93
+
94
+ def boolean_option(name)
95
+ [Types::Boolean.new(name.to_s, values[name.as_key])]
96
+ end
97
+
98
+ def flag_option(name)
99
+ [Types::Flag.new(name.to_s, values[name.as_key])]
100
+ end
101
+
102
+ def standard_option(name, hash_key)
103
+ [Types::Standard.new(name.to_s, values[hash_key])]
104
+ end
105
+
106
+ def override_option(name)
107
+ standard_option(name, OVERRIDE_OPTIONS[name.as_key])
108
+ end
109
+
110
+ def plural_options(name)
111
+ standard_option(name.to_s, name.as_key) +
112
+ standard_option(name.to_s, name.as_plural_key)
113
+ end
114
+ end
115
+ end
116
+ end
@@ -0,0 +1,43 @@
1
+ module RubyTerraform
2
+ module Options
3
+ class Name
4
+ def initialize(name)
5
+ @name = name
6
+ end
7
+
8
+ def without_prefix
9
+ @name[0] == '-' ? @name[1..] : @name
10
+ end
11
+
12
+ def to_s
13
+ "-#{without_prefix}"
14
+ end
15
+
16
+ def as_key
17
+ snake_case.to_sym
18
+ end
19
+
20
+ def as_plural_key
21
+ "#{snake_case}s".to_sym
22
+ end
23
+
24
+ def ==(other)
25
+ to_s == other
26
+ end
27
+
28
+ def eql?(other)
29
+ to_s == other
30
+ end
31
+
32
+ def hash
33
+ to_s.hash
34
+ end
35
+
36
+ private
37
+
38
+ def snake_case
39
+ without_prefix.gsub('-', '_')
40
+ end
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,24 @@
1
+ module RubyTerraform
2
+ module Options
3
+ module Types
4
+ class Base
5
+ def initialize(name, value)
6
+ @name = name
7
+ coerce_value(value)
8
+ end
9
+
10
+ def apply(_builder)
11
+ raise 'not implemented'
12
+ end
13
+
14
+ private
15
+
16
+ attr_reader :name, :value
17
+
18
+ def coerce_value(value)
19
+ @value = value
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,16 @@
1
+ require_relative 'base'
2
+ require_relative '../values/boolean'
3
+
4
+ module RubyTerraform
5
+ module Options
6
+ module Types
7
+ class Boolean < Base
8
+ include Values::Boolean
9
+
10
+ def apply(builder)
11
+ builder.with_option(name, value)
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,16 @@
1
+ require_relative 'base'
2
+ require_relative '../values/boolean'
3
+
4
+ module RubyTerraform
5
+ module Options
6
+ module Types
7
+ class Flag < Base
8
+ include Values::Boolean
9
+
10
+ def apply(builder)
11
+ value ? builder.with_flag(name) : builder
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,41 @@
1
+ require 'json'
2
+
3
+ require_relative 'base'
4
+
5
+ module RubyTerraform
6
+ module Options
7
+ module Types
8
+ class Standard < Base
9
+ def apply(builder)
10
+ if value.respond_to?(:keys)
11
+ apply_hash(builder)
12
+ elsif value.respond_to?(:each)
13
+ apply_array(builder)
14
+ else
15
+ builder.with_option(name, value)
16
+ end
17
+ end
18
+
19
+ private
20
+
21
+ def apply_hash(builder)
22
+ builder.with_repeated_option(
23
+ name,
24
+ value.map do |hash_key, hash_value|
25
+ "'#{hash_key}=#{as_string(hash_value)}'"
26
+ end,
27
+ separator: ' '
28
+ )
29
+ end
30
+
31
+ def apply_array(builder)
32
+ builder.with_repeated_option(name, value)
33
+ end
34
+
35
+ def as_string(value)
36
+ value.is_a?(String) ? value : JSON.generate(value)
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,29 @@
1
+ module RubyTerraform
2
+ module Options
3
+ module Values
4
+ module Boolean
5
+ def coerce_value(value)
6
+ @value = to_boolean(value)
7
+ end
8
+
9
+ private
10
+
11
+ def to_boolean(value)
12
+ return nil if value.nil?
13
+ return value if a_boolean?(value)
14
+ return true if true_as_string?(value)
15
+
16
+ false
17
+ end
18
+
19
+ def a_boolean?(value)
20
+ value.is_a?(TrueClass) || value.is_a?(FalseClass)
21
+ end
22
+
23
+ def true_as_string?(value)
24
+ value.respond_to?(:downcase) && value.downcase == 'true'
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
@@ -1,20 +1,24 @@
1
1
  module RubyTerraform
2
2
  class Output
3
- def self.for(opts)
4
- name = opts[:name]
5
- backend_config = opts[:backend_config]
3
+ class << self
4
+ def for(opts)
5
+ Dir.chdir(create_config_directory(opts)) do
6
+ RubyTerraform.init(backend_config: opts[:backend_config])
7
+ RubyTerraform.output(name: opts[:name])
8
+ end
9
+ end
6
10
 
7
- source_directory = opts[:source_directory]
8
- work_directory = opts[:work_directory]
11
+ private
9
12
 
10
- configuration_directory = File.join(work_directory, source_directory)
13
+ def create_config_directory(opts)
14
+ source_directory = opts[:source_directory]
15
+ work_directory = opts[:work_directory]
11
16
 
12
- FileUtils.mkdir_p File.dirname(configuration_directory)
13
- FileUtils.cp_r source_directory, configuration_directory
17
+ configuration_directory = File.join(work_directory, source_directory)
18
+ FileUtils.mkdir_p File.dirname(configuration_directory)
19
+ FileUtils.cp_r source_directory, configuration_directory
14
20
 
15
- Dir.chdir(configuration_directory) do
16
- RubyTerraform.init(backend_config: backend_config)
17
- RubyTerraform.output(name: name)
21
+ configuration_directory
18
22
  end
19
23
  end
20
24
  end
@@ -1,3 +1,3 @@
1
1
  module RubyTerraform
2
- VERSION = '0.65.0.pre.3'.freeze
2
+ VERSION = '0.65.0.pre.8'.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.3
4
+ version: 0.65.0.pre.8
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-02 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
@@ -256,6 +256,14 @@ files:
256
256
  - lib/ruby_terraform/commands/workspace.rb
257
257
  - lib/ruby_terraform/errors.rb
258
258
  - lib/ruby_terraform/errors/execution_error.rb
259
+ - lib/ruby_terraform/options.rb
260
+ - lib/ruby_terraform/options/factory.rb
261
+ - lib/ruby_terraform/options/name.rb
262
+ - lib/ruby_terraform/options/types/base.rb
263
+ - lib/ruby_terraform/options/types/boolean.rb
264
+ - lib/ruby_terraform/options/types/flag.rb
265
+ - lib/ruby_terraform/options/types/standard.rb
266
+ - lib/ruby_terraform/options/values/boolean.rb
259
267
  - lib/ruby_terraform/output.rb
260
268
  - lib/ruby_terraform/version.rb
261
269
  homepage: https://github.com/infrablocks/ruby_terraform