module Metasploit::Yard::Aruba::RvmEnv

Helpers for parsing `rvm env` output

Constants

LINE_PARSER_PRECEDENCE

Class for parsing lines for `rvm env` in order of precedence

Public Class Methods

change(options={}) click to toggle source

Changes from one `rvm env [@<gemset>]` to another.

@param options [Hash{Symbol => Array<Metasploit::Yard::Aruba::RvmEnv::Variable>}] @option options :from [Array<Metasploit::Yard::Aruba::RvmEnv::Variable>] the current rvm env; usually the output of

parsing `rvm env`.

@option options :to [Array<Metasploit::Yard::Aruba::RvmEnv::Variable>] the new rvm env; usualy the output of parsing

`rvm env @<gemset>`

@option options [Object] :world the cucumber World instance for the current scenario.

# File lib/metasploit/yard/aruba/rvm_env.rb, line 43
def self.change(options={})
  options.assert_valid_keys(:from, :to, :world)

  from_by_name = parsed_to_hash(options.fetch(:from))
  to_by_name = parsed_to_hash(options.fetch(:to))
  world = options.fetch(:world)

  to_by_name.each do |name, to_variable|
    from_variable = from_by_name[name]

    # ignore variables that didn't change
    unless to_variable == from_variable
      to_variable.change(
          from: from_variable,
          world: world
      )
    end
  end
end
parse(rvm_env) click to toggle source

Parses the output of `rvm env`.

@return [Array<Metasploit::Yard::Aruba::RvmEnv::Variable, apply>]

# File lib/metasploit/yard/aruba/rvm_env.rb, line 66
def self.parse(rvm_env)
  rvm_env.each_line.map { |line|
    parse_line(line)
  }
end
parse_line(line) click to toggle source

Parses an individual line of `rvm env`

@return [Metasploit::Yard::Aruba::RvmEnv::Variable, apply] @raise [ArgumentError] if no `Class` in {LINE_PARSER_PRECEDENCE} returns a parsed instance.

# File lib/metasploit/yard/aruba/rvm_env.rb, line 76
def self.parse_line(line)
  parsed = nil

  LINE_PARSER_PRECEDENCE.each do |line_parser|
    parsed = line_parser.parse(line)

    if parsed
      break
    end
  end

  unless parsed
    raise ArgumentError, "No line parser could parse #{line.inspect}"
  end

  parsed
end
parsed_to_hash(parsed) click to toggle source

Converts output of {parse} into Hash that maps {Metasploit::Yard::Aruba::RvmEnv::Variable#name} to the {Metasploit::Yard::Aruba::RvmEnv::Variable}.

@param parsed [Array<Metasploit::Yard::Aruba::RvmEnv::Variable>] output of {parse}. @return [Hash{String => Metasploit::Yard::Aruba::RvmEnv::Variable}] Map of

{Metasploit::Yard::Aruba::RvmEnv::Variable#name} to the {Metasploit::Yard::Aruba::RvmEnv::Variable}.
# File lib/metasploit/yard/aruba/rvm_env.rb, line 100
def self.parsed_to_hash(parsed)
  parsed.each_with_object({}) { |variable, variable_by_name|
    variable_by_name[variable.name] = variable
  }
end