Andrew Walker
Andrew Walker

Reputation: 29

Ruby how to use method parameter embedded in call to another method other than just puts

In Ruby I want to use an input parameter for REST verb (like 'Post') in a call to Net::HTTP new but I can't work out how to embed the parameter in the statement. I have the param called restVerb which prints fine in puts "Verb is #{restVerb}" but not in request = Net::HTTP::#{restVerb}.new(uri) - I get undefined method request' for Net::HTTP:Class (NoMethodError)` so it clearly doesn't recognise the parameter's value in the statement. I could use a case statement but wanted to make it more generic. What am I doing wrong?

I've tried the above syntax and a few others like request = Net::HTTP::restVerb.new(uri) or request = Net::HTTP::$restVerb.new(uri) I'm new to Ruby so be gentle with me please.

Upvotes: 1

Views: 35

Answers (1)

anothermh
anothermh

Reputation: 10526

Use Object.const_get to convert a string to an actual constant:

klass = Object.const_get("Net::HTTP::#{restVerb}")
=> Net::HTTP::Post

klass.new(uri)
=> #<Net::HTTP::Post POST>

Upvotes: 1

Related Questions