On 7/26/06, Tom Werner <tom / helmetstohardhats.org> wrote:
> 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)
>     "<li>#{args.join(', ')}</li>"
> end
>
> puts infobar_sites.map { |m| infobar_link(*m.to_a) }
>
> Which outputs
>
> <li>usmarket, The Market</li>
> <li>internet</li>
> <li>etf, ETFs</li>
> <li>china</li>
> <li>energy</li>
> <li>ce, Electronics</li>
> <li>media</li>
> <li>gold</li>
> <li>telecom</li>
> <li>biotech</li>
> <li>retail</li>
> <li>japan</li>
> <li>india</li>
>
> Tom
>
> Rob Sanheim wrote:
> > 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 += "<li>#{ link }</li>"
> > end
> > output
> >
> > any help greatly appreciated...
> >
> > thanks
> > - Rob
> >
>
>
> --
> Tom Werner
> Helmets to Hardhats
> Software Developer
> tom / helmetstohardhats.org
> 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



-- 
http://www.robsanheim.com
http://www.seekingalpha.com
http://www.ajaxian.com