John Small wrote: > I know how to do this using a case statement but I want to know if > there's a more Rubyesque way of doing things. > > I'm screen scraping from a lot of different sources. They all have much > same data but it's presented in different ways with different access > methods. I use scRubyt to do the scraping and define most of the setup > for each way of presenting things in hashes which are read in from yaml > files. That way I can nearly DRY everything up into a few simple Ruby > routines with all the differences between the websites extracted into > data files. > > But there's one area I'm not satisfied with because some cases are so > different from the others that I have to write special routines just > for them. That's ok and I can name the routines to be used for those > cases in the yaml file. Then when the yaml config file is read in I can > use a switch statement to tell me how to process the data from each site > along the lines of > > result = case value > when name1_from_yaml: result1(param1,param2) > when name2_from_yaml: result2(param1,param2) > etc > end > > which is fine and dandy but what I really want to do is to be able to > put the name of the function to call into the yaml data file and then > somehow get to > > result = function_named_in_yaml_file(param1,param2) > > How do I do this in Ruby? In other words I want a string or symbol to > invoke a procedure without going via a case statement. > > Ta > > John Small ri Object#__send__ obj.__send__(method_name, arg1, arg2...) -- RMagick: http://rmagick.rubyforge.org/