class RubyTerraform::Commands::Base

Attributes

binary[R]
logger[R]
stderr[R]
stdin[R]
stdout[R]

Public Class Methods

new(**opts) click to toggle source

Constructs an instance of the command.

# File lib/ruby_terraform/commands/base.rb, line 14
def initialize(**opts)
  @binary  = opts[:binary]  || RubyTerraform.configuration.binary
  @logger  = opts[:logger]  || RubyTerraform.configuration.logger
  @options = opts[:options] || RubyTerraform.configuration.options
  @stdin   = opts[:stdin]   || RubyTerraform.configuration.stdin
  @stdout  = opts[:stdout]  || RubyTerraform.configuration.stdout
  @stderr  = opts[:stderr]  || RubyTerraform.configuration.stderr
end

Public Instance Methods

execute(parameters = {}) click to toggle source

Executes the command instance.

@param [Hash<String, Object>] parameters The parameters used to

invoke the command. See subclass documentation for details of
supported options.
# File lib/ruby_terraform/commands/base.rb, line 30
def execute(parameters = {})
  do_before(parameters)
  build_and_execute_command(parameters)
  do_after(parameters)
rescue Open4::SpawnError
  message = "Failed while running '#{command_name}'."
  logger.error(message)
  raise Errors::ExecutionError, message
end

Protected Instance Methods

build_and_execute_command(parameters) click to toggle source
# File lib/ruby_terraform/commands/base.rb, line 44
def build_and_execute_command(parameters)
  command = build_command(parameters)

  logger.debug("Running '#{command}'.")
  command.execute(
    stdin: stdin,
    stdout: stdout,
    stderr: stderr
  )
end
command_name() click to toggle source
# File lib/ruby_terraform/commands/base.rb, line 55
def command_name
  self.class.to_s.split('::')[-1].downcase
end
do_after(_parameters) click to toggle source
# File lib/ruby_terraform/commands/base.rb, line 61
def do_after(_parameters); end
do_before(_parameters) click to toggle source
# File lib/ruby_terraform/commands/base.rb, line 59
def do_before(_parameters); end

Private Instance Methods

arguments(_parameters) click to toggle source
# File lib/ruby_terraform/commands/base.rb, line 99
def arguments(_parameters)
  []
end
build_command(parameters) click to toggle source
# File lib/ruby_terraform/commands/base.rb, line 65
def build_command(parameters)
  parameters = resolve_parameters(parameters)

  Lino::CommandLineBuilder
    .for_command(@binary)
    .with_options_after_subcommands
    .with_option_separator('=')
    .with_appliables(@options.resolve(options, parameters))
    .with_subcommands(subcommands)
    .with_arguments(arguments(parameters).compact.flatten).build
end
options() click to toggle source
# File lib/ruby_terraform/commands/base.rb, line 95
def options
  []
end
parameter_defaults(_parameters) click to toggle source
# File lib/ruby_terraform/commands/base.rb, line 83
def parameter_defaults(_parameters)
  {}
end
parameter_overrides(_parameters) click to toggle source
# File lib/ruby_terraform/commands/base.rb, line 87
def parameter_overrides(_parameters)
  {}
end
resolve_parameters(parameters) click to toggle source
# File lib/ruby_terraform/commands/base.rb, line 77
def resolve_parameters(parameters)
  parameter_defaults(parameters)
    .merge(parameters)
    .merge(parameter_overrides(parameters))
end
subcommands() click to toggle source
# File lib/ruby_terraform/commands/base.rb, line 91
def subcommands
  []
end