Support for the Ruby 2.4 series has ended. See here for reference.
A convenience module for extending Ruby methods.
Extends the given base_method with a postfix call to the given extend_method.
# File irb/extend-command.rb, line 275
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
Extends the given base_method with a prefix call to the given extend_method.
# File irb/extend-command.rb, line 259
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
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 bar; end new_alias_name('bar') #=> __alias_of__bar__2
# File irb/extend-command.rb, line 296
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