cml 1.4.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.document +5 -0
- data/.gitignore +5 -0
- data/LICENSE +20 -0
- data/README.rdoc +18 -0
- data/Rakefile +56 -0
- data/VERSION +1 -0
- data/cml.gemspec +129 -0
- data/lib/cml/converters/jsawesome.rb +103 -0
- data/lib/cml/gold.rb +33 -0
- data/lib/cml/liquid_filters.rb +13 -0
- data/lib/cml/parser.rb +160 -0
- data/lib/cml/tag.rb +308 -0
- data/lib/cml/tags/checkbox.rb +77 -0
- data/lib/cml/tags/checkboxes.rb +38 -0
- data/lib/cml/tags/group.rb +25 -0
- data/lib/cml/tags/hidden.rb +17 -0
- data/lib/cml/tags/iterate.rb +86 -0
- data/lib/cml/tags/meta.rb +12 -0
- data/lib/cml/tags/multiple_text.rb +11 -0
- data/lib/cml/tags/option.rb +29 -0
- data/lib/cml/tags/radio.rb +48 -0
- data/lib/cml/tags/radios.rb +36 -0
- data/lib/cml/tags/ratings.rb +61 -0
- data/lib/cml/tags/search.rb +97 -0
- data/lib/cml/tags/select.rb +50 -0
- data/lib/cml/tags/text.rb +45 -0
- data/lib/cml/tags/textarea.rb +45 -0
- data/lib/cml/tags/thumb.rb +25 -0
- data/lib/cml/tags/unknown.rb +21 -0
- data/lib/cml.rb +15 -0
- data/spec/complex_spec.rb +127 -0
- data/spec/converters/jsawesome_spec.rb +75 -0
- data/spec/fixtures/complex.cml +23 -0
- data/spec/fixtures/html.cml +34 -0
- data/spec/fixtures/invalid.cml +10 -0
- data/spec/fixtures/script-style.cml +12 -0
- data/spec/fixtures/segfault.cml +1 -0
- data/spec/gold_spec.rb +29 -0
- data/spec/meta_spec.rb +47 -0
- data/spec/normalize_spec.rb +214 -0
- data/spec/show_data_spec.rb +308 -0
- data/spec/sorta_match.rb +41 -0
- data/spec/spec_helper.rb +26 -0
- data/spec/tags/checkbox_spec.rb +155 -0
- data/spec/tags/checkboxes_spec.rb +171 -0
- data/spec/tags/group_spec.rb +108 -0
- data/spec/tags/hidden_spec.rb +17 -0
- data/spec/tags/iterate_spec.rb +259 -0
- data/spec/tags/meta_spec.rb +14 -0
- data/spec/tags/multiple_text_spec.rb +40 -0
- data/spec/tags/radios_spec.rb +81 -0
- data/spec/tags/ratings_spec.rb +79 -0
- data/spec/tags/search_spec.rb +132 -0
- data/spec/tags/select_spec.rb +76 -0
- data/spec/tags/tag_spec.rb +93 -0
- data/spec/tags/text_spec.rb +66 -0
- data/spec/tags/textarea_spec.rb +58 -0
- data/spec/tags/thumb_spec.rb +20 -0
- data/spec/tags/unknown_spec.rb +19 -0
- data/spec/validation_spec.rb +62 -0
- metadata +182 -0
@@ -0,0 +1,171 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
2
|
+
|
3
|
+
describe "CML Checkboxes" do
|
4
|
+
it "should render basic checkboxes" do
|
5
|
+
cml = <<-HTML
|
6
|
+
<cml:checkboxes label="Cool checkboxes">
|
7
|
+
<cml:checkbox label="{{question}}"/>
|
8
|
+
<cml:checkbox label="Sure?"/>
|
9
|
+
<cml:checkbox label="Not really..." value="nope" checked="true"/>
|
10
|
+
</cml:checkboxes>
|
11
|
+
HTML
|
12
|
+
@p = Parser.new(cml, :prefix => "u12345", :missed => {"cool_checkboxes" => ["nope", ["Wanna do it?"]]}, :data => {"question" => "Wanna do it?"})
|
13
|
+
#puts Parser.escape(@p.to_html).gsub(/\n/,"<br/>")
|
14
|
+
@p.to_html.should sorta_match(<<-HTML)
|
15
|
+
<div class="cml" id="u12345">
|
16
|
+
<div class="checkboxes cml_field">
|
17
|
+
<h2 class="legend">Cool checkboxes</h2>
|
18
|
+
<div class="cml_row"><label class="gold_good">
|
19
|
+
<input type="checkbox" value="Wanna do it?" name="u12345[cool_checkboxes][]" class="cool_checkboxes"/> {{question}}
|
20
|
+
</label></div>
|
21
|
+
<div class="cml_row"><label class="">
|
22
|
+
<input type="checkbox" value="Sure?" name="u12345[cool_checkboxes][]" class="cool_checkboxes"/> Sure?
|
23
|
+
</label></div>
|
24
|
+
<div class="cml_row"><label class="gold_bad">
|
25
|
+
<input type="checkbox" value="nope" name="u12345[cool_checkboxes][]" class="cool_checkboxes"/> Sure?
|
26
|
+
</label></div>
|
27
|
+
</div>
|
28
|
+
</div>
|
29
|
+
HTML
|
30
|
+
end
|
31
|
+
|
32
|
+
it "should render normalize checkbox with custom gold" do
|
33
|
+
cml = <<-HTML
|
34
|
+
<cml:checkboxes label="Cool checkboxes" gold="custom">
|
35
|
+
<cml:checkbox label="Wanna do it?"/>
|
36
|
+
<cml:checkbox label="Test" checked="true"/>
|
37
|
+
</cml:checkboxes>
|
38
|
+
HTML
|
39
|
+
@p = Parser.new(cml, :prefix => "u12345", :normalize => true, :data => {})
|
40
|
+
#puts Parser.escape(@p.to_html).gsub(/\n/,"<br/>")
|
41
|
+
@p.to_html.should sorta_match(<<-HTML)
|
42
|
+
<div class="cml" id="u12345">
|
43
|
+
<div class="checkboxes cml_field">
|
44
|
+
<h2 class="legend">Cool checkboxes</h2>
|
45
|
+
<div class="cml_row"><label class="">
|
46
|
+
<input name="u12345[custom][]" class="custom" type="checkbox" value="Wanna do it?" />
|
47
|
+
Wanna do it?
|
48
|
+
</label></div>
|
49
|
+
<div class="cml_row"><label class=""><input name="u12345[custom][]" type="checkbox" value="Test" class="custom" checked="checked" />
|
50
|
+
Test</label></div>
|
51
|
+
<div class="cml_gold_reason">
|
52
|
+
<label class="legend">Reason</label>
|
53
|
+
<textarea name="u12345[custom_reason]"></textarea>
|
54
|
+
</div>
|
55
|
+
</div>
|
56
|
+
</div>
|
57
|
+
HTML
|
58
|
+
end
|
59
|
+
|
60
|
+
it "should render checkboxes with extra shit" do
|
61
|
+
cml = <<-HTML
|
62
|
+
<cml:checkboxes label="Cool checkboxes">
|
63
|
+
{% for foo in bar %}
|
64
|
+
<cml:checkbox label="Wanna do it?" value="{{bar}}"/>
|
65
|
+
{% endfor %}
|
66
|
+
</cml:checkboxes>
|
67
|
+
HTML
|
68
|
+
@p = Parser.new(cml, :prefix => "u12345")
|
69
|
+
#puts Parser.escape(@p.to_html)
|
70
|
+
@p.to_html.should sorta_match(<<-HTML)
|
71
|
+
<div class="cml" id="u12345">
|
72
|
+
<div class="checkboxes cml_field">
|
73
|
+
<h2 class="legend">Cool checkboxes</h2>
|
74
|
+
{% for foo in bar %}
|
75
|
+
<div class="cml_row"><label class="">
|
76
|
+
<input type="checkbox" value="{{bar}}" name="u12345[cool_checkboxes][]" class="cool_checkboxes"/> Wanna do it?
|
77
|
+
</label></div>
|
78
|
+
{% endfor %}
|
79
|
+
</div>
|
80
|
+
</div>
|
81
|
+
HTML
|
82
|
+
end
|
83
|
+
|
84
|
+
it "should render checkboxes with default" do
|
85
|
+
cml = <<-HTML
|
86
|
+
<cml:checkboxes label="Cool checkboxes">
|
87
|
+
<cml:checkbox label="Wanna do it?" value="{{bar}}" default="false"/>
|
88
|
+
</cml:checkboxes>
|
89
|
+
HTML
|
90
|
+
@p = Parser.new(cml, :prefix => "u12345")
|
91
|
+
#puts Parser.escape(@p.to_html)
|
92
|
+
@p.to_html.should sorta_match(<<-HTML)
|
93
|
+
<div class="cml" id="u12345">
|
94
|
+
<div class="checkboxes cml_field">
|
95
|
+
<h2 class="legend">Cool checkboxes</h2>
|
96
|
+
<div class="cml_row"><label class="">
|
97
|
+
<input type="hidden" value="false" name="u12345[cool_checkboxes][]" class="cool_checkboxes"/>
|
98
|
+
<input type="checkbox" value="{{bar}}" name="u12345[cool_checkboxes][]" class="cool_checkboxes"/> Wanna do it?
|
99
|
+
</label></div>
|
100
|
+
</div>
|
101
|
+
</div>
|
102
|
+
HTML
|
103
|
+
end
|
104
|
+
|
105
|
+
it "allows floating divery" do
|
106
|
+
cml = <<-HTML
|
107
|
+
<cml:checkboxes label="Categories">
|
108
|
+
<div style="float:left;width:300px;margin-right:10px">
|
109
|
+
<cml:checkbox label="Connected <i>The comment reflects that the website allows you to connect or reconnect with friends</i>" value="connected" />
|
110
|
+
</div>
|
111
|
+
<div style="float:left">
|
112
|
+
<cml:checkbox label="Privacy <i>The comment mentions privacy, privacy settings or the ability to control user privacy</i>" value="privacy" />
|
113
|
+
</div>
|
114
|
+
</cml:checkboxes>
|
115
|
+
<cml:checkboxes label="foo">
|
116
|
+
<cml:checkbox label="shit" />
|
117
|
+
</cml:checkboxes>
|
118
|
+
<br style="clear:both"/>
|
119
|
+
HTML
|
120
|
+
@p = Parser.new(cml, :prefix => "u12345")
|
121
|
+
#puts Parser.escape(@p.to_html)
|
122
|
+
@p.to_html.should sorta_match(<<-HTML)
|
123
|
+
<div class="cml" id="u12345">
|
124
|
+
<div class="checkboxes cml_field">
|
125
|
+
<h2 class="legend">Categories</h2>
|
126
|
+
<div style="float:left;width:300px;margin-right:10px">
|
127
|
+
<div class="checkbox cml_field">
|
128
|
+
<div class="cml_row"><label class="">
|
129
|
+
<input name="u12345[categories]" class="categories" type="checkbox" value="connected" /> Connected <i>The comment reflects that the website allows you to connect or reconnect with friends</i>
|
130
|
+
</label></div>
|
131
|
+
</div>
|
132
|
+
</div>
|
133
|
+
<div style="float:left">
|
134
|
+
<div class="checkbox cml_field">
|
135
|
+
<div class="cml_row"><label class="">
|
136
|
+
<input name="u12345[categories]" class="categories" type="checkbox" value="privacy" /> Privacy <i>The comment mentions privacy, privacy settings or the ability to control user privacy</i>
|
137
|
+
</label></div>
|
138
|
+
</div>
|
139
|
+
</div>
|
140
|
+
</div>
|
141
|
+
<div class="checkboxes cml_field">
|
142
|
+
<h2 class="legend">foo</h2>
|
143
|
+
<div class="cml_row"><label class="">
|
144
|
+
<input name="u12345[foo][]" class="foo" type="checkbox" value="shit" /> shit
|
145
|
+
</label></div>
|
146
|
+
</div>
|
147
|
+
<br style="clear:both" />
|
148
|
+
</div>
|
149
|
+
HTML
|
150
|
+
end
|
151
|
+
|
152
|
+
it "should ignore name attribute on checkbox elements inside of checkboxes element" do
|
153
|
+
pending "This needs more thought. Don't break existing jobs if possible."
|
154
|
+
cml = <<-HTML
|
155
|
+
<cml:checkboxes label="Cool checkboxes">
|
156
|
+
<cml:checkbox label="Wanna do it?" name="broken"/>
|
157
|
+
</cml:checkboxes>
|
158
|
+
HTML
|
159
|
+
@p = Parser.new(cml, :prefix => "u12345")
|
160
|
+
@p.to_html.should sorta_match(<<-HTML)
|
161
|
+
<div class="cml" id="u12345">
|
162
|
+
<div class="checkboxes cml_field">
|
163
|
+
<h2 class="legend">Cool checkboxes</h2>
|
164
|
+
<div class="cml_row"><label class="">
|
165
|
+
<input type="checkbox" value="Wanna do it?" name="u12345[cool_checkboxes][]" class="cool_checkboxes"/> Wanna do it?
|
166
|
+
</label></div>
|
167
|
+
</div>
|
168
|
+
</div>
|
169
|
+
HTML
|
170
|
+
end
|
171
|
+
end
|
@@ -0,0 +1,108 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
2
|
+
|
3
|
+
describe "CML Select" do
|
4
|
+
it "should render group" do
|
5
|
+
cml = <<-HTML
|
6
|
+
<cml:group only-if="awesome[1]" class="nice" multiple="true">
|
7
|
+
<cml:checkboxes label="Cool checkboxes" name="rad" gold="true">
|
8
|
+
<cml:checkbox label="Wanna do it?"/>
|
9
|
+
<cml:checkbox label="Sure?"/>
|
10
|
+
</cml:checkboxes>
|
11
|
+
<cml:text label="Something" aggregation="all"/>
|
12
|
+
<cml:group multiple="true">
|
13
|
+
<div>
|
14
|
+
<cml:text label="nuts"/>
|
15
|
+
</div>
|
16
|
+
</cml:group>
|
17
|
+
</cml:group>
|
18
|
+
<cml:text label="Sweet" gold="true">
|
19
|
+
HTML
|
20
|
+
@p = Parser.new(cml, :prefix => "u12345")
|
21
|
+
#@p.fields.should == {"something_1" => "all"}
|
22
|
+
#@p.golds.should == {"sweet" => "sweet_gold", "rad_1" => "rad_1_gold"}
|
23
|
+
#puts Parser.escape(@p.to_html).gsub(/\n/,"<br/>")
|
24
|
+
@p.to_html.should sorta_match(<<-HTML)
|
25
|
+
<div class="cml" id="u12345">
|
26
|
+
<div class="group logic-only-if:awesome[1] multiple column nice">
|
27
|
+
<div class="checkboxes cml_field">
|
28
|
+
<h2 class="legend">Cool checkboxes</h2>
|
29
|
+
<div class="cml_row"><label class="">
|
30
|
+
<input name="u12345[rad_1][]" class="rad_1" type="checkbox" value="Wanna do it?" /> Wanna do it?
|
31
|
+
</label></div>
|
32
|
+
<div class="cml_row"><label class="">
|
33
|
+
<input name="u12345[rad_1][]" class="rad_1" type="checkbox" value="Sure?" /> Sure?
|
34
|
+
</label></div>
|
35
|
+
</div>
|
36
|
+
<div class="text cml_field">
|
37
|
+
<label class="legend">Something</label>
|
38
|
+
<div class="cml_row"><input name="u12345[something_1]" class="something_1" type="text" value="" /></div>
|
39
|
+
</div>
|
40
|
+
<div class="group multiple columnlist">
|
41
|
+
<div>
|
42
|
+
<div class="text cml_field">
|
43
|
+
<label class="legend">nuts</label>
|
44
|
+
<div class="cml_row"><input name="u12345[nuts_1][]" class="nuts_1" type="text" value="" /></div>
|
45
|
+
</div>
|
46
|
+
</div>
|
47
|
+
</div>
|
48
|
+
</div>
|
49
|
+
<div class="text cml_field">
|
50
|
+
<label class="legend">Sweet</label>
|
51
|
+
<div class="cml_row"><input name="u12345[sweet]" class="sweet" type="text" value="" /></div>
|
52
|
+
</div>
|
53
|
+
</div>
|
54
|
+
HTML
|
55
|
+
end
|
56
|
+
|
57
|
+
it "renders nested groups" do
|
58
|
+
cml = <<-HTML
|
59
|
+
<cml:group>
|
60
|
+
<cml:checkboxes label="Cool checkboxes" name="rad" gold="true">
|
61
|
+
<cml:checkbox label="Wanna do it?"/>
|
62
|
+
<cml:checkbox label="Sure?"/>
|
63
|
+
</cml:checkboxes>
|
64
|
+
<cml:text label="Something" aggregation="all"/>
|
65
|
+
<cml:group multiple="true">
|
66
|
+
<cml:text label="G1" />
|
67
|
+
<cml:text label="G2" />
|
68
|
+
</cml:group>
|
69
|
+
</cml:group>
|
70
|
+
<cml:text label="Sweet" gold="true">
|
71
|
+
HTML
|
72
|
+
@p = Parser.new(cml, :prefix => "u12345")
|
73
|
+
# puts Parser.escape(@p.to_html).gsub(/\n/,"<br/>")
|
74
|
+
@p.to_html.should sorta_match(<<-HTML)
|
75
|
+
<div class="cml" id="u12345">
|
76
|
+
<div class="group">
|
77
|
+
<div class="checkboxes cml_field">
|
78
|
+
<h2 class="legend">Cool checkboxes</h2>
|
79
|
+
<div class="cml_row"><label class="">
|
80
|
+
<input name="u12345[rad][]" class="rad" type="checkbox" value="Wanna do it?" /> Wanna do it?
|
81
|
+
</label></div>
|
82
|
+
<div class="cml_row"><label class="">
|
83
|
+
<input name="u12345[rad][]" class="rad" type="checkbox" value="Sure?" /> Sure?
|
84
|
+
</label></div>
|
85
|
+
</div>
|
86
|
+
<div class="text cml_field">
|
87
|
+
<label class="legend">Something</label>
|
88
|
+
<div class="cml_row"><input name="u12345[something]" class="something" type="text" value="" /></div>
|
89
|
+
</div>
|
90
|
+
<div class="group multiple list">
|
91
|
+
<div class="text cml_field">
|
92
|
+
<label class="legend">G1</label>
|
93
|
+
<div class="cml_row"><input name="u12345[g1][]" class="g1" value="" type="text" /></div>
|
94
|
+
</div>
|
95
|
+
<div class="text cml_field">
|
96
|
+
<label class="legend">G2</label>
|
97
|
+
<div class="cml_row"><input name="u12345[g2][]" class="g2" value="" type="text" /></div>
|
98
|
+
</div>
|
99
|
+
</div>
|
100
|
+
</div>
|
101
|
+
<div class="text cml_field">
|
102
|
+
<label class="legend">Sweet</label>
|
103
|
+
<div class="cml_row"><input name="u12345[sweet]" class="sweet" type="text" value="" /></div>
|
104
|
+
</div>
|
105
|
+
</div>
|
106
|
+
HTML
|
107
|
+
end
|
108
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
2
|
+
|
3
|
+
describe "CML Hidden" do
|
4
|
+
it "should render basic hidden field" do
|
5
|
+
cml = <<-HTML
|
6
|
+
<cml:hidden name="secret" value="shit"/>
|
7
|
+
HTML
|
8
|
+
@p = Parser.new(cml, :prefix => "u12345")
|
9
|
+
@p.to_html.should sorta_match(<<-HTML)
|
10
|
+
<div class="cml" id="u12345">
|
11
|
+
<div class="hidden cml_field">
|
12
|
+
<input type="hidden" value="shit" name="u12345[secret]" class="secret"/>
|
13
|
+
</div>
|
14
|
+
</div>
|
15
|
+
HTML
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,259 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
2
|
+
|
3
|
+
describe "CML Iterate" do
|
4
|
+
it "should render iterate field without missed stuff" do
|
5
|
+
cml = <<-HTML
|
6
|
+
<cml:iterate on="secret">
|
7
|
+
Something {{ index_me}}
|
8
|
+
<b>{{secret}}</b> {{ dont_index_me }}
|
9
|
+
<cml:checkboxes label="bar" gold="true">
|
10
|
+
<cml:checkbox label="ooga" />
|
11
|
+
<cml:checkbox label="booga" />
|
12
|
+
<cml:checkbox label="boo" />
|
13
|
+
</cml:checkboxes>
|
14
|
+
<cml:radios label="foo">
|
15
|
+
<cml:radio label="nice"/>
|
16
|
+
<cml:radio label="neat"/>
|
17
|
+
</cml:radios>
|
18
|
+
<cml:ratings label="Racy" points="2">
|
19
|
+
</cml:iterate>
|
20
|
+
HTML
|
21
|
+
@p = Parser.new(cml, :prefix => "u12345", :data => {"secret" => [1,2], "index_me" => [3,4], "dont_index_me" => "foo", "bar_gold_reason" => ["Because you are wrong!","Because you are wrong!"] })
|
22
|
+
@p2 = Parser.new(cml, :prefix => "u12345")
|
23
|
+
#Auto add the structured flag
|
24
|
+
#puts Parser.escape(@p.to_html)
|
25
|
+
@p2.golds.should == {"_bar_gold_structured" => true, "bar"=>"bar_gold"}
|
26
|
+
@p2.golds(false, :no_meta => true).should == {"bar"=>"bar_gold"}
|
27
|
+
@p.to_html.should sorta_match(<<-HTML)
|
28
|
+
<div class="cml" id="u12345">
|
29
|
+
<div class="iterate">
|
30
|
+
<div class="cml_nugget">
|
31
|
+
Something {{ index_me[0] }}
|
32
|
+
<b>{{ secret[0] }}</b> {{ dont_index_me }}
|
33
|
+
<div class="checkboxes cml_field">
|
34
|
+
<h2 class="legend">bar</h2>
|
35
|
+
<div class="cml_row"><label class="">
|
36
|
+
<input name="u12345[bar][0][]" class="bar" value="ooga" type="checkbox" /> ooga</label></div>
|
37
|
+
<div class="cml_row"><label class="">
|
38
|
+
<input name="u12345[bar][0][]" class="bar" value="booga" type="checkbox" /> booga</label></div>
|
39
|
+
<div class="cml_row"><label class="">
|
40
|
+
<input name="u12345[bar][0][]" class="bar" value="boo" type="checkbox" /> boo</label></div>
|
41
|
+
</div>
|
42
|
+
<div class="radios cml_field">
|
43
|
+
<h2 class="legend">foo</h2>
|
44
|
+
<div class="cml_row"><label class="">
|
45
|
+
<input name="u12345[foo][0]" class="foo" value="nice" type="radio" /> nice</label></div>
|
46
|
+
<div class="cml_row"><label class="">
|
47
|
+
<input name="u12345[foo][0]" class="foo" value="neat" type="radio" /> neat</label></div>
|
48
|
+
</div>
|
49
|
+
<div class="ratings cml_field">
|
50
|
+
<h2 class="legend">Racy</h2>
|
51
|
+
<div class="cml_row">
|
52
|
+
<table>
|
53
|
+
<thead> <tr> <th></th> <th class="">1</th> <th class="">2</th> <th></th> </tr> </thead>
|
54
|
+
<tbody> <tr> <td></td> <td class=""><input name="u12345[racy][0]" class="racy" type="radio" value="1" /> </td> <td class=""><input name="u12345[racy][0]" class="racy" type="radio" value="2" /> </td> <td></td> </tr> </tbody>
|
55
|
+
</table>
|
56
|
+
</div>
|
57
|
+
</div>
|
58
|
+
</div>
|
59
|
+
<div class="cml_nugget">
|
60
|
+
Something {{ index_me[1] }}
|
61
|
+
<b>{{ secret[1] }}</b> {{ dont_index_me }}
|
62
|
+
<div class="checkboxes cml_field">
|
63
|
+
<h2 class="legend">bar</h2>
|
64
|
+
<div class="cml_row"><label class="">
|
65
|
+
<input name="u12345[bar][1][]" class="bar" value="ooga" type="checkbox" /> ooga</label></div>
|
66
|
+
<div class="cml_row"><label class="">
|
67
|
+
<input name="u12345[bar][1][]" class="bar" value="booga" type="checkbox" /> booga</label></div>
|
68
|
+
<div class="cml_row"><label class="">
|
69
|
+
<input name="u12345[bar][1][]" class="bar" value="boo" type="checkbox" /> boo</label></div>
|
70
|
+
</div>
|
71
|
+
<div class="radios cml_field">
|
72
|
+
<h2 class="legend">foo</h2>
|
73
|
+
<div class="cml_row"><label class="">
|
74
|
+
<input name="u12345[foo][1]" class="foo" value="nice" type="radio" /> nice</label></div>
|
75
|
+
<div class="cml_row"><label class="">
|
76
|
+
<input name="u12345[foo][1]" class="foo" value="neat" type="radio" /> neat</label></div>
|
77
|
+
</div>
|
78
|
+
<div class="ratings cml_field">
|
79
|
+
<h2 class="legend">Racy</h2>
|
80
|
+
<div class="cml_row">
|
81
|
+
<table>
|
82
|
+
<thead> <tr> <th></th> <th class="">1</th> <th class="">2</th> <th></th> </tr> </thead>
|
83
|
+
<tbody> <tr> <td></td> <td class=""><input name="u12345[racy][1]" class="racy" type="radio" value="1" /> </td> <td class=""><input name="u12345[racy][1]" class="racy" type="radio" value="2" /> </td> <td></td> </tr> </tbody>
|
84
|
+
</table>
|
85
|
+
</div>
|
86
|
+
</div>
|
87
|
+
</div>
|
88
|
+
</div>
|
89
|
+
</div>
|
90
|
+
HTML
|
91
|
+
end
|
92
|
+
|
93
|
+
it "should render iterate field with missed data" do
|
94
|
+
cml = <<-HTML
|
95
|
+
<cml:iterate on="secret">
|
96
|
+
Something {{ index_me}}
|
97
|
+
<b>{{secret}}</b> {{ dont_index_me }}
|
98
|
+
<cml:checkboxes label="bar" gold="true">
|
99
|
+
<cml:checkbox label="ooga" />
|
100
|
+
<cml:checkbox label="booga" />
|
101
|
+
<cml:checkbox label="boo" />
|
102
|
+
</cml:checkboxes>
|
103
|
+
<cml:radios label="foo">
|
104
|
+
<cml:radio label="nice"/>
|
105
|
+
<cml:radio label="neat" checked="checked"/>
|
106
|
+
</cml:radios>
|
107
|
+
<cml:ratings label="Racy" points="2">
|
108
|
+
</cml:iterate>
|
109
|
+
HTML
|
110
|
+
@p = Parser.new(cml, :prefix => "u12345", :data => {"secret" => [1,2], "index_me" => [3,4], "dont_index_me" => "foo", "bar_gold_reason" => ["Because you are wrong!","Because you are wrong!"] }, :missed => {"structured" => [{"bar" => ["ooga",["booga"]], "racy" => ["1",["2"]] },{}] })
|
111
|
+
#Auto add the structured flag
|
112
|
+
#puts Parser.escape(@p.to_html)
|
113
|
+
@p.to_html.should sorta_match(<<-HTML)
|
114
|
+
<div class="cml" id="u12345">
|
115
|
+
<div class="iterate">
|
116
|
+
<div class="cml_nugget">
|
117
|
+
Something {{ index_me[0] }}
|
118
|
+
<b>{{ secret[0] }}</b> {{ dont_index_me }}
|
119
|
+
<div class="checkboxes cml_field">
|
120
|
+
<h2 class="legend">bar</h2>
|
121
|
+
<div class="cml_row"><label class="gold_bad">
|
122
|
+
<input name="u12345[bar][0][]" class="bar" value="ooga" type="checkbox" /> ooga</label></div>
|
123
|
+
<div class="cml_row"><label class="gold_good">
|
124
|
+
<input name="u12345[bar][0][]" class="bar" value="booga" type="checkbox" /> booga</label></div>
|
125
|
+
<div class="cml_row"><label class="">
|
126
|
+
<input name="u12345[bar][0][]" class="bar" value="boo" type="checkbox" /> boo</label></div>
|
127
|
+
</div>
|
128
|
+
<div class="radios cml_field">
|
129
|
+
<h2 class="legend">foo</h2>
|
130
|
+
<div class="cml_row"><label class="">
|
131
|
+
<input name="u12345[foo][0]" class="foo" value="nice" type="radio" /> nice</label></div>
|
132
|
+
<div class="cml_row"><label class="">
|
133
|
+
<input name="u12345[foo][0]" class="foo" value="neat" type="radio" /> neat</label></div>
|
134
|
+
</div>
|
135
|
+
<div class="ratings cml_field">
|
136
|
+
<h2 class="legend">Racy</h2>
|
137
|
+
<div class="cml_row">
|
138
|
+
<table>
|
139
|
+
<thead> <tr> <th></th> <th class="gold_bad">1</th> <th class="gold_good">2</th> <th></th> </tr> </thead>
|
140
|
+
<tbody> <tr> <td></td> <td class="gold_bad"><input name="u12345[racy][0]" class="racy" type="radio" value="1" /> </td> <td class="gold_good"><input name="u12345[racy][0]" class="racy" type="radio" value="2" /> </td> <td></td> </tr> </tbody>
|
141
|
+
</table>
|
142
|
+
</div>
|
143
|
+
</div>
|
144
|
+
</div>
|
145
|
+
<div class="reason"><h4>The reason this question was marked wrong is:</h4><p>Because you are wrong!</p></div>
|
146
|
+
</div>
|
147
|
+
</div>
|
148
|
+
HTML
|
149
|
+
end
|
150
|
+
|
151
|
+
it "should handles empty iterations" do
|
152
|
+
cml = <<-HTML
|
153
|
+
<cml:iterate on="secret">
|
154
|
+
Something {{ index_me}}
|
155
|
+
<b>{{secret}}</b> {{ dont_index_me }}
|
156
|
+
<cml:radios label="foo">
|
157
|
+
<cml:radio label="nice"/>
|
158
|
+
<cml:radio label="neat"/>
|
159
|
+
</cml:radios>
|
160
|
+
</cml:iterate>
|
161
|
+
HTML
|
162
|
+
@p = Parser.new(cml, :prefix => "u12345", :data => {"secret" => [] })
|
163
|
+
#puts Parser.escape(@p.to_html)
|
164
|
+
@p.to_html.should sorta_match(<<-HTML)
|
165
|
+
<div class="cml" id="u12345">
|
166
|
+
<div class="iterate">
|
167
|
+
<div class="cml_nugget">
|
168
|
+
<div class="hidden cml_field">
|
169
|
+
<input name="u12345[secret]" class="secret" type="hidden" value="Nothing to iterate" />
|
170
|
+
</div>
|
171
|
+
</div>
|
172
|
+
</div>
|
173
|
+
</div>
|
174
|
+
HTML
|
175
|
+
end
|
176
|
+
|
177
|
+
it "should normalizes iterations" do
|
178
|
+
cml = <<-HTML
|
179
|
+
<cml:iterate on="secret">
|
180
|
+
Something {{ secret }}
|
181
|
+
<cml:radios label="foo" gold="true">
|
182
|
+
<cml:radio label="nice"/>
|
183
|
+
<cml:radio label="neat"/>
|
184
|
+
</cml:radios>
|
185
|
+
<cml:text label="nice" gold="naughty_gold" />
|
186
|
+
</cml:iterate>
|
187
|
+
HTML
|
188
|
+
@p = Parser.new(cml, :prefix => "unit[data]", :normalize => true, :data => {"naughty_gold" => [["foo","bar"],nil], "foo_gold" => [nil,"neat"], "naughty_gold_reason" => ["Because",nil], "secret" => ["else", "strange"], :missed => {} })
|
189
|
+
#puts Parser.escape(@p.to_html).gsub(/\n/,"<br/>")
|
190
|
+
@p.to_html.should sorta_match(<<-HTML)
|
191
|
+
<div class="cml" id="unit[data]">
|
192
|
+
<div class="iterate">
|
193
|
+
<div class="cml_nugget">
|
194
|
+
Something {{ secret[0] }}
|
195
|
+
<div class="checkboxes cml_field">
|
196
|
+
<h2 class="legend">foo</h2>
|
197
|
+
<div class="cml_row"><label class="">
|
198
|
+
<input name="unit[data][foo_gold][0][]" class="foo_gold" value="nice" type="checkbox" />nice</label>
|
199
|
+
</div>
|
200
|
+
<div class="cml_row"><label class="">
|
201
|
+
<input name="unit[data][foo_gold][0][]" class="foo_gold" value="neat" type="checkbox" />
|
202
|
+
neat</label>
|
203
|
+
</div>
|
204
|
+
|
205
|
+
<div class="cml_gold_reason">
|
206
|
+
<label class="legend">Reason</label>
|
207
|
+
<textarea name="unit[data][foo_gold_reason][]"></textarea>
|
208
|
+
</div>
|
209
|
+
</div>
|
210
|
+
<div class="text cml_field">
|
211
|
+
<label class="legend">nice</label>
|
212
|
+
<div class="cml_row">
|
213
|
+
<input name="unit[data][naughty_gold][0][]" class="naughty_gold cml_gold_loaded" type="text" value="foo" />
|
214
|
+
</div>
|
215
|
+
<div class="cml_row">
|
216
|
+
<input name="unit[data][naughty_gold][0][]" class="naughty_gold cml_gold_loaded" type="text" value="bar" />
|
217
|
+
</div>
|
218
|
+
|
219
|
+
<div class="cml_gold_reason">
|
220
|
+
<label class="legend">Reason</label>
|
221
|
+
<textarea name="unit[data][naughty_gold_reason][]">Because</textarea>
|
222
|
+
</div>
|
223
|
+
</div>
|
224
|
+
</div>
|
225
|
+
<div class="cml_nugget">
|
226
|
+
Something {{ secret[1] }}
|
227
|
+
<div class="checkboxes cml_field">
|
228
|
+
<h2 class="legend">foo</h2>
|
229
|
+
<div class="cml_row"><label class="">
|
230
|
+
<input name="unit[data][foo_gold][1][]" class="foo_gold" value="nice" type="checkbox" />
|
231
|
+
nice</label>
|
232
|
+
</div>
|
233
|
+
<div class="cml_row"><label class="">
|
234
|
+
<input checked="checked" name="unit[data][foo_gold][1][]" class="foo_gold cml_gold_loaded" value="neat" type="checkbox" />
|
235
|
+
neat</label>
|
236
|
+
</div>
|
237
|
+
|
238
|
+
<div class="cml_gold_reason">
|
239
|
+
<label class="legend">Reason</label>
|
240
|
+
<textarea name="unit[data][foo_gold_reason][]"></textarea>
|
241
|
+
</div>
|
242
|
+
</div>
|
243
|
+
<div class="text cml_field">
|
244
|
+
<label class="legend">nice</label>
|
245
|
+
<div class="cml_row">
|
246
|
+
<input name="unit[data][naughty_gold][1][]" class="naughty_gold" type="text" value="" />
|
247
|
+
</div>
|
248
|
+
|
249
|
+
<div class="cml_gold_reason">
|
250
|
+
<label class="legend">Reason</label>
|
251
|
+
<textarea name="unit[data][naughty_gold_reason][]"></textarea>
|
252
|
+
</div>
|
253
|
+
</div>
|
254
|
+
</div>
|
255
|
+
</div>
|
256
|
+
</div>
|
257
|
+
HTML
|
258
|
+
end
|
259
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
2
|
+
|
3
|
+
describe "CML Hidden" do
|
4
|
+
it "should render basic hidden field" do
|
5
|
+
cml = <<-HTML
|
6
|
+
<cml:meta name="secret" gold="true"/>
|
7
|
+
HTML
|
8
|
+
@p = Parser.new(cml, :prefix => "u12345")
|
9
|
+
@p.to_html.should sorta_match(<<-HTML)
|
10
|
+
<div class="cml" id="u12345">
|
11
|
+
</div>
|
12
|
+
HTML
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
2
|
+
|
3
|
+
describe "CML MultipleText" do
|
4
|
+
it "should render multiple text" do
|
5
|
+
cml = <<-HTML
|
6
|
+
<cml:multiple_text label="Coolio"/>
|
7
|
+
HTML
|
8
|
+
@p = Parser.new(cml, :prefix => "u12345")
|
9
|
+
#puts Parser.escape(@p.to_html).gsub(/\n/,"<br/>")
|
10
|
+
@p.to_html.should sorta_match(<<-HTML)
|
11
|
+
<div class="cml" id="u12345">
|
12
|
+
<div class="text multiple list cml_field">
|
13
|
+
<label class="legend">Coolio</label>
|
14
|
+
<div class="cml_row"><input type="text" value="" name="u12345[coolio][]" class="coolio"/></div>
|
15
|
+
</div>
|
16
|
+
</div>
|
17
|
+
HTML
|
18
|
+
end
|
19
|
+
|
20
|
+
it "should render normalized multiple text" do
|
21
|
+
cml = <<-HTML
|
22
|
+
<cml:multiple_text label="Coolio" gold="true"/>
|
23
|
+
HTML
|
24
|
+
@p = Parser.new(cml, :prefix => "u12345", :normalize => true, :data => {"coolio_gold" => ["foo", "bar"]})
|
25
|
+
#puts Parser.escape(@p.to_html).gsub(/\n/,"<br/>")
|
26
|
+
@p.to_html.should sorta_match(<<-HTML)
|
27
|
+
<div class="cml" id="u12345">
|
28
|
+
<div class="text multiple list cml_field">
|
29
|
+
<label class="legend">Coolio</label>
|
30
|
+
<div class="cml_row"><input name="u12345[coolio_gold][]" class="coolio_gold cml_gold_loaded" value="foo" type="text" /></div>
|
31
|
+
<div class="cml_row"><input name="u12345[coolio_gold][]" class="coolio_gold cml_gold_loaded" value="bar" type="text" /></div>
|
32
|
+
<div class="cml_gold_reason">
|
33
|
+
<label class="legend">Reason</label>
|
34
|
+
<textarea name="u12345[coolio_gold_reason]"></textarea>
|
35
|
+
</div>
|
36
|
+
</div>
|
37
|
+
</div>
|
38
|
+
HTML
|
39
|
+
end
|
40
|
+
end
|