Module-Initialize.md
1.07 KB
Module Initialize
Introduction
A module is usually a mixin, so when an #initialize method is present it is
hard to tell initialization order and parameters so having #initialize
in a module is usually a bad idea.
Example
The Foo module below contains a method initialize. Although class B inherits from A, the inclusion of Foo stops A#initialize from being called.
class A
def initialize(a)
@a = a
end
end
module Foo
def initialize(foo)
@foo = foo
end
end
class B < A
include Foo
def initialize(b)
super('bar')
@b = b
end
end
A simple solution is to rename Foo#initialize and call that method by name:
module Foo
def setup_foo_module(foo)
@foo = foo
end
end
class B < A
include Foo
def initialize(b)
super 'bar'
setup_foo_module('foo')
@b = b
end
end
Current Support in reek
reek warns about module initialize when an instance method named initialize is present in a module.
Configuration
Module Initialize supports the Basic Smell Options.