Class: Refinement
Overview
*********************************************************************
Refinement is a class of the +self+ (current context) inside +refine+
statement. It allows to import methods from other modules, see #import_methods.
Instance Method Summary collapse
-
#import_methods(*args) ⇒ Object
private
call-seq: import_methods(module, …) -> self.
-
#refined_class ⇒ Class
Deprecated; prefer #target.
-
#target ⇒ Object
Return the class or module refined by the receiver.
Methods inherited from Module
#<, #<=, #<=>, #==, #===, #>, #>=, #alias_method, #ancestors, #append_features, #attr, #attr_accessor, #attr_reader, #attr_writer, #autoload, #autoload?, #class_eval, #class_exec, #class_variable_defined?, #class_variable_get, #class_variable_set, #class_variables, #const_added, #const_defined?, #const_get, #const_missing, #const_set, #const_source_location, constants, #constants, #define_method, #deprecate_constant, #extend_object, #extended, #freeze, #include, #include?, #included, #included_modules, #initialize, #initialize_clone, #initialize_copy, #instance_method, #instance_methods, #method_added, #method_defined?, #method_removed, #method_undefined, #module_eval, #module_exec, #module_function, #name, nesting, #prepend, #prepend_features, #prepended, #private, #private_class_method, #private_constant, #private_instance_methods, #private_method_defined?, #protected, #protected_instance_methods, #protected_method_defined?, #public, #public_class_method, #public_constant, #public_instance_method, #public_instance_methods, #public_method_defined?, #refine, #refinements, #remove_class_variable, #remove_const, #remove_method, #ruby2_keywords, #set_temporary_name, #singleton_class?, #to_s, #undef_method, #undefined_instance_methods, used_modules, used_refinements, #using
Constructor Details
This class inherits a constructor from Module
Instance Method Details
#import_methods(*args) ⇒ Object (private)
call-seq:
import_methods(module, ...) -> self
Imports methods from modules. Unlike Module#include,
Refinement#import_methods copies methods and adds them into the refinement,
so the refinement is activated in the imported methods.
Note that due to method copying, only methods defined in Ruby code can be imported.
module StrUtils
def indent(level)
' ' * level + self
end
end
module M
refine String do
import_methods StrUtils
end
end
using M
"foo".indent(3)
#=> " foo"
module M
refine String do
import_methods Enumerable
# Can't import method which is not defined with Ruby code: Enumerable#drop
end
end
863 864 865 866 |
# File 'class.c', line 863
static VALUE
refinement_import_methods(int argc, VALUE *argv, VALUE refinement)
{
}
|
#refined_class ⇒ Class
Deprecated; prefer #target.
Return the class refined by the receiver.
1377 1378 1379 1380 1381 1382 |
# File 'eval.c', line 1377
static VALUE
rb_refinement_refined_class(VALUE module)
{
rb_warn_deprecated_to_remove("3.4", "Refinement#refined_class", "Refinement#target");
return rb_refinement_module_get_refined_class(module);
}
|
#target ⇒ Object
Return the class or module refined by the receiver.
module M
refine String do
end
end
M.refinements[0].target # => String
1360 1361 1362 1363 1364 1365 1366 1367 |
# File 'eval.c', line 1360
VALUE
rb_refinement_module_get_refined_class(VALUE module)
{
ID id_refined_class;
CONST_ID(id_refined_class, "__refined_class__");
return rb_attr_get(module, id_refined_class);
}
|