[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

help me make this prettier and more ruby-ish

Rob Sanheim

7/26/2006 10:25:00 PM

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

--
http://www.robs...
http://www.seekin...
http://www.a...

2 Answers

Tom Werner

7/26/2006 10:36:00 PM

0

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


Rob Sanheim

7/26/2006 10:55:00 PM

0

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.robs...
http://www.seekin...
http://www.a...