Module: Boson::PipeRunner

Included in:
BinRunner
Defined in:
lib/boson/pipe_runner.rb

Constant Summary collapse

PIPE =
'+'

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.split_array_by(arr, divider) ⇒ Object

Splits array into array of arrays with given element



6
7
8
9
10
11
# File 'lib/boson/pipe_runner.rb', line 6

def self.split_array_by(arr, divider)
  arr.inject([[]]) {|results, element|
    (divider == element) ? (results << []) : (results.last << element)
    results
  }
end

Instance Method Details

#commandsObject

Commands to executed, in order given by user



34
35
36
# File 'lib/boson/pipe_runner.rb', line 34

def commands
  @commands ||= @all_args.map {|e| e[0]}
end

#execute_command(command, args) ⇒ Object



21
22
23
24
25
26
# File 'lib/boson/pipe_runner.rb', line 21

def execute_command(command, args)
  @all_args.inject(nil) do |acc, (cmd,*args)|
    args = translate_args(args, acc)
    super(cmd, args)
  end
end

#parse_args(args) ⇒ Object



13
14
15
16
17
18
19
# File 'lib/boson/pipe_runner.rb', line 13

def parse_args(args)
  @all_args = PipeRunner.split_array_by(args, PIPE)
  args = @all_args[0]
  super(args).tap do |result|
    @all_args[0] = ([result[0]] + Array(result[2])).compact
  end
end

#translate_args(args, piped) ⇒ Object



28
29
30
31
# File 'lib/boson/pipe_runner.rb', line 28

def translate_args(args, piped)
  args.unshift piped if piped
  args
end