Class: Wip::CommandBuilder

Inherits:
Object
  • Object
show all
Defined in:
lib/wip/command_builder.rb

Overview

Builds the argument arrays for wslc build/exec/run/custom invocations.

Instance Method Summary collapse

Constructor Details

#initialize(wslc:, config:, environment: Environment.new) ⇒ CommandBuilder

Returns a new instance of CommandBuilder.



8
9
10
11
12
# File 'lib/wip/command_builder.rb', line 8

def initialize(wslc:, config:, environment: Environment.new)
  @wslc = wslc
  @config = config
  @environment = environment
end

Instance Method Details

#build(settings:, extra: []) ⇒ Object

Raises:



29
30
31
32
33
34
35
36
# File 'lib/wip/command_builder.rb', line 29

def build(settings:, extra: [])
  values = @config.defaults.merge(settings)
  context = values['context'] || '.'
  tag = values['tag'] || values['image']
  raise ConfigError, 'Build image/tag must not be empty' if tag.to_s.empty?

  [@wslc, 'build', '-t', tag, *extra, context]
end

#custom(name, arguments) ⇒ Object



38
39
40
41
42
43
44
45
# File 'lib/wip/command_builder.rb', line 38

def custom(name, arguments)
  values = @config.command(name) || raise(ConfigError, "Unknown command: #{name}")
  type = values['type'] || (name.to_s == 'build' ? 'build' : 'exec')
  base = Shellwords.split(values['command'].to_s)
  return build(settings: values, extra: arguments) if type == 'build'

  public_send(type, base + arguments, settings: values, interactive: values.fetch('interactive', false))
end

#exec(arguments, settings: {}, interactive: true) ⇒ Object



14
15
16
17
18
19
# File 'lib/wip/command_builder.rb', line 14

def exec(arguments, settings: {}, interactive: true)
  values = @config.defaults.merge(settings)
  command = [@wslc, 'exec']
  command << '-it' if tty?(interactive)
  command.concat(options(values, include_container: true, include_publish: false)).concat(arguments)
end

#run(arguments, settings: {}, interactive: true) ⇒ Object



21
22
23
24
25
26
27
# File 'lib/wip/command_builder.rb', line 21

def run(arguments, settings: {}, interactive: true)
  values = @config.defaults.merge(settings)
  command = [@wslc, 'run']
  command << '--rm' if values['remove']
  command << '-it' if tty?(interactive)
  command.concat(options(values)).push(required(values, 'image')).concat(arguments)
end