ruby-terraform 0.65.0.pre.11 → 1.0.0.pre.1

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 (62) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +25 -17
  3. data/README.md +148 -414
  4. data/Rakefile +25 -0
  5. data/lib/ruby_terraform.rb +1371 -42
  6. data/lib/ruby_terraform/commands.rb +0 -2
  7. data/lib/ruby_terraform/commands/apply.rb +78 -4
  8. data/lib/ruby_terraform/commands/base.rb +21 -15
  9. data/lib/ruby_terraform/commands/destroy.rb +71 -4
  10. data/lib/ruby_terraform/commands/force_unlock.rb +33 -3
  11. data/lib/ruby_terraform/commands/format.rb +45 -2
  12. data/lib/ruby_terraform/commands/get.rb +35 -2
  13. data/lib/ruby_terraform/commands/graph.rb +48 -2
  14. data/lib/ruby_terraform/commands/import.rb +98 -3
  15. data/lib/ruby_terraform/commands/init.rb +84 -3
  16. data/lib/ruby_terraform/commands/login.rb +26 -2
  17. data/lib/ruby_terraform/commands/logout.rb +23 -2
  18. data/lib/ruby_terraform/commands/output.rb +36 -6
  19. data/lib/ruby_terraform/commands/plan.rb +72 -3
  20. data/lib/ruby_terraform/commands/providers.rb +30 -2
  21. data/lib/ruby_terraform/commands/providers_lock.rb +72 -3
  22. data/lib/ruby_terraform/commands/providers_mirror.rb +44 -2
  23. data/lib/ruby_terraform/commands/providers_schema.rb +21 -2
  24. data/lib/ruby_terraform/commands/refresh.rb +70 -3
  25. data/lib/ruby_terraform/commands/show.rb +26 -3
  26. data/lib/ruby_terraform/commands/state_list.rb +54 -3
  27. data/lib/ruby_terraform/commands/state_move.rb +64 -6
  28. data/lib/ruby_terraform/commands/state_pull.rb +24 -2
  29. data/lib/ruby_terraform/commands/state_push.rb +49 -3
  30. data/lib/ruby_terraform/commands/state_remove.rb +55 -7
  31. data/lib/ruby_terraform/commands/state_replace_provider.rb +39 -6
  32. data/lib/ruby_terraform/commands/state_show.rb +26 -2
  33. data/lib/ruby_terraform/commands/taint.rb +63 -2
  34. data/lib/ruby_terraform/commands/untaint.rb +55 -2
  35. data/lib/ruby_terraform/commands/validate.rb +51 -6
  36. data/lib/ruby_terraform/commands/workspace_delete.rb +29 -7
  37. data/lib/ruby_terraform/commands/workspace_list.rb +21 -6
  38. data/lib/ruby_terraform/commands/workspace_new.rb +28 -7
  39. data/lib/ruby_terraform/commands/workspace_select.rb +23 -7
  40. data/lib/ruby_terraform/commands/workspace_show.rb +17 -2
  41. data/lib/ruby_terraform/options.rb +26 -4
  42. data/lib/ruby_terraform/options/definition.rb +174 -0
  43. data/lib/ruby_terraform/options/definitions.rb +112 -0
  44. data/lib/ruby_terraform/options/factory.rb +10 -102
  45. data/lib/ruby_terraform/options/{common.rb → global.rb} +2 -1
  46. data/lib/ruby_terraform/options/name.rb +11 -19
  47. data/lib/ruby_terraform/options/types.rb +26 -0
  48. data/lib/ruby_terraform/options/types/flag.rb +8 -6
  49. data/lib/ruby_terraform/options/types/standard.rb +17 -29
  50. data/lib/ruby_terraform/options/values.rb +38 -0
  51. data/lib/ruby_terraform/options/values/base.rb +15 -0
  52. data/lib/ruby_terraform/options/values/boolean.rb +13 -11
  53. data/lib/ruby_terraform/options/values/complex.rb +19 -0
  54. data/lib/ruby_terraform/options/values/key_value.rb +21 -0
  55. data/lib/ruby_terraform/options/values/string.rb +17 -0
  56. data/lib/ruby_terraform/version.rb +1 -1
  57. data/ruby_terraform.gemspec +3 -1
  58. metadata +43 -11
  59. data/lib/ruby_terraform/commands/clean.rb +0 -26
  60. data/lib/ruby_terraform/commands/remote_config.rb +0 -25
  61. data/lib/ruby_terraform/options/types/base.rb +0 -26
  62. data/lib/ruby_terraform/options/types/boolean.rb +0 -18
