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. # 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
end
end
b = Bar.new
b. # return :bar
b.foo # raises a NotImplementedError with the specified error message "Version expected!!!"
Defined Under Namespace
Modules: ClassMethods
Class Method Summary collapse
-
.default_error_message(method_name) ⇒ String
Create the default error message for the given method name.
-
.extended(base) ⇒ Object
Inject the
subclass_must_implementmacro. -
.included(base) ⇒ Object
Inject the
subclass_must_implementmacro. -
.version ⇒ String
Return the Gem version as a string.
Class Method Details
.default_error_message(method_name) ⇒ String
Create the default error message for the given method name.
64 65 66 |
# File 'lib/subclass_must_implement.rb', line 64 def self.(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 |
.version ⇒ String
Return the Gem version as a string.
57 58 59 |
# File 'lib/subclass_must_implement.rb', line 57 def self.version "0.0.2" end |