Enforce implementation of Module method

Let’s say I have the following module:


module Parenting

def add_child(a_child)
self.children.push(a_child)
end

def delete_child(a_child)
self.children.delete(a_child)
end

def children
# need to implement
end

end

Is there a way to enforce that the ‘children’ method is implemented in
any class which includes this module? Or do I simply rely on a
commenting convention, as above?

On Thu, 13 Dec 2007 14:38:34 -0800, Paul wrote:

self.children.delete(a_child)

any class which includes this module? Or do I simply rely on a
commenting convention, as above?

It may be the more ruby way to rely on the commenting convention
(there’s
no need to define the children method at all in Parenting, just comment
somewhere that it needs to be implemented.)

But if checking is really a must, then you can check from
Parenting.included as follows:

module Parenting
def self.included klass
raise NoMethodError, “#{klass} must define #children” unless
klass.method_defined? :children
end
end

Phrogz <phrogz mac.com> writes:

module Parenting
def children
raise “OOPS!” #Better error message here
end
end

If a class defines that method, it will shadow the module method. As
long as the class method doesn’t try to call super, you should be good
to go.

And of course, there’s a rather handy NotImplementedError class just sat
there
in Ruby code if you want to use it.

On Dec 13, 3:38 pm, Paul [email protected] wrote:

self.children.delete(a_child)

any class which includes this module? Or do I simply rely on a
commenting convention, as above?

module Parenting
def children
raise “OOPS!” #Better error message here
end
end

If a class defines that method, it will shadow the module method. As
long as the class method doesn’t try to call super, you should be good
to go.

On Dec 14, 2007, at 9:58 AM, Gareth A. wrote:

to go.

And of course, there’s a rather handy NotImplementedError class just
sat there
in Ruby code if you want to use it.

If you simply don’t define Parenting#children, you’ll get a
NoMethodError. Isn’t that good enough?

-Rob

Rob B. http://agileconsultingllc.com
[email protected]