herbie 0.2.0 → 0.3.1

Sign up to get free protection for your applications and to get access to all the features.
data/lib/herbie.rb CHANGED
@@ -3,5 +3,5 @@ require 'herbie/generic_helpers.rb'
3
3
  require 'herbie/html_helpers.rb'
4
4
 
5
5
  module Herbie
6
- VERSION = '0.2.0'
6
+ VERSION = '0.3.1'
7
7
  end
@@ -12,7 +12,20 @@ module Herbie
12
12
  "<#{name}#{' ' + attributes(attrs) unless attrs.empty?}>#{content}</#{name}>"
13
13
  end
14
14
  else
15
- "<#{name}#{' ' + attributes(attrs) unless attrs.empty?}>"
15
+ case name
16
+ when :select
17
+ option_tags = attrs.delete(:options).collect do |option|
18
+ if option.key? :label
19
+ option[:content] = option.delete(:options).collect {|o| tag :option, o}.join
20
+ tag :optgroup, option
21
+ else
22
+ tag :option, option
23
+ end
24
+ end.join
25
+ "<#{name}#{' ' + attributes(attrs) unless attrs.empty?}>#{option_tags}</#{name}>"
26
+ else
27
+ "<#{name}#{' ' + attributes(attrs) unless attrs.empty?}>"
28
+ end
16
29
  end
17
30
  end
18
31
 
data/spec/herbie_spec.rb CHANGED
@@ -46,6 +46,90 @@ describe Herbie::Helpers do
46
46
 
47
47
  tag(:meta, attrs).should == "<meta name=\"#{attrs[:name]}\" content=\"#{attrs[:content]}\">"
48
48
  end
49
+
50
+ it "should output select tags with a supplied list of options" do
51
+ attrs = {
52
+ :name => "colour",
53
+ :options => [
54
+ {:content => "White", :value => :common},
55
+ {:content => "Green", :value => :uncommon},
56
+ {:content => "Blue", :value => :rare},
57
+ {:content => "Purple", :value => :epic},
58
+ {:content => "Orange", :value => :legendary}
59
+ ]
60
+ }
61
+
62
+ tag(:select, attrs).should == "<select name=\"colour\"><option value=\"common\">White</option><option value=\"uncommon\">Green</option><option value=\"rare\">Blue</option><option value=\"epic\">Purple</option><option value=\"legendary\">Orange</option></select>"
63
+ end
64
+
65
+ it "should output select tags with a supplied list of optgroups" do
66
+ attrs = {
67
+ :name => "vehicles",
68
+ :options => [
69
+ {
70
+ :label => "Cars",
71
+ :options => [
72
+ {:content => "Ferrari", :value => :ferrari},
73
+ {:content => "Volkswagen", :value => :vw},
74
+ {:content => "Ford", :value => :ford}
75
+ ]
76
+ },
77
+ {
78
+ :label => "Trucks",
79
+ :options => [
80
+ {:content => "Volvo", :value => :volvo},
81
+ {:content => "Toyota", :value => :toyota},
82
+ {:content => "General Motors", :value => :gm}
83
+ ]
84
+ },
85
+ {
86
+ :label => "Bikes",
87
+ :options => [
88
+ {:content => "Suzuki", :value => :suzuki},
89
+ {:content => "Ducati", :value => :ducati},
90
+ {:content => "Kawasaki", :value => :kawasaki}
91
+ ]
92
+ }
93
+ ]
94
+ }
95
+
96
+ tag(:select, attrs).should == "<select name=\"vehicles\"><optgroup label=\"Cars\"><option value=\"ferrari\">Ferrari</option><option value=\"vw\">Volkswagen</option><option value=\"ford\">Ford</option></optgroup><optgroup label=\"Trucks\"><option value=\"volvo\">Volvo</option><option value=\"toyota\">Toyota</option><option value=\"gm\">General Motors</option></optgroup><optgroup label=\"Bikes\"><option value=\"suzuki\">Suzuki</option><option value=\"ducati\">Ducati</option><option value=\"kawasaki\">Kawasaki</option></optgroup></select>"
97
+ end
98
+
99
+ it "should output select tags with a mixed list of optgroups and options" do
100
+ attrs = {
101
+ :name => "vehicles",
102
+ :options => [
103
+ {:content => "— Choose —"},
104
+ {
105
+ :label => "Cars",
106
+ :options => [
107
+ {:content => "Ferrari", :value => :ferrari},
108
+ {:content => "Volkswagen", :value => :vw},
109
+ {:content => "Ford", :value => :ford}
110
+ ]
111
+ },
112
+ {
113
+ :label => "Trucks",
114
+ :options => [
115
+ {:content => "Volvo", :value => :volvo},
116
+ {:content => "Toyota", :value => :toyota},
117
+ {:content => "General Motors", :value => :gm}
118
+ ]
119
+ },
120
+ {
121
+ :label => "Bikes",
122
+ :options => [
123
+ {:content => "Suzuki", :value => :suzuki},
124
+ {:content => "Ducati", :value => :ducati},
125
+ {:content => "Kawasaki", :value => :kawasaki}
126
+ ]
127
+ }
128
+ ]
129
+ }
130
+
131
+ tag(:select, attrs).should == "<select name=\"vehicles\"><option>— Choose —</option><optgroup label=\"Cars\"><option value=\"ferrari\">Ferrari</option><option value=\"vw\">Volkswagen</option><option value=\"ford\">Ford</option></optgroup><optgroup label=\"Trucks\"><option value=\"volvo\">Volvo</option><option value=\"toyota\">Toyota</option><option value=\"gm\">General Motors</option></optgroup><optgroup label=\"Bikes\"><option value=\"suzuki\">Suzuki</option><option value=\"ducati\">Ducati</option><option value=\"kawasaki\">Kawasaki</option></optgroup></select>"
132
+ end
49
133
 
50
134
  it "should output tags mixed with ERB" do
51
135
  pending "Need a mechanism for capturing erb output within a passed block"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: herbie
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-06-12 00:00:00.000000000 Z
12
+ date: 2013-06-26 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: tilt