sameera207
sameera207

Reputation: 16619

ruby metaprogramming - getting method names and parameter info for a class

I want to get class methods in an object. Please see the following example I have a class "user.rb"

class User
  def say_name

  end

  def walk(p1)

  end

  def run(p1, p2)

  end
end

and I wrote the following code

require 'user.rb'

a = User.new

arr = a.public_methods(all = false)

Above code will return the method name, But my question is I want to get the method name with parameters

def def run(p1, p2)

end

I want to get the method name ("run") and its parameter names (p1, p2) or parameter count (2)

can someone help me, thanks in advance

cheers

sameera

Upvotes: 3

Views: 2303

Answers (3)

Tim Scott
Tim Scott

Reputation: 15205

You want:

User.new.method(:run).parameters # => [[:req, :p1], [:req, :p2]]

req means it's a required field. Other values you might get are:

  • def run(p1 = nil) => [[:opt, :p1]]
  • def run(*p1) => [[:rest, :p1]]
  • def run(&p1) => [[:block, :p1]]
  • def run(p1:) => [[:key, :p1]]
  • def run(p1: nil) => [[:keyopt, :p1]]
  • def run(**p1) => [[:keyrest, :p1]]

Upvotes: 1

rogerdpack
rogerdpack

Reputation: 66711

if you want parameters then http://github.com/rdp/arguments is your friend

Upvotes: 1

Gishu
Gishu

Reputation: 136613

User.new.method(:run).arity   # => 2

Upvotes: 5

Related Questions