Module: IRB::MethodExtender
- Defined in:
- lib/irb/extend-command.rb
Overview
A convenience module for extending Ruby methods.
Instance Method Summary collapse
-
#def_post_proc(base_method, extend_method) ⇒ Object
Extends the given
base_method
with a postfix call to the givenextend_method
. -
#def_pre_proc(base_method, extend_method) ⇒ Object
Extends the given
base_method
with a prefix call to the givenextend_method
. -
#new_alias_name(name, prefix = "__alias_of__", postfix = "__") ⇒ Object
Returns a unique method name to use as an alias for the given
name
.
Instance Method Details
#def_post_proc(base_method, extend_method) ⇒ Object
Extends the given base_method
with a postfix call to the given extend_method
.
306 307 308 309 310 311 312 313 314 315 316 317 318 |
# File 'lib/irb/extend-command.rb', line 306 def def_post_proc(base_method, extend_method) base_method = base_method.to_s extend_method = extend_method.to_s alias_name = new_alias_name(base_method) module_eval %[ alias_method alias_name, base_method def #{base_method}(*opts) __send__ :#{alias_name}, *opts __send__ :#{extend_method}, *opts end ] end |
#def_pre_proc(base_method, extend_method) ⇒ Object
Extends the given base_method
with a prefix call to the given extend_method
.
290 291 292 293 294 295 296 297 298 299 300 301 302 |
# File 'lib/irb/extend-command.rb', line 290 def def_pre_proc(base_method, extend_method) base_method = base_method.to_s extend_method = extend_method.to_s alias_name = new_alias_name(base_method) module_eval %[ alias_method alias_name, base_method def #{base_method}(*opts) __send__ :#{extend_method}, *opts __send__ :#{alias_name}, *opts end ] end |
#new_alias_name(name, prefix = "__alias_of__", postfix = "__") ⇒ Object
Returns a unique method name to use as an alias for the given name
.
Usually returns #{prefix}#{name}#{postfix}<num>
, example:
new_alias_name('foo') #=> __alias_of__foo__
def ; end
new_alias_name('bar') #=> __alias_of__bar__2
327 328 329 330 331 332 333 334 335 336 337 |
# File 'lib/irb/extend-command.rb', line 327 def new_alias_name(name, prefix = "__alias_of__", postfix = "__") base_name = "#{prefix}#{name}#{postfix}" all_methods = instance_methods(true) + private_instance_methods(true) same_methods = all_methods.grep(/^#{Regexp.quote(base_name)}[0-9]*$/) return base_name if same_methods.empty? no = same_methods.size while !same_methods.include?(alias_name = base_name + no) no += 1 end alias_name end |