Module: IRB::ExtendCommandBundle
- Defined in:
- lib/irb/extend-command.rb,
lib/irb/ext/use-loader.rb
Overview
Installs the default irb extensions command bundle.
Constant Summary collapse
- EXCB =
:nodoc:
ExtendCommandBundle
- NO_OVERRIDE =
See #install_alias_method.
0
- OVERRIDE_PRIVATE_ONLY =
See #install_alias_method.
0x01
- OVERRIDE_ALL =
See #install_alias_method.
0x02
- @@commands =
[]
Class Method Summary collapse
- .all_commands_info ⇒ Object
-
.def_extend_command(cmd_name, cmd_class, load_file, *aliases) ⇒ Object
Evaluate the given
cmd_name
on the givencmd_class
Class. -
.extend_object(obj) ⇒ Object
Installs alias methods for the default irb commands on the given object using #install_alias_method.
-
.install_extend_commands ⇒ Object
Installs the default irb commands.
-
.irb_original_method_name(method_name) ⇒ Object
:nodoc:.
-
.load_command(command) ⇒ Object
Convert a command name to its implementation class if such command exists.
Instance Method Summary collapse
-
#install_alias_method(to, from, override = NO_OVERRIDE) ⇒ Object
Installs alias methods for the default irb commands, see ::install_extend_commands.
-
#irb_context ⇒ Object
Displays current configuration.
-
#irb_load(*opts, &b) ⇒ Object
Loads the given file similarly to Kernel#load, see IrbLoader#irb_load.
-
#irb_require(*opts, &b) ⇒ Object
Loads the given file similarly to Kernel#require.
Class Method Details
.all_commands_info ⇒ Object
200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 |
# File 'lib/irb/extend-command.rb', line 200 def self.all_commands_info return @@commands unless @@commands.empty? user_aliases = IRB.CurrentContext.command_aliases.each_with_object({}) do |(alias_name, target), result| result[target] ||= [] result[target] << alias_name end @EXTEND_COMMANDS.each do |cmd_name, cmd_class, load_file, *aliases| if !defined?(ExtendCommand) || !ExtendCommand.const_defined?(cmd_class, false) require_relative load_file end klass = ExtendCommand.const_get(cmd_class, false) aliases = aliases.map { |a| a.first } if additional_aliases = user_aliases[cmd_name] aliases += additional_aliases end display_name = aliases.shift || cmd_name @@commands << { display_name: display_name, description: klass.description, category: klass.category } end @@commands end |
.def_extend_command(cmd_name, cmd_class, load_file, *aliases) ⇒ Object
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.
253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 |
# File 'lib/irb/extend-command.rb', line 253 def self.def_extend_command(cmd_name, cmd_class, load_file, *aliases) case cmd_class when Symbol cmd_class = cmd_class.id2name when String when Class cmd_class = cmd_class.name end line = __LINE__; eval %[ def #{cmd_name}(*opts, **kwargs, &b) Kernel.require_relative "#{load_file}" ::IRB::ExtendCommand::#{cmd_class}.execute(irb_context, *opts, **kwargs, &b) end ], nil, __FILE__, line for ali, flag in aliases @ALIASES.push [ali, cmd_name, flag] end end |
.extend_object(obj) ⇒ Object
Installs alias methods for the default irb commands on the given object using #install_alias_method.
302 303 304 305 306 307 308 309 |
# File 'lib/irb/extend-command.rb', line 302 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 ⇒ Object
Installs the default irb commands.
241 242 243 244 245 |
# File 'lib/irb/extend-command.rb', line 241 def self.install_extend_commands for args in @EXTEND_COMMANDS def_extend_command(*args) end end |
.irb_original_method_name(method_name) ⇒ Object
:nodoc:
296 297 298 |
# File 'lib/irb/extend-command.rb', line 296 def self.irb_original_method_name(method_name) # :nodoc: "irb_" + method_name + "_org" end |
.load_command(command) ⇒ Object
Convert a command name to its implementation class if such command exists
227 228 229 230 231 232 233 234 235 236 237 238 |
# File 'lib/irb/extend-command.rb', line 227 def self.load_command(command) command = command.to_sym @EXTEND_COMMANDS.each do |cmd_name, cmd_class, load_file, *aliases| next if cmd_name != command && aliases.all? { |alias_name, _| alias_name != command } if !defined?(ExtendCommand) || !ExtendCommand.const_defined?(cmd_class, false) require_relative load_file end return ExtendCommand.const_get(cmd_class, false) end nil end |
Instance Method Details
#install_alias_method(to, from, override = NO_OVERRIDE) ⇒ Object
Installs alias methods for the default irb commands, see ::install_extend_commands.
276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 |
# File 'lib/irb/extend-command.rb', line 276 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 Kernel.warn "irb: warn: can't alias #{to} from #{from}.\n" end end |
#irb_context ⇒ Object
Displays current configuration.
Modifying the configuration is achieved by sending a message to IRB.conf.
22 23 24 |
# File 'lib/irb/extend-command.rb', line 22 def irb_context IRB.CurrentContext end |
#irb_load(*opts, &b) ⇒ Object
Loads the given file similarly to Kernel#load, see IrbLoader#irb_load
19 20 21 |
# File 'lib/irb/ext/use-loader.rb', line 19 def irb_load(*opts, &b) ExtendCommand::Load.execute(irb_context, *opts, &b) end |
#irb_require(*opts, &b) ⇒ Object
Loads the given file similarly to Kernel#require
24 25 26 |
# File 'lib/irb/ext/use-loader.rb', line 24 def irb_require(*opts, &b) ExtendCommand::Require.execute(irb_context, *opts, &b) end |