Class: Rbcli::ScriptWrapper

Inherits:
Object
  • Object
show all
Defined in:
lib/rbcli/components/commands/scriptwrapper/scriptwrapper.rb

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(inline: nil, path: nil, vars: nil) ⇒ ScriptWrapper

Returns a new instance of ScriptWrapper.



10
11
12
13
14
# File 'lib/rbcli/components/commands/scriptwrapper/scriptwrapper.rb', line 10

def initialize inline: nil, path: nil, vars: nil
  @inline = inline
  @path = path.nil? ? nil : File.expand_path(path)
  @vars = vars || []
end

Class Method Details

.run_script(cmd, opts: nil, params: nil, args: nil, config: nil, env: nil, vars: nil, inject_rbcli: true, capture_output: false, silent: false, prefix: nil, color: nil, bgcolor: nil) ⇒ Object



29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
# File 'lib/rbcli/components/commands/scriptwrapper/scriptwrapper.rb', line 29

def self.run_script cmd, opts: nil, params: nil, args: nil, config: nil, env: nil, vars: nil, inject_rbcli: true,
  capture_output: false, silent: false, prefix: nil, color: nil, bgcolor: nil
  envs = {}
  %w(opts params args config env vars).each do |k|
    envs["__RBCLI_#{k.upcase}"] = eval("#{k}.nil?") ? [].to_json : eval("#{k}.to_json")
  end
  vars.each do |k, v|
    envs[k.to_s.upcase] = v
  end unless vars.nil?

  if inject_rbcli && !cmd.include?('lib-rbcli.sh')
    sh_libpath = File.expand_path(File.join(File.dirname(__FILE__), 'lib-rbcli.sh'))
    cmd = cmd.lines.insert((cmd.start_with?('#!') ? 1 : 0), "source '#{sh_libpath}'\n").join
  end

  output = +''
  retval = nil
  prefix ||= ''
  Open3.popen2e(envs, cmd) do |_stdin, stdout_and_stderr, wait_threads|
    until (line = stdout_and_stderr.gets).nil? do
      if line.include?(' || ')
        severity, text = line.split(' || ', 2)
      else
        severity = 'INFO'
        text = line
      end
      output << text
      Rbcli.log.add(Logger.const_get(severity.upcase.to_sym), prefix + text.chomp.colorize(color: color, background: bgcolor), 'SCRP') unless silent
      Rbcli.log.add(-1, prefix + text.chomp.colorize(color: color, background: bgcolor), 'SCRP') if silent
    end
    retval = wait_threads.value
  end
  Rbcli.log.debug "Return value of script was: #{retval}", "SCRP"
  capture_output ? output : retval.success?
end

Instance Method Details

#execute(opts = nil, params = nil, args = nil, config = nil, env = nil) ⇒ Object



16
17
18
19
20
21
22
23
24
25
26
27
# File 'lib/rbcli/components/commands/scriptwrapper/scriptwrapper.rb', line 16

def execute opts = nil, params = nil, args = nil, config = nil, env = nil
  sh_libpath = File.expand_path(File.join(File.dirname(__FILE__), 'lib-rbcli.sh'))
  if @inline.nil? && !@path.nil?
    cmd = File.read(@path).include?('lib-rbcli.sh') ? '' : "source '#{sh_libpath}'; "
    cmd += "source '#{@path}'"
    inject_rbcli = false
  else
    cmd = @inline
    inject_rbcli = true
  end
  self.class.run_script cmd, opts: opts, params: params, args: args, config: config, env: env, vars: @vars, inject_rbcli: inject_rbcli
end