@@ -2,7 +2,8 @@
2
2
 
3
3
  module RubyTerraform
4
4
  module Options
5
- module Common
5
+ module Global
6
+ # @!visibility private
6
7
  def options
7
8
  %w[-chdir]
8
9
  end
@@ -1,21 +1,21 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'immutable-struct'
4
+
3
5
  module RubyTerraform
4
6
  module Options
5
- class Name
7
+ class Name < ImmutableStruct.new(:name)
6
8
  def initialize(name)
7
- @name = name
8
- end
9
-
10
- def without_prefix
11
- @name[0] == '-' ? @name[1..] : @name
9
+ super(name: name.to_s)
12
10
  end
13
11
 
14
- def to_s
12
+ def name
15
13
  "-#{without_prefix}"
16
14
  end
17
15
 
18
- def as_key
16
+ alias to_s name
17
+
18
+ def as_singular_key
19
19
  snake_case.to_sym
20
20
  end
21
21
 
@@ -23,20 +23,12 @@ module RubyTerraform
23
23
  "#{snake_case}s".to_sym
24
24
  end
25
25
 
26
- def ==(other)
27
- to_s == other
28
- end
29
-
30
- def eql?(other)
31
- to_s == other
32
- end
26
+ private
33
27
 
34
- def hash
35
- to_s.hash
28
+ def without_prefix
29
+ @name.sub(/^-+/, '')
36
30
  end
37
31
 
38
- private
39
-
40
32
  def snake_case
41
33
  without_prefix.gsub('-', '_')
42
34
  end
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'types/standard'
4
+ require_relative 'types/flag'
5
+
6
+ module RubyTerraform
7
+ module Options
8
+ module Types
9
+ def self.standard(name, value, **opts)
10
+ Standard.new(name, value, **opts)
11
+ end
12
+
13
+ def self.flag(name, value)
14
+ Flag.new(name, value)
15
+ end
16
+
17
+ def self.resolve(type)
18
+ case type
19
+ when :standard then Types::Standard
20
+ when :flag then Types::Flag
21
+ else type
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
@@ -1,16 +1,18 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative 'base'
4
- require_relative '../values/boolean'
5
-
6
3
  module RubyTerraform
7
4
  module Options
8
5
  module Types
9
- class Flag < Base
10
- include Values::Boolean
6
+ class Flag < ImmutableStruct.new(
7
+ :name,
8
+ :value
9
+ )
10
+ def initialize(name, value, **_opts)
11
+ super(name: name, value: value)
12
+ end
11
13
 
12
14
  def apply(builder)
13
- value ? builder.with_flag(name) : builder
15
+ value.resolve ? builder.with_flag(name) : builder
14
16
  end
15
17
  end
16
18
  end
@@ -1,42 +1,30 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'json'
4
-
5
- require_relative 'base'
6
-
7
3
  module RubyTerraform
8
4
  module Options
9
5
  module Types
10
- class Standard < Base
11
- def apply(builder)
12
- if value.respond_to?(:keys)
13
- apply_hash(builder)
14
- elsif value.respond_to?(:each)
15
- apply_array(builder)
16
- else
17
- builder.with_option(name, value)
18
- end
6
+ class Standard < ImmutableStruct.new(
7
+ :name,
8
+ :value,
9
+ :separator,
10
+ :placement
11
+ )
12
+ def initialize(name, value, **opts)
13
+ super(
14
+ name: name, value: value,
15
+ separator: opts[:separator],
16
+ placement: opts[:placement]
17
+ )
19
18
  end
20
19
 
