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:



93
94
95
96
97
98
99
100
# File 'lib/wip/command_builder.rb', line 93

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



102
103
104
105
106
107
108
109
# File 'lib/wip/command_builder.rb', line 102

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

#dependency_down(name) ⇒ Object



85
86
87
# File 'lib/wip/command_builder.rb', line 85

def dependency_down(name)
  [@wslc, 'stop', name.to_s]
end

#dependency_find(name) ⇒ Object



81
82
83
# File 'lib/wip/command_builder.rb', line 81

def dependency_find(name)
  [@wslc, 'list', '--all', '--filter', "name=#{name}", '--format', 'json']
end

#dependency_remove(name) ⇒ Object



89
90
91
# File 'lib/wip/command_builder.rb', line 89

def dependency_remove(name)
  [@wslc, 'remove', '-f', name.to_s]
end

#dependency_start(name) ⇒ Object



77
78
79
# File 'lib/wip/command_builder.rb', line 77

def dependency_start(name)
  [@wslc, 'start', name.to_s]
end

#dependency_up(name, detach: true) ⇒ Object



67
68
69
70
71
72
73
74
75
# File 'lib/wip/command_builder.rb', line 67

def dependency_up(name, detach: true)
  values = dependency_values(name)
  command = [@wslc, 'run', '--name', name.to_s]
  command.push('--network', @config.network) if @config.network
  command << '-d' if detach
  command.concat(options(values)).push(required(values, 'image'))
  command.concat(Shellwords.split(values['command'].to_s)) unless values['command'].to_s.empty?
  command
end

#downObject



51
52
53
# File 'lib/wip/command_builder.rb', line 51

def down
  [@wslc, 'stop', required(@config.defaults, 'container')]
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

#findObject



46
47
48
49
# File 'lib/wip/command_builder.rb', line 46

def find
  container = required(@config.defaults, 'container')
  [@wslc, 'list', '--all', '--filter', "name=#{container}", '--format', 'json']
end

#network_createObject



59
60
61
# File 'lib/wip/command_builder.rb', line 59

def network_create
  [@wslc, 'network', 'create', required_network]
end

#network_listObject



63
64
65
# File 'lib/wip/command_builder.rb', line 63

def network_list
  [@wslc, 'network', 'list', '--format', 'json']
end

#removeObject



55
56
57
# File 'lib/wip/command_builder.rb', line 55

def remove
  [@wslc, 'remove', '-f', required(@config.defaults, 'container')]
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

#start(detach: false) ⇒ Object



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

def start(detach: false)
  command = [@wslc, 'start', required(@config.defaults, 'container')]
  command.push('-a', '-i') unless detach
  command
end

#tty?(requested) ⇒ Boolean

Returns:

  • (Boolean)


111
# File 'lib/wip/command_builder.rb', line 111

def tty?(requested) = requested && @environment.interactive?

#up(detach: false) ⇒ Object



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

def up(detach: false)
  values = @config.defaults
  command = [@wslc, 'run', '--name', required(values, 'container')]
  command.push('--network', @config.network) if @config.network
  command << '-d' if detach
  command << '-it' if !detach && tty?(true)
  command.concat(options(values)).push(required(values, 'image'))
  command.concat(Shellwords.split(@config.up_command.to_s)) if @config.up_command
  command
end