I'm guessing your code either includes name/value pairs for html/xml tag
attributes or for a query string. I don't see why those two things would
be put in the same function, but if you REALLY want them to spend their
lives together:
return "" if properties.empty?
if prop_type == "tag"
properties.map {|item| " #{item.name}=#{item.value}"}
#or alternatively:
#" " + properties.map {|item|
"#{item.name}=#{item.value}"}.join(" ")
else
"?" properties.map {|item| "#{item.name}=#{item.value}"}
end
If you're using this function for what I think you're using it for...
make sure you escape things properly. For the query strings, use:
require 'uri'
"?" + properties.map {|item| "#{item.name}=#{URI.escape(item.value)}"}
For the attributes, make sure that you escape the values to remove &,"
and ' and any other character that doesn't belong in your encoding. Even
better, use something like Builder if you're building up XML/XHTML.
···
-----Original Message-----
From: marcus [mailto:m-lists@bristav.se]
Sent: Wednesday, 9 November 2005 5:41 AM
To: ruby-talk ML
Subject: Better way to build stringI'm trying to build a query string based on an array of
properties. Is there a shorter/nicer way to do the following?def build_query_string(properties, prop_type)
result = ""properties.each do |item|
if prop_type == "tag"
result += " #{item.name}=#{item.value}"
else
if result == ""
result = "?"
else
result += "&"
end
result += "#{item.name}=#{item.value}"
end
endresult
end/Marcus
#####################################################################################
This email has been scanned by MailMarshal, an email content filter.
#####################################################################################