class Covalence::Helpers::ShellInterpolation

Public Class Methods

parse_shell(input) click to toggle source
# File lib/covalence/helpers/shell_interpolation.rb, line 7
def self.parse_shell(input)
  Covalence::LOGGER.info "Evaluating requested interpolation: \"#{input}\""
  matches = input.scan(/.?\$\([^)]*\)+/)

  Covalence::LOGGER.debug "matches: #{matches}"
  matches.each do |cmd|
    if cmd[0] != "\\"
      cmd = cmd[1..-1] unless cmd[0] == "$"
      interpolated_value = Open3.capture2e(ENV, "echo \"#{cmd}\"")[0].chomp
      input = input.gsub(cmd, interpolated_value)
      Covalence::LOGGER.debug "updated value: #{input}"
    else
      input = input.gsub(cmd, cmd[1..-1])
    end
  end
  Covalence::LOGGER.info "Interpolated value: \"#{input}\""
  return input
end