Installs the default irb extensions command bundle.
Evaluate the given cmd_name on the given cmd_class Class.
Will also define any given aliases for the method.
The optional load_file parameter will be required within the method definition.
# File irb/extend-command.rb, line 131
def self.def_extend_command(cmd_name, cmd_class, load_file = nil, *aliases)
case cmd_class
when Symbol
cmd_class = cmd_class.id2name
when String
when Class
cmd_class = cmd_class.name
end
if load_file
line = __LINE__; eval %[
def #{cmd_name}(*opts, &b)
require "#{load_file}"
arity = ExtendCommand::#{cmd_class}.instance_method(:execute).arity
args = (1..(arity < 0 ? ~arity : arity)).map {|i| "arg" + i.to_s }
args << "*opts" if arity < 0
args << "&block"
args = args.join(", ")
line = __LINE__; eval %[
def #{cmd_name}(\#{args})
ExtendCommand::#{cmd_class}.execute(irb_context, \#{args})
end
], nil, __FILE__, line
send :#{cmd_name}, *opts, &b
end
], nil, __FILE__, line
else
line = __LINE__; eval %[
def #{cmd_name}(*opts, &b)
ExtendCommand::#{cmd_class}.execute(irb_context, *opts, &b)
end
], nil, __FILE__, line
end
for ali, flag in aliases
@ALIASES.push [ali, cmd_name, flag]
end
end
Installs alias methods for the default irb commands on the given object using install_alias_method.
# File irb/extend-command.rb, line 198
def self.extend_object(obj)
unless (class << obj; ancestors; end).include?(EXCB)
super
for ali, com, flg in @ALIASES
obj.install_alias_method(ali, com, flg)
end
end
end
Installs the default irb commands:
irb_current_working_workspace
irb_change_workspace
irb_workspaces
irb_push_workspace
irb_pop_workspace
irb_load
irb_require
irb_source
irb
irb_jobs
irb_fg
irb_kill
irb_help
Command line options at IRB
# File irb/extend-command.rb, line 119
def self.install_extend_commands
for args in @EXTEND_COMMANDS
def_extend_command(*args)
end
end
Installs alias methods for the default irb commands, see ::install_extend_commands.
# File irb/extend-command.rb, line 172
def install_alias_method(to, from, override = NO_OVERRIDE)
to = to.id2name unless to.kind_of?(String)
from = from.id2name unless from.kind_of?(String)
if override == OVERRIDE_ALL or
(override == OVERRIDE_PRIVATE_ONLY) && !respond_to?(to) or
(override == NO_OVERRIDE) && !respond_to?(to, true)
target = self
(class << self; self; end).instance_eval{
if target.respond_to?(to, true) &&
!target.respond_to?(EXCB.irb_original_method_name(to), true)
alias_method(EXCB.irb_original_method_name(to), to)
end
alias_method to, from
}
else
print "irb: warn: can't alias #{to} from #{from}.\n"
end
end
Displays current configuration.
Modifing the configuration is achieved by sending a message to IRB.conf.
# File irb/extend-command.rb, line 36
def irb_context
IRB.CurrentContext
end
Quits the current irb context
ret is the optional signal or message to send to Context#exit
Same as IRB.CurrentContext.exit.
# File irb/extend-command.rb, line 29
def irb_exit(ret = 0)
irb_context.exit(ret)
end
Loads the given file similarly to Kernel#load, see IrbLoader#irb_load
# File irb/ext/use-loader.rb, line 24
def irb_load(*opts, &b)
ExtendCommand::Load.execute(irb_context, *opts, &b)
end