Extended maintenance of Ruby 1.9.3 ended on February 23, 2015. Read more

In Files

  • irb/ext/use-loader.rb
  • irb/extend-command.rb

IRB::ExtendCommandBundle::EXCB

IRB extended command

Public Class Methods

def_extend_command(cmd_name, cmd_class, load_file = nil, *aliases) click to toggle source

aliases = [commands_alias, flag], …

 
               # File irb/extend-command.rb, line 115
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 %Q[
      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 %Q[
      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
            
extend_object(obj) click to toggle source
 
               # File irb/extend-command.rb, line 179
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
            
install_extend_commands() click to toggle source
 
               # File irb/extend-command.rb, line 108
def self.install_extend_commands
  for args in @EXTEND_COMMANDS
    def_extend_command(*args)
  end
end
            
irb_original_method_name(method_name) click to toggle source
 
               # File irb/extend-command.rb, line 175
def self.irb_original_method_name(method_name)
  "irb_" + method_name + "_org"
end
            

Public Instance Methods

install_alias_method(to, from, override = NO_OVERRIDE) click to toggle source

override = {NO_OVERRIDE, OVERRIDE_PRIVATE_ONLY, OVERRIDE_ALL}

 
               # File irb/extend-command.rb, line 155
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
            
irb_context() click to toggle source
 
               # File irb/extend-command.rb, line 26
def irb_context
  IRB.CurrentContext
end
            
irb_exit(ret = 0) click to toggle source
 
               # File irb/extend-command.rb, line 22
def irb_exit(ret = 0)
  irb_context.exit(ret)
end
            
irb_load(*opts, &b) click to toggle source
 
               # File irb/ext/use-loader.rb, line 22
def irb_load(*opts, &b)
  ExtendCommand::Load.execute(irb_context, *opts, &b)
end
            
irb_require(*opts, &b) click to toggle source
 
               # File irb/ext/use-loader.rb, line 25
def irb_require(*opts, &b)
  ExtendCommand::Require.execute(irb_context, *opts, &b)
end
            

Commenting is here to help enhance the documentation. For example, code samples, or clarification of the documentation.

If you have questions about Ruby or the documentation, please post to one of the Ruby mailing lists. You will get better, faster, help that way.

If you wish to post a correction of the docs, please do so, but also file bug report so that it can be corrected for the next release. Thank you.

If you want to help improve the Ruby documentation, please visit Documenting-ruby.org.