Module: SubclassMustImplement

Defined in:
lib/subclass_must_implement.rb

Overview

Either ‘include SubclassMustImplement` or `extend SubclassMustImplement` in your base class. Then call subclass_must_implement with a list of required method names as symbols. You can optionally pass in a custom error message using the err_message named argument.

Example 1:

class BaseFoo
  include SubclassMustImplement

  subclass_must_implement :foo, :bar, :baz
end

class Foo < BaseFoo
  def foo
    :foo
  end
end

f = Foo.new
f.foo # returns :foo
f.bar # raises a NotImplementedError that "bar" must be implemented in the subclass
f.baz # raises a NotImplementedError that "baz" must be implemented in the subclass
f.qux # raises a MethodMissing

Example 2:

class BaseBar
  extend SubclassMustImplement

  subclass_must_implement :foo, :bar, err_message: "Version expected!!!"
end

class Bar < BaseBar
  def bar
    :bar
  end
end

b = Bar.new
b.bar # return :bar
b.foo # raises a NotImplementedError with the specified error message "Version expected!!!"

Defined Under Namespace

Modules: ClassMethods

Class Method Summary collapse

Class Method Details

.default_error_message(method_name) ⇒ String

Create the default error message for the given method name.

Parameters:

  • method_name (String|Symbol)

Returns:

  • (String)


64
65
66
# File 'lib/subclass_must_implement.rb', line 64

def self.default_error_message(method_name)
  "`#{method_name}` must be implemented in a subclass."
end

.extended(base) ⇒ Object

Inject the subclass_must_implement macro.



51
52
53
# File 'lib/subclass_must_implement.rb', line 51

def self.extended(base)
  base.extend ClassMethods
end

.included(base) ⇒ Object

Inject the subclass_must_implement macro.



46
47
48
# File 'lib/subclass_must_implement.rb', line 46

def self.included(base)
  base.extend ClassMethods
end

.versionString

Return the Gem version as a string.

Returns:

  • (String)


57
58
59
# File 'lib/subclass_must_implement.rb', line 57

def self.version
  "0.0.2"
end