# Module#include (no need for ClassMethods)

**URL:** <https://www.ruby-forum.com/t/module-include-no-need-for-classmethods/122619>\
**Category:** Ruby\
**Created:** [December 10, 2007, 6:26am UTC](https://www.ruby-forum.com/t/module-include-no-need-for-classmethods/122619 "2007-12-10T06:26:03Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![Trans](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/dfb087/32.png) [@Trans](https://www.ruby-forum.com/u/Trans)\
**Post date:** [December 10, 2007, 6:26am UTC](https://www.ruby-forum.com/t/module-include-no-need-for-classmethods/122619/1 "2007-12-10T06:26:03Z")

</div>

If we define Module#include as:

class Module

```
alias _include include

def include(*mods)
  mods.each do |mod|
    if mod.const_defined?(:Self)
      extend mod::Self
      # pass it along if module
      if instance_of?(Module)
        const_set(:Self, Module.new) unless const_defined?(:Self)
        const_get(:Self).send(:include, mod::Self)
      end
    end
  end
  _include(*mods)
end

```

end

Example:

module X  
def x; “x”; end

```
module Self
  def q; "q"; end
end

```

end

class C  
include X  
end

C.q #=\> “q”

Benefits:

- Documents well in RDoc
- Fairly concise and clear
- Self module fits in well with “class \<\< self”
- No callbacks used.

T.

---

<div class="post-metadata">

**Author:** ![Trans](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/dfb087/32.png) [@Trans](https://www.ruby-forum.com/u/Trans)\
**Post date:** [December 10, 2007, 1:48pm UTC](https://www.ruby-forum.com/t/module-include-no-need-for-classmethods/122619/2 "2007-12-10T13:48:03Z")

</div>

On Dec 9, 11:24 pm, Trans [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> ```
> # pass it along if module
> 
> ```
> 
> class C
> 
> - No callbacks used.
> 
> T.

Clever. 🙂 It doesn’t seem to grok class vars inside of ::Self (?),  
but class/module\_eval works. Weird since class methods work without  
the eval.

Regards,  
Jordan
