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.
Files changed (61) hide show
  1. data/.document +5 -0
  2. data/.gitignore +5 -0
  3. data/LICENSE +20 -0
  4. data/README.rdoc +18 -0
  5. data/Rakefile +56 -0
  6. data/VERSION +1 -0
  7. data/cml.gemspec +129 -0
  8. data/lib/cml/converters/jsawesome.rb +103 -0
  9. data/lib/cml/gold.rb +33 -0
  10. data/lib/cml/liquid_filters.rb +13 -0
  11. data/lib/cml/parser.rb +160 -0
  12. data/lib/cml/tag.rb +308 -0
  13. data/lib/cml/tags/checkbox.rb +77 -0
  14. data/lib/cml/tags/checkboxes.rb +38 -0
  15. data/lib/cml/tags/group.rb +25 -0
  16. data/lib/cml/tags/hidden.rb +17 -0
  17. data/lib/cml/tags/iterate.rb +86 -0
  18. data/lib/cml/tags/meta.rb +12 -0
  19. data/lib/cml/tags/multiple_text.rb +11 -0
  20. data/lib/cml/tags/option.rb +29 -0
  21. data/lib/cml/tags/radio.rb +48 -0
  22. data/lib/cml/tags/radios.rb +36 -0
  23. data/lib/cml/tags/ratings.rb +61 -0
  24. data/lib/cml/tags/search.rb +97 -0
  25. data/lib/cml/tags/select.rb +50 -0
  26. data/lib/cml/tags/text.rb +45 -0
  27. data/lib/cml/tags/textarea.rb +45 -0
  28. data/lib/cml/tags/thumb.rb +25 -0
  29. data/lib/cml/tags/unknown.rb +21 -0
  30. data/lib/cml.rb +15 -0
  31. data/spec/complex_spec.rb +127 -0
  32. data/spec/converters/jsawesome_spec.rb +75 -0
  33. data/spec/fixtures/complex.cml +23 -0
  34. data/spec/fixtures/html.cml +34 -0
  35. data/spec/fixtures/invalid.cml +10 -0
  36. data/spec/fixtures/script-style.cml +12 -0
  37. data/spec/fixtures/segfault.cml +1 -0
  38. data/spec/gold_spec.rb +29 -0
  39. data/spec/meta_spec.rb +47 -0
  40. data/spec/normalize_spec.rb +214 -0
  41. data/spec/show_data_spec.rb +308 -0
  42. data/spec/sorta_match.rb +41 -0
  43. data/spec/spec_helper.rb +26 -0
  44. data/spec/tags/checkbox_spec.rb +155 -0
  45. data/spec/tags/checkboxes_spec.rb +171 -0
  46. data/spec/tags/group_spec.rb +108 -0
  47. data/spec/tags/hidden_spec.rb +17 -0
  48. data/spec/tags/iterate_spec.rb +259 -0
  49. data/spec/tags/meta_spec.rb +14 -0
  50. data/spec/tags/multiple_text_spec.rb +40 -0
  51. data/spec/tags/radios_spec.rb +81 -0
  52. data/spec/tags/ratings_spec.rb +79 -0
  53. data/spec/tags/search_spec.rb +132 -0
  54. data/spec/tags/select_spec.rb +76 -0
  55. data/spec/tags/tag_spec.rb +93 -0
  56. data/spec/tags/text_spec.rb +66 -0
  57. data/spec/tags/textarea_spec.rb +58 -0
  58. data/spec/tags/thumb_spec.rb +20 -0
  59. data/spec/tags/unknown_spec.rb +19 -0
  60. data/spec/validation_spec.rb +62 -0
  61. metadata +182 -0
