123456789_123456789_123456789_123456789_123456789_

Class: Refinement

Relationships & Source Files
Super Chains via Extension / Inclusion / Inheritance
Class Chain:
self, ::Module
Instance Chain:
self, ::Module
Inherits: Module
Defined in: class.c,
class.c,
eval.c,
object.c

Overview

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

Class Method Summary

::Module - Inherited

.constants

In the first form, returns an array of the names of all constants accessible from the point of call.

.gccct_clear_table,
.nesting

Returns the list of Modules nested at the point of call.

.new

Creates a new anonymous module.

.used_modules

Returns an array of all modules used in the current scope.

.used_refinements

Returns an array of all modules used in the current scope.

Instance Attribute Summary

::Module - Inherited

#singleton_class?

Returns true if mod is a singleton class or false if it is an ordinary class or module.

Instance Method Summary

::Module - Inherited

#<

Returns true if mod is a subclass of other.

#<=

Returns true if mod is a subclass of other or is the same as other.

#<=>

Comparison—Returns -1, 0, +1 or nil depending on whether module includes other_module, they are the same, or if module is included by other_module.

#==

Alias for Object#eql?.

#===

Case Equality—Returns true if obj is an instance of mod or an instance of one of mod’s descendants.

#>

Returns true if mod is an ancestor of other.

#>=

Returns true if mod is an ancestor of other, or the two modules are the same.

#alias_method

Makes new_name a new copy of the method old_name.

#ancestors

Returns a list of modules included/prepended in mod (including mod itself).

#attr

The first form is equivalent to #attr_reader.

#attr_accessor

Defines a named attribute for this module, where the name is symbol.id2name, creating an instance variable (@name) and a corresponding access method to read it.

#attr_reader

Creates instance variables and corresponding methods that return the value of each instance variable.

#attr_writer

Creates an accessor method to allow assignment to the attribute symbol.id2name.

#autoload

Registers filename to be loaded (using Kernel.require) the first time that const (which may be a ::String or a symbol) is accessed in the namespace of mod.

#autoload?

Returns filename to be loaded if name is registered as autoload in the namespace of mod or one of its ancestors.

#class_eval

Evaluates the string or block in the context of mod, except that when a block is given, constant/class variable lookup is not affected.

#class_exec

Evaluates the given block in the context of the class/module.

#class_variable_defined?

Returns true if the given class variable is defined in obj.

#class_variable_get

Returns the value of the given class variable (or throws a ::NameError exception).

#class_variable_set

Sets the class variable named by symbol to the given object.

#class_variables

Returns an array of the names of class variables in mod.

#const_defined?

Says whether mod or its ancestors have a constant with the given name:

#const_get

Checks for a constant with the given name in mod.

#const_missing

Invoked when a reference is made to an undefined constant in mod.

#const_set

Sets the named constant to the given object, returning that object.

#const_source_location

Returns the ::Ruby source filename and line number containing the definition of the constant specified.

#constants

Returns an array of the names of the constants accessible in mod.

#define_method

Defines an instance method in the receiver.

#deprecate_constant

Makes a list of existing constants deprecated.

#freeze

Prevents further modifications to mod.

#include

Invokes Module#append_features on each parameter in reverse order.

#include?

Returns true if module is included or prepended in mod or one of mod’s ancestors.

#included_modules

Returns the list of modules included or prepended in mod or one of mod’s ancestors.

#inspect

Alias for Module#to_s.

#instance_method

Returns an ::UnboundMethod representing the given instance method in mod.

#instance_methods

Returns an array containing the names of the public and protected instance methods in the receiver.

#method_defined?

Returns true if the named method is defined by mod.

#module_eval
#module_exec
#name

Returns the name of the module mod.

#prepend

Invokes Module#prepend_features on each parameter in reverse order.

#private_class_method

Makes existing class methods private.

#private_constant

Makes a list of existing constants private.

#private_instance_methods

Returns a list of the private instance methods defined in mod.

#private_method_defined?

Returns true if the named private method is defined by mod.

#protected_instance_methods

Returns a list of the protected instance methods defined in mod.

#protected_method_defined?

Returns true if the named protected method is defined mod.

#public_class_method

Makes a list of existing class methods public.

#public_constant

Makes a list of existing constants public.

#public_instance_method

Similar to instance_method, searches public method only.

#public_instance_methods

Returns a list of the public instance methods defined in mod.

#public_method_defined?

Returns true if the named public method is defined by mod.

#refinements

Returns an array of Refinement defined within the receiver.

#remove_class_variable

Removes the named class variable from the receiver, returning that variable’s value.

#remove_method

Removes the method identified by symbol from the current class.

#set_temporary_name

Sets the temporary name of the module.

#to_s

Returns a string representing this module or class.

#undef_method

Prevents the current class from responding to calls to the named method.

#undefined_instance_methods

Returns a list of the undefined instance methods defined in mod.

#append_features

When this module is included in another, ::Ruby calls #append_features in this module, passing it the receiving module in mod.

#const_added

Invoked as a callback whenever a constant is assigned on the receiver.

#extend_object

Extends the specified object by adding this module’s constants and methods (which are added as singleton methods).

#extended

The equivalent of included, but for extended modules.

#included

Callback invoked whenever the receiver is included in another module or class.

#method_added

Invoked as a callback whenever an instance method is added to the receiver.

#method_removed

Invoked as a callback whenever an instance method is removed from the receiver.

#method_undefined

Invoked as a callback whenever an instance method is undefined from the receiver.

#module_function

Creates module functions for the named methods.

#prepend_features

When this module is prepended in another, ::Ruby calls #prepend_features in this module, passing it the receiving module in mod.

#prepended

The equivalent of included, but for prepended modules.

#private

With no arguments, sets the default visibility for subsequently defined methods to private.

#protected

With no arguments, sets the default visibility for subsequently defined methods to protected.

#public

With no arguments, sets the default visibility for subsequently defined methods to public.

#refine

Refine mod in the receiver.

#remove_const

Removes the definition of the given constant, returning that constant’s previous value.

#ruby2_keywords

For the given method names, marks the method as passing keywords through a normal argument splat.

#using

Import class refinements from module into the current class or module definition.

#initialize_clone, #initialize_copy,
#with_yjit

Internal helper for built-in initializations to define methods only when YJIT is enabled.

Constructor Details

This class inherits a constructor from Module

Instance Method Details

#import_methods(module, ...) ⇒ self (private)

Imports methods from modules. Unlike Module#include, 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
[ GitHub ]

  
# File 'class.c', line 1358

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

#targetclass_or_module

Return the class or module refined by the receiver.

module M
  refine String do
  end
end

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

  
# File 'eval.c', line 1431

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