Class: ReleaseCeremony::Runner

Inherits:
Object
  • Object
show all
Defined in:
lib/release_ceremony/runner.rb

Overview

Runs external commands without a shell and mediates all console interaction, so command execution and I/O can be faked in tests.

Instance Method Summary collapse

Constructor Details

#initialize(stdout: $stdout, stderr: $stderr, stdin: $stdin, sleeper: Kernel) ⇒ Runner

Returns a new instance of Runner.



10
11
12
13
14
15
# File 'lib/release_ceremony/runner.rb', line 10

def initialize(stdout: $stdout, stderr: $stderr, stdin: $stdin, sleeper: Kernel)
  @stdout = stdout
  @stderr = stderr
  @stdin = stdin
  @sleeper = sleeper
end

Instance Method Details

#capture(*command) ⇒ Object



17
18
19
20
21
22
23
24
25
# File 'lib/release_ceremony/runner.rb', line 17

def capture(*command)
  validate_command!(command)
  captured_stdout, captured_stderr, status = unbundled { Open3.capture3(*command) }
  return captured_stdout if status.success?

  raise_command_error(command, captured_stderr)
rescue SystemCallError => e
  raise_spawn_error(command, e.message)
end

#getsObject



49
50
51
# File 'lib/release_ceremony/runner.rb', line 49

def gets
  @stdin.gets
end


41
42
43
# File 'lib/release_ceremony/runner.rb', line 41

def print(message)
  @stdout.print(message)
end

#puts(message = '') ⇒ Object



37
38
39
# File 'lib/release_ceremony/runner.rb', line 37

def puts(message = '')
  @stdout.puts(message)
end

#run(*command) ⇒ Object



27
28
29
30
31
32
33
34
35
# File 'lib/release_ceremony/runner.rb', line 27

def run(*command)
  validate_command!(command)
  result = unbundled { system(*command) }
  return true if result

  result.nil? ? raise_spawn_error(command) : raise_command_error(command)
rescue SystemCallError => e
  raise_spawn_error(command, e.message)
end

#sleep(duration) ⇒ Object



53
54
55
# File 'lib/release_ceremony/runner.rb', line 53

def sleep(duration)
  @sleeper.sleep(duration)
end

#warn(message) ⇒ Object



45
46
47
# File 'lib/release_ceremony/runner.rb', line 45

def warn(message)
  @stderr.puts(message)
end