NewMonarch (owner)

Revisions

gist: 9567 Download_button fork
public
Public Clone URL: git://gist.github.com/9567.git
Embed All Files: show embed
Text #
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
## Tests
 def test_grouped_options_for_select_with_array
      assert_dom_equal(
        "<optgroup label=\"North America\"><option value=\"US\">United States</option>\n<option value=\"Canada\">Canada</option></optgroup><optgroup label=\"Europe\"><option value=\"GB\">Great Britain</option>\n<option value=\"Germany\">Germany</option></optgroup>",
        grouped_options_for_select([
           ["North America",
               [['United States','US'],"Canada"]],
           ["Europe",
               [["Great Britain","GB"], "Germany"]]
         ])
      )
    end
 
    def test_grouped_options_for_select_with_selected_and_prompt
      assert_dom_equal(
          "<option value=\"\">Choose a product...</option><optgroup label=\"Hats\"><option value=\"Baseball Cap\">Baseball Cap</option>\n<option selected=\"selected\" value=\"Cowboy Hat\">Cowboy Hat</option></optgroup>",
          grouped_options_for_select([["Hats", ["Baseball Cap","Cowboy Hat"]]], "Cowboy Hat", "Choose a product...")
      )
    end
    
    def test_optgroups_with_with_options_with_hash
      assert_dom_equal(
         "<optgroup label=\"Europe\"><option value=\"Denmark\">Denmark</option>\n<option value=\"Germany\">Germany</option></optgroup><optgroup label=\"North America\"><option value=\"United States\">United States</option>\n<option value=\"Canada\">Canada</option></optgroup>",
         grouped_options_for_select({'North America' => ['United States','Canada'], 'Europe' => ['Denmark','Germany']})
      )
    end
 
 
 
def grouped_options_for_select(grouped_options, selected_key = nil, prompt = nil)
  str = String.new
  unless prompt.nil?
    prompt.kind_of?(String) ? prompt : 'Please select'
    str += content_tag :option, prompt, :value => ""
  end
  grouped_options = grouped_options.sort if grouped_options.is_a? Hash
  for group in grouped_options
    str += content_tag :optgroup, options_for_select(group[1], selected_key), :label => group[0]
  end
  str
end
 
# Sample usage (Array):
# grouped_options = [
# ['North America',
# ['United States','Canada']],
# ['Europe',
# ['Denmark','Germany','France']]
# ]
# grouped_options_for_select(grouped_options)
#
# Sample usage (Hash):
# grouped_options = {
# 'North America' => ['United States', 'Canada'],
# 'Europe' => ['Denmark','Germany','France']
# }
# grouped_options_for_select(grouped_options)