Help me make this prettier and more ruby-ish

Hi,

I know this can be done much cleaner and with prettier code…but I
was having trouble getting my head around doing it with collect.

“infobar_link” creates hyperlinks - it takes a 1st parameter of a
string denoting a lookup value, and an optional second string
parameter for the link text.

So “infobar_sites” is a list of sites I want to create links to, and
as you can see they can either be just a lookup value (single string),
or an array with the lookup and a title to override the default. Then
I just enumerate thru and create a list of the links.

infobar_sites = [ [“usmarket”, “The Market”],
“internet”,
[“etf”, “ETFs”],
“china”,
“energy”,
[“ce”, “Electronics”],
“media”,
“gold”,
“telecom”,
“biotech”,
“retail”,
“japan”,
“india” ]
output = “”
infobar_sites.each do |args|
link = nil
if args.is_a? String
link = infobar_link(args)
else
link = infobar_link(args[0], args[1])
end
output += “

  • #{ link }

  • end
    output

    any help greatly appreciated…

    thanks

    • Rob

    How about something like this:

    infobar_sites = [ [“usmarket”, “The Market”],
    “internet”,
    [“etf”, “ETFs”],
    “china”,
    “energy”,
    [“ce”, “Electronics”],
    “media”,
    “gold”,
    “telecom”,
    “biotech”,
    “retail”,
    “japan”,
    “india” ]

    def infobar_link(*args)

  • #{args.join(’, ')}

  • end

    puts infobar_sites.map { |m| infobar_link(*m.to_a) }

    Which outputs

  • usmarket, The Market
  • internet
  • etf, ETFs
  • china
  • energy
  • ce, Electronics
  • media
  • gold
  • telecom
  • biotech
  • retail
  • japan
  • india
  • Tom

    On 7/26/06, Tom W. [email protected] wrote:

                    "telecom",
    
  • telecom
  • > I know this can be done much cleaner and with prettier code...but I > > "biotech", > end


    Tom W.
    Helmets to Hardhats
    Software Developer
    [email protected]
    www.helmetstohardhats.org

    Hm, I think that will work, I’ll just have to change the infobar_link
    to use variable args. Right now its signature is this:

    def infobar_link(slug, link_text = nil)

    if link_text is nil, get a default from the db record found via slug

    So I suppose I could change it to just test like this:

    def infobar_link(*args)
    if args[1] # use the supplied link_text, else is must be nil so use
    the default
    # …

    thanks …just kinda thinking out loud here.

    • Rob