small_image_url = XPath.first(item, “SmallImage/URL”).text
small_image_height = XPath.first(item, “SmallImage/Height
Units”).text
small_image_width = XPath.first(item, “SmallImage/Width
Units”).text
medium_image_url = XPath.first(item, “MediumImage/URL”).text
medium_image_height = XPath.first(item, “MediumImage/Height
Units”).text
medium_image_width = XPath.first(item, “MediumImage/Width
Units”).text
large_image_url = XPath.first(item, “LargeImage/URL”).text
large_image_height = XPath.first(item, “LargeImage/Height
Units”).text
large_image_width = XPath.first(item, “LargeImage/Width
Units”).text
Instead of writing this with this redundant style, how would a clever
rubyist write this? Could write a method to take the image name as an
input and return 3 params…
def image_attributes (item, image_name)
height = XPath.first(item, image_name + “/Height Units”).text
width = XPath.first(item, image_name + “/Width Units”).text
url = XPath.first(item, image_name + “/URL”).text
return height, width, url
end
small_image_height, small_image_width, small_image_url =
image_attributes(item, “SmallImage”)
medium_image_height, medium_image_width, medium_image_url =
image_attributes(item, “MediumImage”)
large_image_height, large_image_width, large_image_url =
image_attributes(item, “LargeImage”)
However, I’m thinking there are much nicer ways to do it…
any thoughts?
Hi-
On 10/11/06, [email protected] [email protected] wrote:
Units").text
large_image_url = XPath.first(item, “LargeImage/URL”).text
large_image_height = XPath.first(item, “LargeImage/Height
Units”).text
large_image_width = XPath.first(item, “LargeImage/Width
Units”).text
Instead of writing this with this redundant style, how would a clever
rubyist write this? Could write a method to take the image name as an
input and return 3 params…
class Image
attr_reader :height, :width, :url
def initialize(item, image_name)
@height = XPath.first(item, image_name + “/Height Units”).text
@width = XPath.first(item, image_name + “/Width Units”).text
@url = XPath.first(item, image_name + “/URL”).text
end
end
small_image = Image.new(item, “SmallImage”)
medium_image = Image.new(item, “MediumImage”)
large_image = Image.new(item, “LargeImage”)
Then you can access the url, height, and width via the appropriate
method on
each Image instance.
puts “SmallImage URL: #{small_image.url}”
puts “SmallImage Height: #{small_image.height}”
puts “SmallImage Width: #{small_image.width}”
I’m sure others will have much nicer ways, but this was the first thing
to
come to mind.
def image_attributes (item, image_name)
large_image_height, large_image_width, large_image_url =
image_attributes(item, “LargeImage”)
However, I’m thinking there are much nicer ways to do it…
any thoughts?
HTH,
Michael G.
On Thu, 12 Oct 2006, [email protected] wrote:
small_image_url = XPath.first(item, “SmallImage/URL”).text
small_image_height = XPath.first(item, “SmallImage/Height Units”).text
small_image_width = XPath.first(item, “SmallImage/Width Units”).text
medium_image_url = XPath.first(item, “MediumImage/URL”).text
medium_image_height = XPath.first(item, “MediumImage/Height Units”).text
medium_image_width = XPath.first(item, “MediumImage/Width Units”).text
large_image_url = XPath.first(item, “LargeImage/URL”).text
large_image_height = XPath.first(item, “LargeImage/Height Units”).text
large_image_width = XPath.first(item, “LargeImage/Width Units”).text
key4 = lambda{|key| key.downcase.gsub(%r/[^a-zA-Z0-9]+/,’_’)}
images =
[ “Small”, “Medium”, “Large” ].inject({}) do |h, which|
h.update key4[which] =>
[ "URL", "Height Units", "Width Units" ].inject({}) do |h, attr|
h.update key4[attr] =>
XPath.first(item, "#{ which }Image/#{ attr }").text
end
end
p images[‘medium’][‘height_units’]
p images[‘large’][‘url’]
-a
[email protected] [email protected] wrote:
Could write a method to take the image name as an
input and return 3 params…
def image_attributes (item, image_name)
height = XPath.first(item, image_name + “/Height Units”).text
width = XPath.first(item, image_name + “/Width Units”).text
url = XPath.first(item, image_name + “/URL”).text
return height, width, url
end
def image_attributes(item, image_name)
[“/Height Units”, “/Width Units”, “/URL”].collect do |s|
XPath.first(item, image_name + s).text
end
end
small_image_height, small_image_width, small_image_url =
image_attributes(item, “SmallImage”)
medium_image_height, medium_image_width, medium_image_url =
image_attributes(item, “MediumImage”)
large_image_height, large_image_width, large_image_url =
image_attributes(item, “LargeImage”)
[“small”, “medium”, “large”].each do |s|
eval %{ $#{s}_image_height, $#{s}_image_width, $#{s}_image_url =
image_attributes(item, “#{s.capitalize}Image”) }
end
Sorry, I ended up creating globals, $small_image_height etc. m.