Class: Enparallel::Task

Inherits:
Object
  • Object
show all
Defined in:
lib/enparallel/task.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(command, input) ⇒ Task

Returns a new instance of Task.



6
7
8
9
10
11
12
13
14
# File 'lib/enparallel/task.rb', line 6

def initialize(command, input)
    @command = command
    @input = input
    @running = false
    @stdout = ''
    @stderr = ''
    @ran_at = nil
    @exit_status = nil
end

Instance Attribute Details

#stderrObject

Returns the value of attribute stderr.



4
5
6
# File 'lib/enparallel/task.rb', line 4

def stderr
  @stderr
end

#stdoutObject

Returns the value of attribute stdout.



3
4
5
# File 'lib/enparallel/task.rb', line 3

def stdout
  @stdout
end

Instance Method Details

#charObject



28
29
30
31
32
33
34
35
36
37
38
# File 'lib/enparallel/task.rb', line 28

def char
    if @running
        'R'
    elsif @exit_status.nil?
        'S'
    elsif succeeded?
        'D'.green
    else
        'F'.red
    end
end

#runObject



40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
# File 'lib/enparallel/task.rb', line 40

def run
    @running = true
    @ran_at = Time.now

    Open3.popen3(command_line_safe) do |_stdin, stdout, stderr, thread|
        @stdout = stdout.read.chomp
        @stderr = stderr.read.chomp
        @exit_status = thread.value.exitstatus
    end
rescue => e
    @stderr = e.message
    @exit_status = 1
ensure
    @running = false
end

#succeeded?Boolean

Returns:

  • (Boolean)


56
57
58
59
60
# File 'lib/enparallel/task.rb', line 56

def succeeded?
    raise 'Task not resolved' if @ran_at.nil?

    @exit_status == 0
end

#to_sObject



16
17
18
19
20
21
22
23
24
25
26
# File 'lib/enparallel/task.rb', line 16

def to_s
    document = SOML::Document.new

    document.add('CommandLine', command_line_unsafe)
    document.add('ExitStatus', @exit_status)
    document.add('RanAt', @ran_at)
    document.add('StandardOutput', @stdout) unless @stdout.empty?
    document.add('StandardError', @stderr) unless @stderr.empty?

    document.to_s
end