# Including a class

**URL:** <https://www.ruby-forum.com/t/including-a-class/66786>\
**Category:** Ruby\
**Created:** [August 29, 2006, 10:04am UTC](https://www.ruby-forum.com/t/including-a-class/66786 "2006-08-29T10:04:30Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![Ola\_B](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/o/858c86/32.png) [@Ola\_B](https://www.ruby-forum.com/u/Ola_B)\
**Post date:** [August 29, 2006, 10:04am UTC](https://www.ruby-forum.com/t/including-a-class/66786/1 "2006-08-29T10:04:30Z")

</div>

Hi,

As an extension on my earlier question of partial includes; I just  
noticed that you can’t include a Class, even though it is a Module.

Anyone have a way of doing this?

What I would like to do, is to be able to dynamically mix in some good  
methods from preexisting classes, depending on arguments to the  
constructor. Since I need to do it dynamically, and also need it  
differently for different instances of the class, I can’t make it  
inherit the other class.

What I would like is something like this; say I have class Foo and Bar,  
with many methods in them.

class Baz \< AnotherAbstractBaseClass  
def initialize(config={})  
self.singleton\_class.module\_eval do  
if config[:foo]  
partial\_include Foo, :method1, :method7  
elsif config[:bar]  
partial\_include Bar, :method1, :method7  
end  
end  
end  
end

Baz.new(:bar =\> true).method1

But I can’t have an instance of Bar or Foo so delegating is impossible.  
I need the methods to be in the the same instance. Any help? =)

–  
Ola B. ([http://ola-bini.blogspot.com](http://ola-bini.blogspot.com))  
JvYAML, RbYAML, JRuby and Jatha contributor  
System Developer, Karolinska Institutet ([http://www.ki.se](http://www.ki.se))  
OLogix Consulting ([http://www.ologix.com](http://www.ologix.com))

“Yields falsehood when quined” yields falsehood when quined.

---

<div class="post-metadata">

**Author:** ![Ola\_B](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/o/858c86/32.png) [@Ola\_B](https://www.ruby-forum.com/u/Ola_B)\
**Post date:** [August 29, 2006, 10:40am UTC](https://www.ruby-forum.com/t/including-a-class/66786/2 "2006-08-29T10:40:34Z")

</div>

On Tue, Aug 29, 2006 at 05:02:10PM +0900, Ola B. wrote:

> As an extension on my earlier question of partial includes; I just  
> noticed that you can’t include a Class, even though it is a Module.
> 
> Anyone have a way of doing this?
> 
> What I would like to do, is to be able to dynamically mix in some good  
> methods from preexisting classes, depending on arguments to the  
> constructor. Since I need to do it dynamically, and also need it  
> differently for different instances of the class, I can’t make it  
> inherit the other class.  
> […]

> But I can’t have an instance of Bar or Foo so delegating is impossible.  
> ========================  
> I need the methods to be in the the same instance.

Doesn’t this provide a very strong indication that you want to put the  
reusable methods in modules? 🙂

RUBY\_VERSION # =\> “1.8.5”  
RUBY\_RELEASE\_DATE # =\> “2006-08-25”  
module A; def foo; “A#foo” end end  
module B; def foo; “B#foo” end end  
class X; include A end  
class Y; include B end  
class Z  
def initialize(config = {})  
if config[:A]  
extend A  
elsif config[:B]  
extend B  
end  
end  
end

Z.new(:A =\> true).foo # =\> “A#foo”  
Z.new(:B =\> true).foo # =\> “B#foo”

[See [211308] for a Module#append\_from implementation that doesn’t  
clobber  
inherited methods.]

---

<div class="post-metadata">

**Author:** ![Ola\_B](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/o/858c86/32.png) [@Ola\_B](https://www.ruby-forum.com/u/Ola_B)\
**Post date:** [August 29, 2006, 10:56am UTC](https://www.ruby-forum.com/t/including-a-class/66786/3 "2006-08-29T10:56:35Z")

</div>

Mauricio F. wrote:

> > inherit the other class.  
> > […]
> 
> > But I can’t have an instance of Bar or Foo so delegating is impossible.  
> > ========================  
> > I need the methods to be in the the same instance.
> 
> Doesn’t this provide a very strong indication that you want to put the  
> reusable methods in modules? 🙂

See, that’s my problem. I have no control over them. Let me explain. I’m  
working on ActiveRecord-JDBC, and sorry to say, some features of JDBC  
aren’t really database independent (for example, DDL). So, my current  
track is to include parts of the original implementation to avoid this  
problem. Right now I have copied the source verbatim, but that is no  
solution. I want AR-JDBC to recognize that it’s being used with an  
Oracle JDBC driver, and then include some parts of OracleAdapter, (but  
only parts…)

–  
Ola B. ([http://ola-bini.blogspot.com](http://ola-bini.blogspot.com))  
JvYAML, RbYAML, JRuby and Jatha contributor  
System Developer, Karolinska Institutet ([http://www.ki.se](http://www.ki.se))  
OLogix Consulting ([http://www.ologix.com](http://www.ologix.com))

“Yields falsehood when quined” yields falsehood when quined.

---

<div class="post-metadata">

**Author:** ![Ola\_B](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/o/858c86/32.png) [@Ola\_B](https://www.ruby-forum.com/u/Ola_B)\
**Post date:** [August 29, 2006, 4:43pm UTC](https://www.ruby-forum.com/t/including-a-class/66786/4 "2006-08-29T16:43:30Z")

</div>

Ola B. wrote:

> Mauricio F. wrote:
> 
> > > inherit the other class.  
> > > […]
> > 
> > > But I can’t have an instance of Bar or Foo so delegating is impossible.  
> > > ========================  
> > > I need the methods to be in the the same instance.
> > 
> > Doesn’t this provide a very strong indication that you want to put the  
> > reusable methods in modules? 🙂
> 
> See, that’s my problem. I have no control over them. Let me explain. I’m  
> working on ActiveRecord-JDBC, and sorry to say, some features of JDBC  
> aren’t really database independent (for example, DDL). So, my current  
> track is to include parts of the original implementation to avoid this  
> problem. Right now I have copied the source verbatim, but that is no  
> solution. I want AR-JDBC to recognize that it’s being used with an  
> Oracle JDBC driver, and then include some parts of OracleAdapter, (but  
> only parts…)

Will simple composition and delegation work?

> –  
> Ola B. ([http://ola-bini.blogspot.com](http://ola-bini.blogspot.com))
