Passing args from within method_missing

Hi,

I have an hash of code blocks(procs?), @styles, and am trying to call these using method missing. Problem is, some take one argument, and others take two, and I can't seem to pass args to them without if being passed as an array

Here's the method_missing code

   def method_missing style_type, *args
     case args.size
       when 1 : @styles [style_type].call(args[0])
       when 2 : @styles [style_type].call(args[0], args[1])
     end
   end

I'm sure there's a way for me to get rid of the case statement, but if I try
@styles [style_type].call(args) it just gets sent an array.

Question is, how do I send the contents of the args array?

I realise I should probably have a means of dealing with a genuine method_missing. What's the 'ruby way' of doing this? if I call method_missing again, wont I end in a recursive mess?

Is this making any sense?

Cheers,
Dave

Alle mercoledì 13 giugno 2007, Sharon Phillips ha scritto:

Hi,

I have an hash of code blocks(procs?), @styles, and am trying to call
these using method missing. Problem is, some take one argument, and
others take two, and I can't seem to pass args to them without if
being passed as an array

Here's the method_missing code

   def method_missing style_type, *args
     case args.size
       when 1 : @styles [style_type].call(args[0])
       when 2 : @styles [style_type].call(args[0], args[1])
     end
   end

I'm sure there's a way for me to get rid of the case statement, but
if I try
@styles [style_type].call(args) it just gets sent an array.

Question is, how do I send the contents of the args array?

I realise I should probably have a means of dealing with a genuine
method_missing. What's the 'ruby way' of doing this? if I call
method_missing again, wont I end in a recursive mess?

Is this making any sense?

Cheers,
Dave

def method_missing style_type, *args
  @styles[style_type].call(*args)
end

I hope this helps

Stefano

Sharon Phillips wrote:

@styles [style_type].call(args) it just gets sent an array.

Isn't "@styles [style_type].call(*args)" what you are looking for?

Wolfgang Nádasi-Donner

···

--
Posted via http://www.ruby-forum.com/\.

def method_missing(symbol, *args)
       if prc = @styles[symbol]
            prc.call(*args)
       else
            super
       end
   end

···

On 6/13/07, Sharon Phillips <phillipsds@yahoo.co.uk> wrote:

Here's the method_missing code

   def method_missing style_type, *args
     case args.size
       when 1 : @styles [style_type].call(args[0])
       when 2 : @styles [style_type].call(args[0], args[1])
     end
   end

I'm sure there's a way for me to get rid of the case statement, but
if I try
@styles [style_type].call(args) it just gets sent an array.

Question is, how do I send the contents of the args array?

I realise I should probably have a means of dealing with a genuine
method_missing. What's the 'ruby way' of doing this? if I call
method_missing again, wont I end in a recursive mess?

--
Rick DeNatale

My blog on Ruby
http://talklikeaduck.denhaven2.com/

IPMS/USA Region 12 Coordinator
http://ipmsr12.denhaven2.com/

Visit the Project Mercury Wiki Site
http://www.mercuryspacecraft.com/

def method_missing style_type, *args
  @styles[style_type].call(*args)
end

I hope this helps

Certainly does. I knew it would be something simple, just couldn't figure it out and my Pickaxe is at work...

Thanks heaps Stefano and Wolfgang