@@ -0,0 +1,81 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
+
3
+ describe "CML Radios" do
4
+ it "should render basic radios" do
5
+ cml = <<-HTML
6
+ <cml:radios label="Cool radios">
7
+ <cml:radio label="Wanna do it?"/>
8
+ <cml:radio label="Sure?"/>
9
+ <cml:radio label="Not really..." value="nope" checked="true"/>
10
+ </cml:radios>
11
+ HTML
12
+ @p = Parser.new(cml, :prefix => "u12345")
13
+ #puts Parser.escape(@p.to_html)
14
+ @p.to_html.should sorta_match(<<-HTML)
15
+ <div class="cml" id="u12345">
16
+ <div class="radios cml_field">
17
+ <h2 class="legend">Cool radios</h2>
18
+ <div class="cml_row"><label class="">
19
+ <input type="radio" value="Wanna do it?" name="u12345[cool_radios]" class="cool_radios"/> Wanna do it?
20
+ </label></div>
21
+ <div class="cml_row"><label class="">
22
+ <input type="radio" value="Sure?" name="u12345[cool_radios]" class="cool_radios"/> Sure?
23
+ </label></div>
24
+ <div class="cml_row"><label class="">
25
+ <input type="radio" value="nope" checked="checked" name="u12345[cool_radios]" class="cool_radios"/> Sure?
26
+ </label></div>
27
+ </div>
28
+ </div>
29
+ HTML
30
+ end
31
+
32
+
33
+ it "should render normalize radios with custom gold" do
34
+ cml = <<-HTML
35
+ <cml:radios label="Cool radios" gold="custom">
36
+ <cml:radio label="Wanna do it?"/>
37
+ </cml:radios>
38
+ HTML
39
+ @p = Parser.new(cml, :prefix => "u12345", :normalize => true)
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 radios</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_gold_reason">
50
+ <label class="legend">Reason</label>
51
+ <textarea name="u12345[custom_reason]"></textarea>
52
+ </div>
53
+ </div>
54
+ </div>
55
+ HTML
56
+ end
57
+
58
+ it "should render radios with extra shit" do
59
+ cml = <<-HTML
60
+ <cml:radios label="Cool radios">
61
+ {% for foo in bar %}
62
+ <cml:radio label="Wanna do it?" value="{{bar}}"/>
63
+ {% endfor %}
64
+ </cml:radios>
65
+ HTML
66
+ @p = Parser.new(cml, :prefix => "u12345", :missed => {"cool_radios" => ["nope", ["Yes!"]]}, :data => {"bar" => ["Yes!"]})
67
+ #puts Parser.escape(@p.to_html)
68
+ @p.to_html.should sorta_match(<<-HTML)
69
+ <div class="cml" id="u12345">
70
+ <div class="radios cml_field">
71
+ <h2 class="legend">Cool radios</h2>
72
+ {% for foo in bar %}
73
+ <div class="cml_row"><label class="">
74
+ <input type="radio" value="{{bar}}" name="u12345[cool_radios]" class="cool_radios"/> Wanna do it?
75
+ </label></div>
76
+ {% endfor %}
77
+ </div>
78
+ </div>
79
+ HTML
80
+ end
81
+ end
@@ -0,0 +1,79 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
+
3
+ describe "CML Radios" do
4
+ it "should render simple radtings" do
5
+ cml = <<-HTML
6
+ <cml:ratings label="Rate it" from="Bad" to="Worst" points="4" />
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="ratings cml_field"><h2 class="legend">Rate it</h2>
13
+ <div class="cml_row">
14
+ <table>
15
+ <thead>
16
+ <tr>
17
+ <th></th><th class="">1</th><th class="">2</th><th class="">3</th><th class="">4</th><th></th>
18
+ </tr>
19
+ </thead>
20
+ <tbody>
21
+ <tr>
22
+ <td>Bad</td>
23
+ <td class=""><input name="u12345[rate_it]" class="rate_it" value="1" type="radio" /></td>
24
+ <td class=""><input name="u12345[rate_it]" class="rate_it" value="2" type="radio" /></td>
25
+ <td class=""><input name="u12345[rate_it]" class="rate_it" value="3" type="radio" /></td>
26
+ <td class=""><input name="u12345[rate_it]" class="rate_it" value="4" type="radio" /></td>
27
+ <td>Worst</td>
28
+ </tr>
29
+ </tbody>
30
+ </table>
31
+ </div>
32
+ </div>
33
+ </div>
34
+ HTML
35
+ end
36
+
37
+ it "should render fancy pants" do
38
+ cml = <<-HTML
39
+ <cml:ratings label="Love">
40
+ <cml:rating label="Hate" value="1"/>
41
+ <cml:rating label="Annoyed" value="2"/>
42
+ <cml:rating label="Aquatance" value="3"/>
43
+ <cml:rating label="Lover" value="4"/>
44
+ </cml:ratings>
45
+ HTML
46
+ @p = Parser.new(cml, :prefix => "u12345")
47
+ #puts Parser.escape(@p.to_html).gsub(/\n/,"<br/>")
48
+ @p.to_html.should sorta_match(<<-HTML)
49
+ <div class="cml" id="u12345">
50
+ <div class="ratings cml_field"><h2 class="legend">Love</h2>
51
+ <div class="cml_row">
52
+ <table>
53
+ <thead>
54
+ <tr>
55
+ <th></th>
56
+ <th class="">Hate</th>
57
+ <th class="">Annoyed</th>
58
+ <th class="">Aquatance</th>
59
+ <th class="">Lover</th>
60
+ <th></th>
61
+ </tr>
62
+ </thead>
63
+ <tbody>
64
+ <tr>
65
+ <td></td>
66
+ <td class=""><input name="u12345[love]" class="love" value="1" type="radio" /></td>
67
+ <td class=""><input name="u12345[love]" class="love" value="2" type="radio" /></td>
68
+ <td class=""><input name="u12345[love]" class="love" value="3" type="radio" /></td>
69
+ <td class=""><input name="u12345[love]" class="love" value="4" type="radio" /></td>
70
+ <td></td>
71
+ </tr>
72
+ </tbody>
73
+ </table>
74
+ </div>
75
+ </div>
76
+ </div>
77
+ HTML
78
+ end
79
+ end
@@ -0,0 +1,132 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
+
3
+ describe "CML Search" do
4
+ it "should render basic search" do
5
+ cml = <<-HTML
6
+ <cml:search label="Coolio" />
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="search cml_field text">
12
+ <label class="legend">Coolio</label>
13
+ <div class="cml_row search" data-engine="googlecse" data-cse="#{CML::Tags::Search::DEFAULT_CSE}">
14
+ <input name="u12345[coolio_search_terms]" type="text" value="" class="googlecse no_validate" /><input type="button" value="Search" class="no_validate" />
15
+ </div>
16
+ <div class="cml_row results"></div>
17
+ <div class="cml_row selected_result">
18
+ <input name="u12345[coolio]" class="coolio" value="" type="text" />
19
+ </div>
20
+ </div>
21
+ </div>
22
+ HTML
23
+ end
24
+
25
+ it "should render basic search with attributes" do
26
+ cml = <<-HTML
27
+ <cml:search label="Coolio" validates="required" only-if="foo||bar" default="test" engine="google"/>
28
+ HTML
29
+ @p = Parser.new(cml, :prefix => "u12345")
30
+ @p.to_html.should sorta_match(<<-HTML)
31
+ <div class="cml" id="u12345">
32
+ <div class="search logic-only-if:foo||bar cml_field text">
33
+ <label class="legend">Coolio</label>
34
+ <div class="cml_row search" data-engine="google" data-cse="">
35
+ <input name="u12345[coolio_search_terms]" type="text" value="test" class="default google no_validate" /><input type="button" value="Search" class="no_validate" />
36
+ </div>
37
+ <div class="cml_row results"></div>
38
+ <div class="cml_row selected_result">
39
+ <input name="u12345[coolio]" class="coolio validates-required" value="" type="text" />
40
+ </div>
41
+ </div>
42
+ </div>
43
+ HTML
44
+ end
45
+
46
+ it "should render custom search with cse attribute" do
47
+ cml = <<-HTML
48
+ <cml:search label="Coolio" validates="required" only-if="foo||bar" default="test" engine="googlecse" cse="002077591359011991755:dv3z-i7mm7o" />
49
+ HTML
50
+ @p = Parser.new(cml, :prefix => "u12345")
51
+ @p.to_html.should sorta_match(<<-HTML)
52
+ <div class="cml" id="u12345">
53
+ <div class="search logic-only-if:foo||bar cml_field text">
54
+ <label class="legend">Coolio</label>
55
+ <div class="cml_row search" data-engine="googlecse" data-cse="002077591359011991755:dv3z-i7mm7o">
56
+ <input name="u12345[coolio_search_terms]" type="text" value="test" class="default googlecse no_validate" /><input type="button" value="Search" class="no_validate" />
57
+ </div>
58
+ <div class="cml_row results"></div>
59
+ <div class="cml_row selected_result">
60
+ <input name="u12345[coolio]" class="coolio validates-required" value="" type="text" />
61
+ </div>
62
+ </div>
63
+ </div>
64
+ HTML
65
+ end
66
+
67
+ it "handles normalization/gold" do
68
+ cml = <<-HTML
69
+ <cml:search label="Coolio" gold="true" engine="google"/>
70
+ HTML
71
+ @p = Parser.new(cml, :prefix => "unit[data]", :normalize => true)
72
+ @p.to_html.should sorta_match(<<-HTML)
73
+ <div class="cml" id="unit[data]">
74
+ <div class="search cml_field text">
75
+ <label class="legend">Coolio</label>
76
+ <div class="cml_row search" data-engine="google" data-cse="">
77
+ <input name="unit[data][coolio_search_terms_gold][]" type="text" value="" class="google no_validate" /><input type="button" value="Search" class="no_validate" />
78
+ </div>
79
+ <div class="cml_row results"></div>
80
+ <div class="cml_row selected_result">
81
+ <input name="unit[data][coolio_gold][]" class="coolio_gold" type="text" value="" />
82
+ </div>
83
+ </div>
84
+ </div>
85
+ HTML
86
+
87
+ cml = <<-HTML
88
+ <cml:search label="Coolio" gold="true" />
89
+ HTML
90
+ @p = Parser.new(cml, :prefix => "unit[data]", :normalize => true, :data => {
91
+ "coolio_search_terms_gold" => ["bork"],
92
+ "coolio_gold" => ["http://apple.com", "http://microsoft.com"]
93
+ })
94
+ @p.to_html.should sorta_match(<<-HTML)
95
+ <div class="cml" id="unit[data]">
96
+ <div class="search cml_field text">
97
+ <label class="legend">Coolio</label>
98
+ <div class="cml_row search" data-engine="googlecse" data-cse="#{CML::Tags::Search::DEFAULT_CSE}">
99
+ <input name="unit[data][coolio_search_terms_gold][]" type="text" value="bork" class="googlecse no_validate" /><input type="button" value="Search" class="no_validate" />
100
+ </div>
101
+ <div class="cml_row results"></div>
102
+ <div class="cml_row selected_result">
103
+ <input name="unit[data][coolio_gold][]" class="coolio_gold cml_gold_loaded" type="text" value="http://apple.com" />
104
+ </div>
105
+ <div class="cml_row selected_result">
106
+ <input name="unit[data][coolio_gold][]" class="coolio_gold cml_gold_loaded" type="text" value="http://microsoft.com" />
107
+ </div>
108
+ </div>
109
+ </div>
110
+ HTML
111
+ end
112
+
113
+ it "should render basic search as a non-field" do
114
+ cml = <<-HTML
115
+ <cml:search label="Coolio" field="false" />
116
+ HTML
117
+ @p = Parser.new(cml, :prefix => "u12345")
118
+ @p.to_html.should_not =~ /selected_result/
119
+ @p.to_html.should_not =~ /No data/
120
+ @p.to_html.should sorta_match(<<-HTML)
121
+ <div class="cml" id="u12345">
122
+ <div class="search cml_field text">
123
+ <label class="legend">Coolio</label>
124
+ <div class="cml_row search" data-engine="googlecse" data-cse="#{CML::Tags::Search::DEFAULT_CSE}">
125
+ <input name="u12345[coolio_search_terms]" type="text" value="" class="googlecse no_validate" /><input type="button" value="Search" class="no_validate" />
126
+ </div>
127
+ <div class="cml_row results"></div>
128
+ </div>
129
+ </div>
130
+ HTML
131
+ end
132
+ end
@@ -0,0 +1,76 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
+
3
+ describe "CML Select" do
4
+ it "should render basic select" do
5
+ cml = <<-HTML
6
+ <cml:select label="Basic">
7
+ <cml:option>One</option>
8
+ <cml:option>Two</option>
9
+ <cml:option>Three</option>
10
+ </cml:select>
11
+ HTML
12
+ @p = Parser.new(cml, :prefix => "u12345")
13
+ @p.to_html.should sorta_match(<<-HTML)
14
+ <div class="cml" id="u12345">
15
+ <div class="select cml_field">
16
+ <label class="legend">Basic</label>
17
+ <div class="cml_row"><select name="u12345[basic]" class="basic">
18
+ <option>One</option>
19
+ <option>Two</option>
20
+ <option>Three</option>
21
+ </select></div>
22
+ </div>
23
+ </div>
24
+ HTML
25
+ end
26
+
27
+ it "should render correctly when required" do
28
+ cml = <<-HTML
29
+ <cml:select label="Basic" validates="required">
30
+ <cml:option value="oney">One</cml:option>
31
+ <cml:option selected="true">Two</cml:option>
32
+ <cml:option label="Awesome"/>
33
+ </cml:select>
34
+ HTML
35
+ @p = Parser.new(cml, :prefix => "u12345")
36
+ @p.to_html.should sorta_match(<<-HTML)
37
+ <div class="cml" id="u12345">
38
+ <div class="select cml_field">
39
+ <label class="legend">Basic</label>
40
+ <div class="cml_row"><select name="u12345[basic]" class="basic validates-required">
41
+ <option value="">Select one</option>
42
+ <option value="oney">One</option>
43
+ <option selected="selected">Two</option>
44
+ <option>Awesome</option>
45
+ </select></div>
46
+ </div>
47
+ </div>
48
+ HTML
49
+ end
50
+
51
+ it "should render complex select" do
52
+ cml = <<-HTML
53
+ <cml:select label="Basic" default="Choose an option">
54
+ <cml:option value="oney">One</cml:option>
55
+ <cml:option selected="true">Two</cml:option>
56
+ <cml:option label="Awesome"/>
57
+ </cml:select>
58
+ HTML
59
+ @p = Parser.new(cml, :prefix => "u12345")
60
+ @p.tags[0].children.map {|t| t.raw_label }.should == ["Choose an option", "One", "Two", "Awesome"]
61
+ #puts Parser.escape(@p.to_html)
62
+ @p.to_html.should sorta_match(<<-HTML)
63
+ <div class="cml" id="u12345">
64
+ <div class="select cml_field">
65
+ <label class="legend">Basic</label>
66
+ <div class="cml_row"><select name="u12345[basic]" class="basic">
67
+ <option value="">Choose an option</option>
68
+ <option value="oney">One</option>
69
+ <option selected="selected">Two</option>
70
+ <option>Awesome</option>
71
+ </select></div>
72
+ </div>
73
+ </div>
74
+ HTML
75
+ end
76
+ end
@@ -0,0 +1,93 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
+
3
+ describe "CML Tag" do
4
+ it "lists no validators when none" do
5
+ @p = Parser.new(<<-HTML)
6
+ <cml:text label="Don't validate me, bro!" />
7
+ HTML
8
+ @p.tags[0].validators.should == []
9
+ end
10
+
11
+ it "lists validators" do
12
+ @p = Parser.new(<<-HTML)
13
+ <cml:text label="Validate me!" validates="required awesome stuff dude" />
14
+ HTML
15
+ @p.tags[0].validators.should == ["required", "awesome", "stuff", "dude"]
16
+ end
17
+
18
+ it "lists matchers" do
19
+ @p = Parser.new(<<-HTML)
20
+ <cml:text label="Match me!" validates="required" matcher="range" />
21
+ HTML
22
+ @p.to_html.should sorta_match(<<-HTML)
23
+ <div class="cml" id="">
24
+ <div class="text matcher:range cml_field">
25
+ <label class="legend">Match me!</label>
26
+ <div class="cml_row"><input name="match_me" type="text" value="" class="match_me validates-required" /></div>
27
+ </div>
28
+ </div>
29
+ HTML
30
+ end
31
+
32
+ describe "with data attributes" do
33
+ it "handles one data attribute" do
34
+ @cml = "<cml:text label='foo' data-is-fun='true' />"
35
+ @parser = Parser.new( @cml, :prefix => "u" )
36
+ @parser.to_html.should sorta_match( <<-HTML )
37
+ <div class="cml" id="u">
38
+ <div class="text cml_field" data-is-fun="true">
39
+ <label class="legend">foo</label>
40
+ <div class="cml_row">
41
+ <input name="u[foo]" class="foo" type="text" value="">
42
+ </div>
43
+ </div>
44
+ </div>
45
+ HTML
46
+ end
47
+
48
+ it "handles many data attributes" do
49
+ @cml = "<cml:text label='foo' data-is-fun='true' data-is-cool='you betcha' />"
50
+ @parser = Parser.new( @cml, :prefix => "u" )
51
+ @parser.to_html.should sorta_match( <<-HTML )
52
+ <div class="cml" id="u">
53
+ <div class="text cml_field" data-is-fun="true" data-is-cool="you betcha">
54
+ <label class="legend">foo</label>
55
+ <div class="cml_row">
56
+ <input name="u[foo]" class="foo" type="text" value="">
57
+ </div>
58
+ </div>
59
+ </div>
60
+ HTML
61
+ end
62
+
63
+ it "handles cml:textarea" do
64
+ @cml = "<cml:textarea label='foo' data-is-fun='true' data-is-cool='you betcha' />"
65
+ @parser = Parser.new( @cml, :prefix => "u" )
66
+ @parser.to_html.should sorta_match( <<-HTML )
67
+ <div class="cml" id="u">
68
+ <div class="textarea cml_field" data-is-fun="true" data-is-cool="you betcha">
69
+ <label class="legend">foo</label>
70
+ <div class="cml_row">
71
+ <textarea name="u[foo]" class="foo"></textarea>
72
+ </div>
73
+ </div>
74
+ </div>
75
+ HTML
76
+ end
77
+
78
+ it "deals with crazy characters" do
79
+ @cml = "<cml:text label='foo' data-shit=\"'str' &lt;tag /&gt; \\escape\" />"
80
+ @parser = Parser.new( @cml, :prefix => "u" )
81
+ @parser.to_html.should sorta_match( <<-HTML )
82
+ <div class="cml" id="u">
83
+ <div class="text cml_field" data-shit="'str' &lt;tag /&gt; \\escape">
84
+ <label class="legend">foo</label>
85
+ <div class="cml_row">
86
+ <input name="u[foo]" class="foo" type="text" value="">
87
+ </div>
88
+ </div>
89
+ </div>
90
+ HTML
91
+ end
92
+ end
93
+ end
@@ -0,0 +1,66 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
+
3
+ describe "CML Text" do
4
+ it "should render basic text" do
5
+ cml = <<-HTML
6
+ <cml:text label="Coolio"/>
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="text cml_field">
12
+ <label class="legend">Coolio</label>
13
+ <div class="cml_row"><input type="text" value="" name="u12345[coolio]" class="coolio"/></div>
14
+ </div>
15
+ </div>
16
+ HTML
17
+ end
18
+
19
+ it "should render text with multiple" do
20
+ cml = <<-HTML
21
+ <cml:text label="Coolio" multiple="true"/>
22
+ HTML
23
+ @p = Parser.new(cml, :prefix => "u12345")
24
+ @p.to_html.should sorta_match(<<-HTML)
25
+ <div class="cml" id="u12345">
26
+ <div class="text multiple list cml_field">
27
+ <label class="legend">Coolio</label>
28
+ <div class="cml_row"><input type="text" value="" name="u12345[coolio][]" class="coolio"/></div>
29
+ </div>
30
+ </div>
31
+ HTML
32
+ end
33
+
34
+ it "should maintain multiple when setting gold and mutliple is first attribute" do
35
+ cml = <<-HTML
36
+ <cml:group>
37
+ <cml:text multiple="true" validates="required" label="Coolio"/>
38
+ </cml:group>
39
+ HTML
40
+ @p = Parser.new(cml, :prefix => "u12345")
41
+ coolio = @p.tags.select {|tag| tag.name == "coolio" }.first.gold = {}
42
+ @p.to_cml.should sorta_match(<<-HTML)
43
+ <cml:group>
44
+ <cml:text multiple="true" validates="required" label="Coolio" gold="true"></cml:text>
45
+ </cml:group>
46
+ HTML
47
+ end
48
+
49
+ it "should render text with classes and instructions tag" do
50
+ cml = <<-HTML
51
+ <cml:text label="Coolio" class="small" validates="required" default="Awesome">
52
+ <cml:instructions>Just be <b>cool</b> bro!</cml:instructions>
53
+ </cml:text>
54
+ HTML
55
+ @p = Parser.new(cml, :prefix => "u12345")
56
+ @p.to_html.should sorta_match(<<-HTML)
57
+ <div class="cml" id="u12345">
58
+ <div class="text cml_field small">
59
+ <label class="legend">Coolio</label>
60
+ <div class="cml_row"><input type="text" class="coolio validates-required small default" value="Awesome" name="u12345[coolio]" /></div>
61
+ <p class="instructions">Just be <b>cool</b> bro!</p>
62
+ </div>
63
+ </div>
64
+ HTML
65
+ end
66
+ end
@@ -0,0 +1,58 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
+
3
+ describe "CML Textarea" do
4
+ it "should render basic text" do
5
+ cml = <<-HTML
6
+ <cml:textarea label="Sweet dude man!" value="4 sure"/>
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="textarea cml_field">
12
+ <label class="legend">Sweet dude man!</label>
13
+ <div class="cml_row"><textarea name="u12345[sweet_dude_man]" class="sweet_dude_man">4 sure</textarea></div>
14
+ </div>
15
+ </div>
16
+ HTML
17
+ end
18
+
19
+ it "should render textarea normalized with instructions" do
20
+ cml = <<-HTML
21
+ <cml:textarea label="Hot" validates="url" default="Awesome" instructions="Nice" gold="true" />
22
+ HTML
23
+ @p = Parser.new(cml, :prefix => "unit[data]", :normalize => true, :data => {"hot_gold" => []})
24
+ #puts Parser.escape(@p.to_html).gsub(/\n/,"<br/>")
25
+ @p.to_html.should sorta_match(<<-HTML)
26
+ <div class="cml" id="unit[data]">
27
+ <div class="textarea cml_field">
28
+ <label class="legend">Hot</label>
29
+ <div class="cml_row">
30
+ <textarea name="unit[data][hot_gold][]" class="hot_gold validates-url default"></textarea>
31
+ </div>
32
+ <p class="instructions">Nice</p>
33
+
34
+ <div class="cml_gold_reason">
35
+ <label class="legend">Reason</label>
36
+ <textarea name="unit[data][hot_gold_reason]"></textarea>
37
+ </div>
38
+ </div>
39
+ </div>
40
+ HTML
41
+ end
42
+
43
+ it "should render text with classes and instructions tag" do
44
+ cml = <<-HTML
45
+ <cml:textarea label="Hot" validates="url" default="Awesome" instructions="Nice" />
46
+ HTML
47
+ @p = Parser.new(cml, :prefix => "u12345")
48
+ @p.to_html.should sorta_match(<<-HTML)
49
+ <div class="cml" id="u12345">
50
+ <div class="textarea cml_field">
51
+ <label class="legend">Hot</label>
52
+ <div class="cml_row"><textarea name="u12345[hot]" class="hot validates-url default">Awesome</textarea></div>
53
+ <p class="instructions">Nice</p>
54
+ </div>
55
+ </div>
56
+ HTML
57
+ end
58
+ end
@@ -0,0 +1,20 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
+
3
+ describe "CML Thumb" do
4
+ it "should render with params" do
5
+ cml = <<-HTML
6
+ <cml:thumb src="http://foobag.com/poo.jpg" width="10" />
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="thumb cml_field">
13
+ <img src="http://nodenailer.crowdflower.com/?w=10&amp;url=http%3A%2F%2Ffoobag.com%2Fpoo.jpg" />
14
+ </div>
15
+ </div>
16
+ HTML
17
+
18
+ @p.should be_valid
19
+ end
20
+ end
@@ -0,0 +1,19 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
+
3
+ describe "CML Unknown" do
4
+ it "should render unknown field" do
5
+ cml = <<-HTML
6
+ <cml:crazy name="secret">
7
+ Something
8
+ </cml:crazy>
9
+ HTML
10
+ @p = Parser.new(cml, :prefix => "u12345")
11
+ @p.to_html.should sorta_match(<<-HTML)
12
+ <div class="cml" id="u12345">
13
+ <div class="crazy cml_field unknown">
14
+ Something
15
+ </div>
16
+ </div>
17
+ HTML
18
+ end
19
+ end