class Module

Public Instance Methods

abstract_method(*names) click to toggle source

Defines one or more abstract methods with given names in a class or module. When called, the abstract method will raise an ‘AbstractMethodCalled` exception with a helpful message.

@example

class AbstractClass
  abstract_method :foo
end

class ConcreteClass < AbstractClass
  def foo
    42
  end
end

AbstractClass.new.foo # raises AbstractMethodCalled
ConcreteClass.new.foo # => 42

@param [Array<Symbol>] names the names of defined abstract methods

# File lib/abstract_method.rb, line 32
def abstract_method(*names)
  definitor = self

  names.each do |name|
    define_method name do |*args|
      raise AbstractMethodCalled,
            "Called unimplemented abstract method #{self.class}##{name} " +
            "(defined in #{definitor.class.name.downcase} #{definitor})."
    end
  end
end