Module: Metasploit::Yard::Aruba::RvmEnv

Extended by:
ActiveSupport::Autoload
Defined in:
lib/metasploit/yard/aruba/rvm_env.rb

Overview

Helpers for parsing rvm env output

Defined Under Namespace

Classes: Export, Prepend, Unset, Variable

Constant Summary collapse

LINE_PARSER_PRECEDENCE =

Class for parsing lines for rvm env in order of precedence

[
    # must be before `Metasploit::Yard::Aruba::RvmEnv::Export` because
    # `Metasploit::Yard::Aruba::RvmEnv::Export::REGEXP` matches a superset of
    # `Metasploit::Yard::Aruba::RvmEnv::Prepend::REGEXP`
    Metasploit::Yard::Aruba::RvmEnv::Prepend,
    Metasploit::Yard::Aruba::RvmEnv::Export,
    Metasploit::Yard::Aruba::RvmEnv::Unset
]

Class Method Summary collapse

Class Method Details

.change(options = {}) ⇒ Object

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

Parameters:

Options Hash (options):



43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
# 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) ⇒ Array<Metasploit::Yard::Aruba::RvmEnv::Variable, #apply>

Parses the output of rvm env.

Returns:



66
67
68
69
70
# 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) ⇒ Metasploit::Yard::Aruba::RvmEnv::Variable, #apply

Parses an individual line of rvm env

Returns:

Raises:



76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
# 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) ⇒ Hash{String => Metasploit::Yard::Aruba::RvmEnv::Variable}

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

Parameters:

Returns:



100
101
102
103
104
# 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