class Refinement - Documentation for Ruby 4.0
Description: 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.
Keywords: ruby,class,Refinement

🔍

No recent searches

# 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
Source

    static VALUE
    refinement_import_methods(int argc, VALUE *argv, VALUE refinement)
    {
    }

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

Also aliased as: import_methods
target → class_or_module
Source

    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);
    }

Return the class or module refined by the receiver.

    module M
      refine String do
      end
    end

    M.refinements[0].target # => String