# Dynamic method creation

**URL:** <https://www.ruby-forum.com/t/dynamic-method-creation/107483>\
**Category:** Ruby\
**Created:** [June 22, 2007, 5:29am UTC](https://www.ruby-forum.com/t/dynamic-method-creation/107483 "2007-06-22T05:29:38Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![matt](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/a6a055/32.png) [@matt](https://www.ruby-forum.com/u/matt)\
**Post date:** [June 22, 2007, 5:29am UTC](https://www.ruby-forum.com/t/dynamic-method-creation/107483/1 "2007-06-22T05:29:38Z")

</div>

Hi! Is there a way to create a regular expression type method and pull  
the pieces from that? I can find how to add methods dynamically but  
what I really need is something like this.

def \_requires id  
self.requires name, id  
end

def requires name, id  
…  
end

so i could type something like test\_requires 4 and it would transmit the  
parameters test and 4 to the requires method.

thanks!

Matt

---

<div class="post-metadata">

**Author:** ![matt](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/a6a055/32.png) [@matt](https://www.ruby-forum.com/u/matt)\
**Post date:** [June 22, 2007, 5:43am UTC](https://www.ruby-forum.com/t/dynamic-method-creation/107483/2 "2007-06-22T05:43:22Z")

</div>

On 6/21/07, Matt [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> …  
> Posted via [http://www.ruby-forum.com/](http://www.ruby-forum.com/).

The following (untested) code should work.

def method\_missing sym,\*args,&block  
sym = sym.to\_s  
if sym =~ /(\w+)\_requires/ && args.size == 1  
requires $1, \*args  
end  
end

---

<div class="post-metadata">

**Author:** ![matt](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/a6a055/32.png) [@matt](https://www.ruby-forum.com/u/matt)\
**Post date:** [June 22, 2007, 6:11am UTC](https://www.ruby-forum.com/t/dynamic-method-creation/107483/3 "2007-06-22T06:11:53Z")

</div>

Chris C. wrote:

> On 6/21/07, Matt [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:
> 
> > …  
> > Posted via [http://www.ruby-forum.com/](http://www.ruby-forum.com/).
> 
> The following (untested) code should work.
> 
> def method\_missing sym,\*args,&block  
> sym = sym.to\_s  
> if sym =~ /(\w+)\_requires/ && args.size == 1  
> requires $1, \*args  
> end  
> end

Thank you so much! Worked perfectly!
