Advanced Ruby: class << self

Posted by Daniel Vela on May 16, 2020

Advance Ruby: class « self

With class << self every method declared after this becomes a class method.

class Person
  class << self
    def once(*ids)
    # code
    end
  end
end

But if class << self is declared inside an instance method, then self relates to the object being called. This means that the following declarations affect that object and not its class.

class Person
  def process
    method2
  end
private
  def process1
    class << self
      alias process process2
    end
  end
  def process2
    class << self
      alias process process1
    end
  end
  
  alias process process1
end

This code makes that every time method process of an instance of class Person is called, an alias provokes that the next time process is called, the function called will be different: from process1 will change to process2 and so on.