Module, Class, and Objectimplement several callback methods, or hooks. These methods are not defined by default, but if you define them for a module, class, or object, then they will be invoked when certain events occur. This gives you an opportunity to extend Ruby’s behavior when classes are subclassed, when modules are included, or when methods are defined. Hook methods (except for some deprecated ones not described here) have names that end in “ed.”

When a new class is defined, Ruby invokes the class method inherited on the superclass of the new class, passing the new class object as the argument. This allows classes to add behavior to or enforce constraints on their descendants. Recall that class methods are inherited, so that the an inherited method will be invoked if it is defined by any of the ancestors of the new class. Define Object.inherited to receive notification of all new classes that are defined:

def Object.inherited(c)
  puts "class #{c} < #{self}"

When a module is included into a class or into another module, the included class method of the included module is invoked with the class or module object into which it was included as an argument. This gives the included module an opportunity to augment or alter the class in whatever way it wants—it effectively allows a module to define its own meaning for include. In addition to adding methods to the class into which it is included, a module with an included method might also alter the existing methods of that ...

Get The Ruby Programming Language now with O’Reilly online learning.

O’Reilly members experience live online training, plus books, videos, and digital content from 200+ publishers.