21
- private
22
-
23
- def apply_hash(builder)
24
- builder.with_repeated_option(
20
+ def apply(builder)
21
+ builder.with_option(
25
22
  name,
26
- value.map do |hash_key, hash_value|
27
- "'#{hash_key}=#{as_string(hash_value)}'"
28
- end,
29
- separator: ' '
23
+ value.render,
24
+ separator: separator,
25
+ placement: placement
30
26
  )
31
27
  end
32
-
33
- def apply_array(builder)
34
- builder.with_repeated_option(name, value)
35
- end
36
-
37
- def as_string(value)
38
- value.is_a?(String) ? value : JSON.generate(value)
39
- end
40
28
  end
41
29
  end
42
30
  end
@@ -0,0 +1,38 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'values/boolean'
4
+ require_relative 'values/string'
5
+ require_relative 'values/complex'
6
+ require_relative 'values/key_value'
7
+
8
+ module RubyTerraform
9
+ module Options
10
+ module Values
11
+ def self.boolean(value)
12
+ Boolean.new(value)
13
+ end
14
+
15
+ def self.string(value)
16
+ String.new(value)
17
+ end
18
+
19
+ def self.complex(value)
20
+ Complex.new(value)
21
+ end
22
+
23
+ def self.key_value(key, value)
24
+ KeyValue.new(key, value)
25
+ end
26
+
27
+ def self.resolve(type)
28
+ case type
29
+ when :string then Values::String
30
+ when :boolean then Values::Boolean
31
+ when :complex then Values::Complex
32
+ when :key_value then Values::KeyValue
33
+ else type
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'immutable-struct'
4
+
5
+ module RubyTerraform
6
+ module Options
7
+ module Values
8
+ class Base < ImmutableStruct.new(:value)
9
+ def initialize(value)
10
+ super(value: value)
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
@@ -1,23 +1,25 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require_relative 'base'
4
+
3
5
  module RubyTerraform
4
6
  module Options
5
7
  module Values
6
- module Boolean
7
- def coerce_value(value)
8
- @value = to_boolean(value)
9
- end
10
-
11
- private
12
-
13
- def to_boolean(value)
14
- return nil if value.nil?
15
- return value if a_boolean?(value)
16
- return true if true_as_string?(value)
8
+ class Boolean < Base
9
+ def resolve
10
+ return nil if @value.nil?
11
+ return @value if a_boolean?(@value)
12
+ return true if true_as_string?(@value)
17
13
 
18
14
  false
19
15
  end
20
16
 
17
+ def render
18
+ resolve.nil? ? nil : resolve.to_s
19
+ end
20
+
21
+ private
22
+
21
23
  def a_boolean?(value)
22
24
  value.is_a?(TrueClass) || value.is_a?(FalseClass)
23
25
  end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'base'
4
+
5
+ module RubyTerraform
6
+ module Options
7
+ module Values
8
+ class Complex < Base
9
+ def resolve
10
+ @value
11
+ end
12
+
13
+ def render
14
+ @value.is_a?(::String) ? @value : JSON.generate(value)
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RubyTerraform
4
+ module Options
5
+ module Values
6
+ class KeyValue < ImmutableStruct.new(:key, :value)
7
+ def initialize(key, value)
8
+ super(key: key, value: value)
9
+ end
10
+
11
+ def resolve
12
+ { key => value.resolve }
13
+ end
14
+
15
+ def render
16
+ "'#{key}=#{value.render}'"
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'base'
4
+
5
+ module RubyTerraform
6
+ module Options
7
+ module Values
8
+ class String < Base
9
+ def resolve
10
+ @value.to_s
11
+ end
12
+
13
+ alias render resolve
14
+ end
15
+ end
16
+ end
17
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module RubyTerraform
4
- VERSION = '0.65.0.pre.11'
4
+ VERSION = '1.0.0.pre.1'
5
5
  end
@@ -38,7 +38,8 @@ Gem::Specification.new do |spec|
38
38
 
39
39
  spec.required_ruby_version = '>= 2.6'
40
40
 
41
- spec.add_dependency 'lino', '>= 2.3'
41
+ spec.add_dependency 'immutable-struct', '~> 2.4'
42
+ spec.add_dependency 'lino', '~> 2.7'
42
43
 
43
44
  spec.add_development_dependency 'bundler', '~> 2.0'
44
45
  spec.add_development_dependency 'faker', '~> 2.17'
@@ -55,4 +56,5 @@ Gem::Specification.new do |spec|
55
56
  spec.add_development_dependency 'rubocop-rake', '~> 0.5'
56
57
  spec.add_development_dependency 'rubocop-rspec', '~> 2.2'
57
58
  spec.add_development_dependency 'simplecov', '~> 0.21'
59
+ spec.add_development_dependency 'yard', '~> 0.9'
58
60
  end
metadata CHANGED
@@ -1,29 +1,43 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby-terraform
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.65.0.pre.11
4
+ version: 1.0.0.pre.1
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-06 00:00:00.000000000 Z
11
+ date: 2021-05-08 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: immutable-struct
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '2.4'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '2.4'
13
27
  - !ruby/object:Gem::Dependency
14
28
  name: lino
15
29
  requirement: !ruby/object:Gem::Requirement
16
30
  requirements:
17
- - - ">="
31
+ - - "~>"
18
32
  - !ruby/object:Gem::Version
19
- version: '2.3'
33
+ version: '2.7'
20
34
  type: :runtime
21
35
  prerelease: false
22
36
  version_requirements: !ruby/object:Gem::Requirement
23
37
  requirements:
24
- - - ">="
38
+ - - "~>"
25
39
  - !ruby/object:Gem::Version
26
- version: '2.3'
40
+ version: '2.7'
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: bundler
29
43
  requirement: !ruby/object:Gem::Requirement
@@ -234,6 +248,20 @@ dependencies:
234
248
  - - "~>"
235
249
  - !ruby/object:Gem::Version
236
250
  version: '0.21'
251
+ - !ruby/object:Gem::Dependency
252
+ name: yard
253
+ requirement: !ruby/object:Gem::Requirement
254
+ requirements:
255
+ - - "~>"
256
+ - !ruby/object:Gem::Version
257
+ version: '0.9'
258
+ type: :development
259
+ prerelease: false
260
+ version_requirements: !ruby/object:Gem::Requirement
261
+ requirements:
262
+ - - "~>"
263
+ - !ruby/object:Gem::Version
264
+ version: '0.9'
237
265
  description: Wraps the Terraform CLI so that Terraform can be invoked from a Ruby
238
266
  script or Rakefile.
239
267
  email:
@@ -255,7 +283,6 @@ files:
255
283
  - lib/ruby_terraform/commands.rb
256
284
  - lib/ruby_terraform/commands/apply.rb
257
285
  - lib/ruby_terraform/commands/base.rb
258
- - lib/ruby_terraform/commands/clean.rb
259
286
  - lib/ruby_terraform/commands/destroy.rb
260
287
  - lib/ruby_terraform/commands/force_unlock.rb
261
288
  - lib/ruby_terraform/commands/format.rb
@@ -272,7 +299,6 @@ files:
272
299
  - lib/ruby_terraform/commands/providers_mirror.rb
273
300
  - lib/ruby_terraform/commands/providers_schema.rb
274
301
  - lib/ruby_terraform/commands/refresh.rb
275
- - lib/ruby_terraform/commands/remote_config.rb
276
302
  - lib/ruby_terraform/commands/show.rb
277
303
  - lib/ruby_terraform/commands/state_list.rb
278
304
  - lib/ruby_terraform/commands/state_move.rb
@@ -292,14 +318,20 @@ files:
292
318
  - lib/ruby_terraform/errors.rb
293
319
  - lib/ruby_terraform/errors/execution_error.rb
294
320
  - lib/ruby_terraform/options.rb
295
- - lib/ruby_terraform/options/common.rb
321
+ - lib/ruby_terraform/options/definition.rb
322
+ - lib/ruby_terraform/options/definitions.rb
296
323
  - lib/ruby_terraform/options/factory.rb
324
+ - lib/ruby_terraform/options/global.rb
297
325
  - lib/ruby_terraform/options/name.rb
298
- - lib/ruby_terraform/options/types/base.rb
299
- - lib/ruby_terraform/options/types/boolean.rb
326
+ - lib/ruby_terraform/options/types.rb
300
327
  - lib/ruby_terraform/options/types/flag.rb
301
328
  - lib/ruby_terraform/options/types/standard.rb
329
+ - lib/ruby_terraform/options/values.rb
330
+ - lib/ruby_terraform/options/values/base.rb
302
331
  - lib/ruby_terraform/options/values/boolean.rb
332
+ - lib/ruby_terraform/options/values/complex.rb
333
+ - lib/ruby_terraform/options/values/key_value.rb
334
+ - lib/ruby_terraform/options/values/string.rb
303
335
  - lib/ruby_terraform/output.rb
304
336
  - lib/ruby_terraform/version.rb
305
337
  - ruby_terraform.gemspec