From: Daniel N Date: 2006-11-06T23:48:47+09:00 Subject: Include and Extend Again.... ------=_Part_56662_22252511.1162824522741 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Content-Disposition: inline Hi all, I must be really thick with this because I cannot get my class to behave. What I want to do is class AClass include AModule end and have that module mixin both instance and class methods. I've seen this done, but obviously I don't understand what's really going on because I can't make it happen. I know this has been discussed on the list before as well. I've reviewed that as well. I fell really thick with this one. It's just not going in. Here's what I've tried (don't worry it's short). I put this into a single file and just run it. Any pointers to the source of my misunderstanding would be great. Thanx module A def self.included(base) base.extend ClassMethods base.send( :include, InstanceMethods ) end module InstanceMethods def b puts "I'm an instance method" end end module ClassMethods def a puts "I'm a class method" end end end class Object include A end require 'test/unit' class MyModuleTest < Test::Unit::TestCase def test_object_should_have_the_a_method_as_class_method assert Object.respond_to?( :a ) end def test_object_should_not_have_the_a_method_as_instance_method assert !Object.new.respond_to?( :a ) end def test_object_should_have_the_b_method_as_instance_method assert Object.new.respond_to?( :b ) end def test_object_should_not_have_the_b_method_as_class_method assert !Object.respond_to?( :b ) end end require 'test/unit/ui/console/testrunner' Test::Unit::UI::Console::TestRunner.run(MyModuleTest) ------=_Part_56662_22252511.1162824522741--