On Fri, Sep 18, 2009 at 12:10 PM, Lin Wj <mailbox.lwj / gmail.com> wrote:
>  ¨Âåæ óåìæ®äåöåìïðåòßïðôéïîó¨ªáòçó>  ¨Âåôãèßïðôéïîó¨û§áòåá§½¾§äåöåìïðåò󧬧éîäåø§ ½¾ áòçó®æéòóôý©
>  ¨Âîä
>
>  ¨Âåæ óåìæ®ðòéïòéôùßïðôéïîó¨ªáòçó©
>  ¨Âåôãèßïðôéïîó¨û§áòåá§½¾§ðòéïòéôù§¬§éîäåø§ ½¾ áòçó®æéòóôý©
>  ¨Âîä
>
>  ¨Âåæ óåìæ®óôáôõóßïðôéïîó¨ªáòçó©
>  ¨Âåôãèßïðôéïîó¨û§áòåá§½¾§óôáôõ󧬧éîäåø§ ½¾ áòçó®æéòóôý©
>  ¨Âîä
>
> is there anyway to dynamically create methods with a specific name ?
>
> ie: create methods which are
>
> def self.??????_options(*args)
>  ¨Âåôãèßïðôéïîó¨û§áòåá§½¾§¿¿¿¿¿§¬§éîäåø½¾ áòçó®æéòóôý©
>  ¨Âîä

As Ralf said, you can use define_method. If you want to create them
up-front (untested):

%w{developer priority status}.each do |area|
  define_method "#{area}_options" do |*args|
    fetch_options({'area' => area, 'index' => args.first})
  end
end

Of course this needs to be done in the scope where self is the
singleton class of the object (see a recent post about this).

If you want to define them lazily, you can use method_missing (untested):

def method_missing (meth, *args, &blk)
  m = meth.match /(.*)_options$/
  super unless m
  define_method meth do |*arguments|
    fetch_options({'area' => m[1], 'index' => arguments.first})
  end
end

Hope this helps,

Jesus.