Ruby - Call method passing values of array as each parameter

Posted by Markus Orreilly on Stack Overflow See other posts from Stack Overflow or by Markus Orreilly
Published on 2010-03-29T01:10:18Z Indexed on 2010/03/29 1:13 UTC
Read the original article Hit count: 398

Filed under:
|
|
|

I'm currently stuck on this problem. I've hooked into the method_missing function in a class I've made. When a function is called that doesn't exist, I want to call another function I know exists, passing the args array as all of the parameters to the second function. Does anyone know a way to do this? For example, I'd like to do something like this:

class Blah
    def valid_method(p1, p2, p3, opt=false)
        puts "p1: #{p1}, p2: #{p2}, p3: #{p3}, opt: #{opt.inspect}"
    end

    def method_missing(methodname, *args)
        if methodname.to_s =~ /_with_opt$/
            real_method = methodname.to_s.gsub(/_with_opt$/, '')
            send(real_method, args) # <-- this is the problem
        end
    end
end

b = Blah.new
b.valid_method(1,2,3)           # output: p1: 1, p2: 2, p3: 3, opt: false
b.valid_method_with_opt(2,3,4)  # output: p1: 2, p2: 3, p3: 4, opt: true

(Oh, and btw, the above example doesn't work for me)

© Stack Overflow or respective owner

Related posts about ruby

Related posts about array