module ViewHelper
# Accepts a container (hash, array, enumerable, your type) and returns a string of option tags. Given a container
# where the elements respond to first and last (such as a two-element array), the "lasts" serve as option values and
# the "firsts" as option text. Hashes are turned into this form automatically, so the keys become "firsts" and values
# become lasts. If +selected+ is specified, the matching "last" or element will get the selected option-tag.
#
# Examples (call, result):
# html_options([["Dollar", "$"], ["Kroner", "DKK"]])
# \n
#
# html_options([ "VISA", "Mastercard" ], "Mastercard")
# \n
#
# html_options({ "Basic" => "$20", "Plus" => "$40" }, "$40")
# \n
def html_options(container, selected = nil)
container = container.to_a if Hash === container
html_options = container.inject([]) do |options, element|
if element.respond_to?(:first) && element.respond_to?(:last)
if element.last != selected
options << ""
else
options << ""
end
else
options << ((element != selected) ? "" : "")
end
end
html_options.join("\n")
end
end