# frozen_string_literal: true # # Copyright (c) 2006-2023 Hal Brodigan (postmodern.mod3 at gmail.com) # # Ronin is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # Ronin is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Ronin. If not, see . # require 'ronin/cli/command' require 'ronin/core/cli/ruby_shell' module Ronin class CLI module Commands # # Starts ronin's interactive Ruby shell. # # ## Usage # # ronin irb [options] # # ## Options # -I, --include DIR Directory to add to $LOAD_PATH # -r, --require PATH Ruby files to require # -h, --help Print help information # class Irb < Command option :include, short: '-I', value: { type: String, usage: 'DIR' }, desc: 'Directory to add to $LOAD_PATH' do |dir| @include_dirs << dir end option :require, short: '-r', value: { type: String, usage: 'PATH' }, desc: 'Ruby files to require' do |path| @require_paths << path end description "Start ronin's interactive Ruby shell" man_page 'ronin-irb.1' # The additional directories to add to `$LOAD_PATH`. # # @return [Array] attr_reader :include_dirs # The additional paths to require before starting the Ruby shell. # # @return [Array] attr_reader :require_paths # # Initializes the {Irb} command. # # @param [Array] include_dirs # Optional Array of directories to add to `$LOAD_PATH`. # # @param [Array] require_paths # Optional Array of paths to require before starting the Ruby shell. # def initialize(include_dirs: [], require_paths: [], **kwargs) super(**kwargs) @include_dirs = include_dirs @require_paths = require_paths end # # Runs the `ronin irb` command. # def run(*argv) @include_dirs.each do |dir| $LOAD_PATH.unshift(dir) end @require_paths.each do |path| require(path) end require 'ronin' Core::CLI::RubyShell.start(context: Ronin) end end end end end