class Refinement

Refinement is a class of the self (current context) inside refine statement. It allows to import methods from other modules, see import_methods.

Public Instance Methods

import_methods(module, ...) → self click to toggle source

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
static VALUE
refinement_import_methods(int argc, VALUE *argv, VALUE refinement)
{
}
Also aliased as: import_methods
refined_class → class click to toggle source

Deprecated; prefer target.

Return the class refined by the receiver.

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 → class_or_module click to toggle source

Return the class or module refined by the receiver.

module M
  refine String do
  end
end

M.refinements[0].target # => String
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);
}