[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

Call overwritten method of included module?

Joshua Muheim

11/22/2007 11:22:00 PM

Hi all

module MyModule
def my_method
return "my module rocks!"
end
end

class MyClass
include(MyModule)

def my_method
return "my class rocks!"
end
end

Is there a way to call MyModule::my_method from within MyClass? "super"
sadly doesn't work...

Thanks a lot
Josh
--
Posted via http://www.ruby-....

4 Answers

Morton Goldberg

11/23/2007 1:33:00 AM

0

On Nov 22, 2007, at 6:21 PM, Joshua Muheim wrote:

> Hi all
>
> module MyModule
> def my_method
> return "my module rocks!"
> end
> end
>
> class MyClass
> include(MyModule)
>
> def my_method
> return "my class rocks!"
> end
> end
>
> Is there a way to call MyModule::my_method from within MyClass?
> "super"
> sadly doesn't work...

Perhaps this will do:

<code>
module MyModule
def my_method
"my module rocks!"
end
end

class MyClass
include MyModule
alias module_method my_method
def my_method
"#{module_method}\nmy class rocks!"
end
end

puts MyClass.new.my_method
</code>

<result>
my module rocks!
my class rocks!
</result>

Regards, Morton



Daniel Sheppard

11/23/2007 2:30:00 AM

0

> module MyModule
> def my_method
> return "my module rocks!"
> end
> end
>=20
> class MyClass
> include(MyModule)
>=20
> def my_method
> return "my class rocks!"
> end
> end
>=20
> Is there a way to call MyModule::my_method from within=20
> MyClass? "super"
> sadly doesn't work...

You'd need to alias the old method:

class MyClass
include(MyModule)
alias :old_my_method :my_method
def my_method
old_my_method
end
end

(If you're using rails/activesupport, you'd probably use
alias_method_chain to simplify things)

Dan.

Joshua Muheim

11/23/2007 12:23:00 PM

0

> (If you're using rails/activesupport, you'd probably use
> alias_method_chain to simplify things)
>
> Dan.

Thanks! Especially for the alias_method_chain hint! :-)
--
Posted via http://www.ruby-....

Robert Dober

11/23/2007 12:31:00 PM

0

On Nov 23, 2007 12:21 AM, Joshua Muheim <forum@josh.ch> wrote:
> Hi all
>
> module MyModule
> def my_method
> return "my module rocks!"
> end
> end
>
> class MyClass
> include(MyModule)
>
> def my_method
> return "my class rocks!"
> end
> end
>
> Is there a way to call MyModule::my_method from within MyClass? "super"
> sadly doesn't work...
super shall work and indeed does
module MyModule
def my_method
return "my module rocks!"
end
end

class MyClass
include(MyModule)

def my_method

return [ super, "my class rocks!" ].join("\n")
end
end

puts MyClass.new.my_method

HTH
Robert
>
> Thanks a lot
> Josh
> --
> Posted via http://www.ruby-....
>
>



--
what do I think about Ruby?
http://ruby-smalltalk.blo...