Sha256: 634836499f35a6fce28abe297ae54db9237a6510cab47e959e8b6d3925302c10
Contents?: true
Size: 1.56 KB
Versions: 6
Compression:
Stored size: 1.56 KB
Contents
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"]]) # <option value="$">Dollar</option>\n<option value="DKK">Kroner</option> # # html_options([ "VISA", "Mastercard" ], "Mastercard") # <option>VISA</option>\n<option selected>Mastercard</option> # # html_options({ "Basic" => "$20", "Plus" => "$40" }, "$40") # <option value="$20">Basic</option>\n<option value="$40" selected>Plus</option> 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 << "<option value=\"#{element.last}\">#{element.first}</option>" else options << "<option value=\"#{element.last}\" selected>#{element.first}</option>" end else options << ((element != selected) ? "<option>#{element}</option>" : "<option selected>#{element}</option>") end end html_options.join("\n") end end
Version data entries
6 entries across 6 versions & 1 rubygems