active_form 0.0.1

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 (184) hide show
  1. data.tar.gz.sig +2 -0
  2. data/History.txt +4 -0
  3. data/License.txt +20 -0
  4. data/MIT-LICENSE +19 -0
  5. data/Manifest.txt +181 -0
  6. data/README.txt +1 -0
  7. data/Rakefile +4 -0
  8. data/config/hoe.rb +71 -0
  9. data/config/requirements.rb +17 -0
  10. data/init.rb +5 -0
  11. data/lib/active_form.rb +86 -0
  12. data/lib/active_form/core_extensions.rb +179 -0
  13. data/lib/active_form/definition.rb +72 -0
  14. data/lib/active_form/element.rb +50 -0
  15. data/lib/active_form/elements/base.rb +67 -0
  16. data/lib/active_form/elements/builder.rb +103 -0
  17. data/lib/active_form/elements/button.rb +15 -0
  18. data/lib/active_form/elements/checkbox.rb +18 -0
  19. data/lib/active_form/elements/file.rb +15 -0
  20. data/lib/active_form/elements/hidden.rb +9 -0
  21. data/lib/active_form/elements/image.rb +7 -0
  22. data/lib/active_form/elements/input.rb +23 -0
  23. data/lib/active_form/elements/password.rb +12 -0
  24. data/lib/active_form/elements/radio.rb +18 -0
  25. data/lib/active_form/elements/reset.rb +15 -0
  26. data/lib/active_form/elements/section.rb +37 -0
  27. data/lib/active_form/elements/select.rb +42 -0
  28. data/lib/active_form/elements/submit.rb +19 -0
  29. data/lib/active_form/elements/text.rb +9 -0
  30. data/lib/active_form/elements/textarea.rb +18 -0
  31. data/lib/active_form/errors.rb +73 -0
  32. data/lib/active_form/facets/checkbox_group.rb +11 -0
  33. data/lib/active_form/facets/collection_input.rb +96 -0
  34. data/lib/active_form/facets/radio_group.rb +11 -0
  35. data/lib/active_form/facets/select_date.rb +10 -0
  36. data/lib/active_form/facets/select_datetime.rb +10 -0
  37. data/lib/active_form/facets/select_day.rb +17 -0
  38. data/lib/active_form/facets/select_from_model.rb +60 -0
  39. data/lib/active_form/facets/select_hour.rb +17 -0
  40. data/lib/active_form/facets/select_minute.rb +17 -0
  41. data/lib/active_form/facets/select_month.rb +46 -0
  42. data/lib/active_form/facets/select_numeric_range.rb +59 -0
  43. data/lib/active_form/facets/select_second.rb +17 -0
  44. data/lib/active_form/facets/select_time.rb +10 -0
  45. data/lib/active_form/facets/select_timebased.rb +145 -0
  46. data/lib/active_form/facets/select_weekday.rb +46 -0
  47. data/lib/active_form/facets/select_year.rb +24 -0
  48. data/lib/active_form/mixins/attribute_methods.rb +33 -0
  49. data/lib/active_form/mixins/casting.rb +152 -0
  50. data/lib/active_form/mixins/collection_element_methods.rb +204 -0
  51. data/lib/active_form/mixins/common_methods.rb +350 -0
  52. data/lib/active_form/mixins/container_methods.rb +417 -0
  53. data/lib/active_form/mixins/css_methods.rb +70 -0
  54. data/lib/active_form/mixins/element_methods.rb +314 -0
  55. data/lib/active_form/mixins/javascript_methods.rb +99 -0
  56. data/lib/active_form/mixins/loader_methods.rb +72 -0
  57. data/lib/active_form/mixins/option_element_methods.rb +61 -0
  58. data/lib/active_form/mixins/validation_methods.rb +253 -0
  59. data/lib/active_form/validator.rb +47 -0
  60. data/lib/active_form/validators/alpha.rb +9 -0
  61. data/lib/active_form/validators/alphanum.rb +9 -0
  62. data/lib/active_form/validators/base.rb +132 -0
  63. data/lib/active_form/validators/digits.rb +9 -0
  64. data/lib/active_form/validators/email.rb +29 -0
  65. data/lib/active_form/validators/format.rb +15 -0
  66. data/lib/active_form/validators/length_range.rb +24 -0
  67. data/lib/active_form/validators/number.rb +9 -0
  68. data/lib/active_form/validators/option_count.rb +24 -0
  69. data/lib/active_form/validators/proc.rb +22 -0
  70. data/lib/active_form/validators/required.rb +9 -0
  71. data/lib/active_form/validators/set.rb +21 -0
  72. data/lib/active_form/validators/time_range.rb +30 -0
  73. data/lib/active_form/validators/uri.rb +54 -0
  74. data/lib/active_form/version.rb +9 -0
  75. data/lib/active_form/views/fieldsets.rb +34 -0
  76. data/lib/active_form/views/plain.rb +32 -0
  77. data/lib/active_form/views/tables.rb +28 -0
  78. data/lib/active_form/widget.rb +43 -0
  79. data/lib/active_form/widgets/base.rb +28 -0
  80. data/lib/loob/uri_validator.rb +140 -0
  81. data/lib/rails/acts_as_dropdown/MIT-LICENSE +20 -0
  82. data/lib/rails/acts_as_dropdown/acts_as_dropdown.rb +119 -0
  83. data/lib/rails/acts_as_dropdown/dropdown.rb +27 -0
  84. data/lib/rails/controller_helper.rb +19 -0
  85. data/lib/rails/model/loader.rb +206 -0
  86. data/lib/rails/view_helper.rb +20 -0
  87. data/samples/html/css/style.css +175 -0
  88. data/samples/html/js/effects.js +958 -0
  89. data/samples/html/js/prototype.js +2006 -0
  90. data/samples/html/js/validation.js +228 -0
  91. data/samples/html/plain_view.html +77 -0
  92. data/samples/html/sample001.html +158 -0
  93. data/samples/html/sample002.html +76 -0
  94. data/samples/html/sample003.html +34 -0
  95. data/samples/layouts/default.rhtml +18 -0
  96. data/samples/layouts/plain.rhtml +21 -0
  97. data/samples/layouts/sample003.rhtml +25 -0
  98. data/samples/plain_view.rb +58 -0
  99. data/samples/sample001.rb +111 -0
  100. data/samples/sample002.rb +92 -0
  101. data/samples/sample003.rb +30 -0
  102. data/script/destroy +14 -0
  103. data/script/generate +14 -0
  104. data/script/txt2html +74 -0
  105. data/setup.rb +1585 -0
  106. data/tasks/deployment.rake +34 -0
  107. data/tasks/environment.rake +7 -0
  108. data/tasks/website.rake +17 -0
  109. data/test/elements/test_base_element.rb +159 -0
  110. data/test/elements/test_builder_element.rb +81 -0
  111. data/test/elements/test_button_element.rb +12 -0
  112. data/test/elements/test_checkbox_element.rb +233 -0
  113. data/test/elements/test_file_element.rb +20 -0
  114. data/test/elements/test_hidden_element.rb +11 -0
  115. data/test/elements/test_image_element.rb +11 -0
  116. data/test/elements/test_input_element.rb +39 -0
  117. data/test/elements/test_password_element.rb +16 -0
  118. data/test/elements/test_radio_element.rb +197 -0
  119. data/test/elements/test_reset_element.rb +12 -0
  120. data/test/elements/test_section_element.rb +162 -0
  121. data/test/elements/test_select_element.rb +364 -0
  122. data/test/elements/test_submit_element.rb +12 -0
  123. data/test/elements/test_text_element.rb +91 -0
  124. data/test/elements/test_textarea_element.rb +23 -0
  125. data/test/facets/test_checkbox_group_element.rb +388 -0
  126. data/test/facets/test_radio_group_element.rb +312 -0
  127. data/test/facets/test_select_date_element.rb +211 -0
  128. data/test/facets/test_select_datetime_element.rb +56 -0
  129. data/test/facets/test_select_day_element.rb +37 -0
  130. data/test/facets/test_select_from_model_element.rb +86 -0
  131. data/test/facets/test_select_hour_element.rb +37 -0
  132. data/test/facets/test_select_minute_element.rb +52 -0
  133. data/test/facets/test_select_month_element.rb +79 -0
  134. data/test/facets/test_select_numeric_range_element.rb +14 -0
  135. data/test/facets/test_select_second_element.rb +48 -0
  136. data/test/facets/test_select_time_element.rb +148 -0
  137. data/test/facets/test_select_weekday_element.rb +71 -0
  138. data/test/facets/test_select_year_element.rb +73 -0
  139. data/test/fixtures/author.rb +11 -0
  140. data/test/fixtures/authors.yml +0 -0
  141. data/test/fixtures/book.rb +14 -0
  142. data/test/fixtures/books.yml +8 -0
  143. data/test/fixtures/categories.yml +0 -0
  144. data/test/fixtures/categorization.rb +2 -0
  145. data/test/fixtures/categorizations.yml +0 -0
  146. data/test/fixtures/category.rb +8 -0
  147. data/test/fixtures/publisher.rb +5 -0
  148. data/test/fixtures/publishers.yml +10 -0
  149. data/test/fixtures/schema.rb +43 -0
  150. data/test/rails/test_model_autodefinition.rb +121 -0
  151. data/test/rails/test_model_loader.rb +61 -0
  152. data/test/resources/elements/chunky.rb +11 -0
  153. data/test/resources/forms/demo.rb +5 -0
  154. data/test/resources/models/book.rb +8 -0
  155. data/test/resources/models/register_publisher.rb +5 -0
  156. data/test/resources/sections/demo.rb +6 -0
  157. data/test/resources/sections/foo.rb +6 -0
  158. data/test/resources/validators/foo.rb +9 -0
  159. data/test/resources/widgets/custom.rb +13 -0
  160. data/test/test_active_form.rb +1050 -0
  161. data/test/test_casting.rb +124 -0
  162. data/test/test_definition.rb +68 -0
  163. data/test/test_definition_class.rb +118 -0
  164. data/test/test_element_class.rb +201 -0
  165. data/test/test_helper.rb +74 -0
  166. data/test/test_javascript.rb +234 -0
  167. data/test/test_load_definition.rb +68 -0
  168. data/test/test_load_element.rb +35 -0
  169. data/test/test_load_section_element.rb +43 -0
  170. data/test/test_load_validator.rb +31 -0
  171. data/test/test_load_widget.rb +93 -0
  172. data/test/test_validation.rb +722 -0
  173. data/test/validators/test_validates_as_alpha.rb +26 -0
  174. data/test/validators/test_validates_as_alphanum.rb +26 -0
  175. data/test/validators/test_validates_as_digits.rb +26 -0
  176. data/test/validators/test_validates_as_email.rb +29 -0
  177. data/test/validators/test_validates_as_number.rb +26 -0
  178. data/test/validators/test_validates_as_uri.rb +128 -0
  179. data/test/validators/test_validates_with_format.rb +26 -0
  180. data/test/validators/test_validates_within_length_range.rb +46 -0
  181. data/test/validators/test_validates_within_set.rb +46 -0
  182. data/test/validators/test_validates_within_time_range.rb +53 -0
  183. metadata +307 -0
  184. metadata.gz.sig +4 -0
@@ -0,0 +1,364 @@
1
+ require 'test_helper'
2
+
3
+ class TestSelectElement < Test::Unit::TestCase
4
+
5
+ def test_set_attributes
6
+ [:title, :lang, :size].each do |attribute|
7
+ assert ActiveForm::Element::Select.element_attribute_names.include?(attribute)
8
+ end
9
+ elem = ActiveForm::Element::Select.new :elem, :size => 20
10
+ expected = {"name"=>"elem", "class"=>"elem_select", "id"=>"elem", "size"=>20}
11
+ assert_equal expected, elem.element_attributes
12
+ end
13
+
14
+ def test_multiple
15
+ elem = ActiveForm::Element::Select.new :choices, :options => %w{ one two three four }
16
+ assert !elem.multiple?
17
+
18
+ elem = ActiveForm::Element::Select.new :choices, :options => %w{ one two three four }, :multiple => true
19
+ assert elem.multiple?
20
+ end
21
+
22
+ def test_html_flags
23
+ assert ActiveForm::Element::Select.element_html_flag_names.include?(:multiple)
24
+ elem = ActiveForm::Element::Select.new :elem, :size => 20, :multiple => true, :disabled => true
25
+ expected = {"name"=>"elem[]", "class"=>"elem_select disabled", "id"=>"elem", "size"=>20, "disabled"=>"disabled", "multiple"=>"multiple"}
26
+ assert_equal expected, elem.element_attributes
27
+ end
28
+
29
+ def test_element_value
30
+ elem = ActiveForm::Element::Select.new :elem, :options => %w{ Barney Fred Wilma }, :value => "Fred"
31
+ assert_equal "Fred", elem.element_value
32
+ assert elem.selected?("Fred")
33
+ elem = ActiveForm::Element::Select.new :elem, :options => %w{ Barney Fred Wilma }, :selected => "Fred"
34
+ assert_equal "Fred", elem.element_value
35
+ assert elem.selected?("Fred")
36
+ end
37
+
38
+ def test_default_value
39
+ elem = ActiveForm::Element::Select.new :elem
40
+ assert_equal nil, elem.default_value
41
+ elem = ActiveForm::Element::Select.new :elem, :multiple => true
42
+ assert_equal [], elem.default_value
43
+ end
44
+
45
+ def test_fallback_value
46
+ elem = ActiveForm::Element::Select.new :elem, :options => ['this', 'that', 'other'], :default => 'no preference'
47
+ assert_equal nil, elem.value
48
+ assert_equal nil, elem.default_value
49
+ assert_equal 'no preference', elem.fallback_value
50
+ assert_equal 'no preference', elem.export_value
51
+ elem.value = 'other'
52
+ assert_equal 'other', elem.export_value
53
+ elem = ActiveForm::Element::Select.new :elem, :options => ['this', 'that', 'other'], :default => 'no preference', :multiple => true
54
+ assert_equal [], elem.value
55
+ assert_equal [], elem.default_value
56
+ assert_equal ['no preference'], elem.fallback_value
57
+ assert_equal ['no preference'], elem.export_value
58
+ elem.value = 'other'
59
+ assert_equal ['other'], elem.export_value
60
+ elem = ActiveForm::Element::Select.new :elem, :options => ['red', 'green', 'blue'], :default => ['red', 'green'], :multiple => true
61
+ assert_equal [], elem.value
62
+ assert_equal [], elem.default_value
63
+ assert_equal ['red', 'green'], elem.fallback_value
64
+ assert_equal ['red', 'green'], elem.export_value
65
+ elem.value = 'blue'
66
+ assert_equal ['blue'], elem.export_value
67
+ end
68
+
69
+ def test_set_select_options
70
+ elem = ActiveForm::Element::Select.new :elem do |e|
71
+ e << 'Barney'
72
+ e << 'Fred'
73
+ e << ['Wilma', 3]
74
+ e.option('Betty')
75
+ e.option('Pebbles', 5)
76
+ end
77
+ assert_equal ["Barney", "Fred", 'Wilma', 'Betty', 'Pebbles'], elem.options.collect(&:label)
78
+ assert_equal ["Barney", "Fred", 3, 'Betty', 5], elem.options.collect(&:value)
79
+ elem = ActiveForm::Element::Select.new :elem do |e|
80
+ e << 'Barney' << 'Fred' << 'Wilma'
81
+ end
82
+ assert_equal ["Barney", "Fred", 'Wilma'], elem.options.collect(&:label)
83
+ assert_equal ["Barney", "Fred", 'Wilma'], elem.options.collect(&:value)
84
+ end
85
+
86
+ def test_simple_select_options
87
+ elem = ActiveForm::Element::Select.new :elem, :options => %w{ Barney Fred Wilma }, :value => "Fred"
88
+ assert_equal ["Barney", "Fred", "Wilma"], elem.options.collect(&:value)
89
+ assert_equal "Fred", elem.element_value
90
+ assert elem.selected?("Fred")
91
+ end
92
+
93
+ def test_normal_select_options
94
+ elem = ActiveForm::Element::Select.new :elem, :options => [["Barney", 1], ["Fred", 2], ["Wilma", 3]], :value => 3
95
+ assert_equal [1, 2, 3], elem.options.collect(&:value)
96
+ assert_equal 3, elem.element_value
97
+ assert elem.selected?(3)
98
+ end
99
+
100
+ def test_simple_select_options_multiple
101
+ elem = ActiveForm::Element::Select.new :elem, :multiple => true, :options => %w{ Barney Fred Wilma }, :value => "Fred"
102
+ assert_equal ["Barney", "Fred", "Wilma"], elem.options.collect(&:value)
103
+ assert_equal ["Fred"], elem.element_value
104
+ assert elem.selected?("Fred")
105
+ end
106
+
107
+ def test_normal_select_options_multiple
108
+ elem = ActiveForm::Element::Select.new :elem, :multiple => true, :options => [["Barney", 1], ["Fred", 2], ["Wilma", 3]], :value => 3
109
+ assert_equal [1, 2, 3], elem.options.collect(&:value)
110
+ assert_equal [3], elem.element_value
111
+ assert elem.selected?(3)
112
+ end
113
+
114
+ def test_select_options_multiple
115
+ elem = ActiveForm::Element::Select.new :elem, :multiple => true, :options => [["Barney", 1], ["Fred", 2], ["Wilma", 3]], :value => [2, 3]
116
+ assert_equal [1, 2, 3], elem.options.collect(&:value)
117
+ assert_equal [2, 3], elem.element_value
118
+ assert elem.selected?(2)
119
+ assert elem.selected?(3)
120
+ end
121
+
122
+ def test_element_to_html
123
+ elem = ActiveForm::Element::Select.new :elem, :options => [ ['Barney', 1], ['Fred', 2], ["Wilma", 3] ], :selected => 2
124
+ expected = %`<select class="elem_select" id="elem" name="elem">
125
+ <option value="1">Barney</option>
126
+ <option selected="selected" value="2">Fred</option>
127
+ <option value="3">Wilma</option>
128
+ </select>\n`
129
+ assert_equal expected, elem.to_html
130
+ end
131
+
132
+ def test_element_to_html_multiple
133
+ elem = ActiveForm::Element::Select.new :elem, :multiple => true, :options => [ ['Barney', 1], ['Fred', 2], ["Wilma", 3] ], :value => [2, 3]
134
+ expected = %`<select class="elem_select" id="elem" multiple="multiple" name="elem[]">
135
+ <option value="1">Barney</option>
136
+ <option selected="selected" value="2">Fred</option>
137
+ <option selected="selected" value="3">Wilma</option>
138
+ </select>\n`
139
+ assert_equal expected, elem.to_html
140
+ end
141
+
142
+ def test_element_to_html_options_group
143
+ elem = ActiveForm::Element::Select.new :elem, :value => 'Wilma' do |e|
144
+ e.option_group 'People' do |og|
145
+ og.option 'Barney'
146
+ og.option 'Fred'
147
+ og.option 'Wilma'
148
+ end
149
+ e.option_group('Animals', ['Dino', 'Pluto'])
150
+ e.option_group('Cartoons', [['Simpsons', 'si'], ['Cow&Chicken', 'cc']])
151
+ end
152
+ expected = %`<select class="elem_select" id="elem" name="elem">
153
+ <optgroup label="People">
154
+ <option value="Barney">Barney</option>
155
+ <option value="Fred">Fred</option>
156
+ <option selected="selected" value="Wilma">Wilma</option>
157
+ </optgroup>
158
+ <optgroup label="Animals">
159
+ <option value="Dino">Dino</option>
160
+ <option value="Pluto">Pluto</option>
161
+ </optgroup>
162
+ <optgroup label="Cartoons">
163
+ <option value="si">Simpsons</option>
164
+ <option value="cc">Cow&amp;Chicken</option>
165
+ </optgroup>
166
+ </select>\n`
167
+ assert_equal expected, elem.to_html
168
+ end
169
+
170
+ def test_element_to_html_options_group_multiple
171
+ elem = ActiveForm::Element::Select.new :elem, :multiple => true, :value => %w{ Wilma Dino } do |e|
172
+ e.option_group 'People', ['Barney', 'Fred', 'Wilma']
173
+ e.option_group('Animals', ['Dino', 'Pluto'])
174
+ e.option_group('Cartoons', [['Simpsons', 'si'], ['Cow&Chicken', 'cc']])
175
+ end
176
+ expected = %`<select class="elem_select" id="elem" multiple="multiple" name="elem[]">
177
+ <optgroup label="People">
178
+ <option value="Barney">Barney</option>
179
+ <option value="Fred">Fred</option>
180
+ <option selected="selected" value="Wilma">Wilma</option>
181
+ </optgroup>
182
+ <optgroup label="Animals">
183
+ <option selected="selected" value="Dino">Dino</option>
184
+ <option value="Pluto">Pluto</option>
185
+ </optgroup>
186
+ <optgroup label="Cartoons">
187
+ <option value="si">Simpsons</option>
188
+ <option value="cc">Cow&amp;Chicken</option>
189
+ </optgroup>
190
+ </select>\n`
191
+ assert_equal expected, elem.to_html
192
+ end
193
+
194
+ def test_render_frozen
195
+ elem = ActiveForm::Element::Select.new :elem, :options => [ ['Barney', 1], ['Fred', 2], ["Wilma", 3] ], :frozen => true
196
+ assert_equal "<span class=\"blank\">-</span>\n", elem.to_html
197
+ elem = ActiveForm::Element::Select.new :elem, :options => [ ['Barney', 1], ['Fred', 2], ["Wilma", 3] ], :selected => 2, :frozen => true
198
+ assert_equal 'Fred', elem.to_html
199
+ end
200
+
201
+ def test_render_frozen_multiple
202
+ elem = ActiveForm::Element::Select.new :elem, :options => [ ['Barney', 1], ['Fred', 2], ["Wilma", 3] ], :multiple => true, :frozen => true
203
+ assert_equal "<span class=\"blank\">-</span>\n", elem.to_html
204
+ elem = ActiveForm::Element::Select.new :elem, :options => [ ['Barney', 1], ['Fred', 2], ["Wilma", 3] ], :selected => [2, 3], :multiple => true, :frozen => true
205
+ assert_equal 'Fred, Wilma', elem.to_html
206
+ end
207
+
208
+ def test_reset_options
209
+ elem = ActiveForm::Element::Select.new :elem, :options => [ ['Barney', 1], ['Fred', 2], ["Wilma", 3] ], :add_empty => true
210
+ assert_equal ["--", "Barney", "Fred", "Wilma"], elem.options.collect(&:label)
211
+ elem.reset_options!
212
+ assert_equal [], elem.options.collect(&:label)
213
+ end
214
+
215
+ def test_add_empty_option
216
+ elem = ActiveForm::Element::Select.new :elem, :options => [ ['Barney', 1], ['Fred', 2], ["Wilma", 3] ], :add_empty => true
217
+ assert_equal ['--', :blank], [elem.options.first.label, elem.options.first.value]
218
+ elem = ActiveForm::Element::Select.new :elem, :options => [ ['Barney', 1], ['Fred', 2], ["Wilma", 3] ], :empty_option => 'choose a name:'
219
+ assert_equal ['choose a name:', :blank], [elem.options.first.label, elem.options.first.value]
220
+ elem = ActiveForm::Element::Select.new :elem, :options => [ ['Barney', 1], ['Fred', 2], ["Wilma", 3] ], :empty => 'choose a name:'
221
+ assert_equal ['choose a name:', :blank], [elem.options.first.label, elem.options.first.value]
222
+ elem = ActiveForm::Element::Select.new :elem, :options => [ ['Barney', 1], ['Fred', 2], ["Wilma", 3] ] do |e|
223
+ e.add_empty_option
224
+ end
225
+ assert_equal ['--', :blank], [elem.options.first.label, elem.options.first.value]
226
+ end
227
+
228
+ def test_no_initial_value
229
+ form = ActiveForm::compose :myform do |f|
230
+ f.select_element :people, :options => [ ['Barney', 1], ['Fred', 2], ["Wilma", 3] ]
231
+ end
232
+ assert_equal nil, form[:people].value
233
+ form = ActiveForm::compose :myform do |f|
234
+ f.select_element :people, :options => [ ['Barney', 1], ['Fred', 2], ["Wilma", 3] ], :multiple => true
235
+ end
236
+ assert_equal [], form[:people].value
237
+ end
238
+
239
+ def test_set_initial_value
240
+ values = { :people => 2 }
241
+ form = ActiveForm::compose :myform, :values => values do |f|
242
+ f.select_element :people, :options => [ ['Barney', 1], ['Fred', 2], ["Wilma", 3] ], :multiple => true
243
+ end
244
+ assert_equal [2], form[:people].value
245
+ assert_equal [2], form[:people].export_value
246
+ form.values = { :people => [2, 3] }
247
+ assert_equal [2, 3], form[:people].value
248
+ assert_equal [2, 3], form[:people].export_value
249
+ expected = { "people" => [2, 3] }
250
+ assert_equal expected, form.export_values
251
+ end
252
+
253
+ def test_export_value
254
+ form = ActiveForm::compose :myform do |f|
255
+ f.select_element :people, :options => [ ['Barney', 1], ['Fred', 2], ["Wilma", 3] ], :multiple => true
256
+ end
257
+ form[:people].selected = [2, 3]
258
+ expected = { "people" => [2, 3] }
259
+ assert_equal expected, form.export_values
260
+ end
261
+
262
+ def test_update_from_params
263
+ form = ActiveForm::compose :myform do |f|
264
+ f.select_element :people, :options => [ ['Barney', 1], ['Fred', 2], ["Wilma", 3] ]
265
+ end
266
+ params = { :myform => { :people => [3] } }
267
+ form.update_from_params(params)
268
+ expected = { "people" => 3 }
269
+ assert_equal expected, form.export_values
270
+
271
+ form = ActiveForm::compose :myform do |f|
272
+ f.select_element :people, :options => [ ['Barney', 1], ['Fred', 2], ["Wilma", 3] ], :multiple => true
273
+ end
274
+ params = { :myform => { :people => [3] } }
275
+ form.update_from_params(params)
276
+ expected = { "people" => [3] }
277
+ assert_equal expected, form.export_values
278
+ end
279
+
280
+ def test_required_validation
281
+ form = ActiveForm::compose :myform do |f|
282
+ f.select_element :people, :options => [ ['Barney', 1], ['Fred', 2], ["Wilma", 3] ], :required => true
283
+ end
284
+ assert form[:people].blank?
285
+ assert !form.validate
286
+ assert_equal ["required"], form[:people].errors.collect(&:code)
287
+ form[:people].value = 2
288
+ assert form.validate
289
+ form[:people].value = 7
290
+ assert form[:people].blank?
291
+ assert !form.validate
292
+ end
293
+
294
+ def test_option_count_validation
295
+ form = ActiveForm::compose :myform do |f|
296
+ f.select_element :alpha, :options => ('a'..'z'), :required => true
297
+ end
298
+ assert !form.validate
299
+ assert_equal ["required"], form[:alpha].errors.collect(&:code)
300
+ assert_equal ["Alpha: can't be blank"], form[:alpha].errors.collect(&:msg)
301
+ form[:alpha].value = 'a'
302
+ assert form.validate
303
+
304
+ form = ActiveForm::compose :myform do |f|
305
+ f.select_element :alpha, :options => ('a'..'z'), :required => 3, :multiple => true
306
+ end
307
+ assert !form.validate
308
+ assert_equal ["required"], form[:alpha].errors.collect(&:code)
309
+ assert_equal ["Alpha: you need to select 3 items"], form[:alpha].errors.collect(&:msg)
310
+ form[:alpha].value = ['a', 'b', 'c']
311
+ assert form.validate
312
+
313
+ form = ActiveForm::compose :myform do |f|
314
+ f.select_element :alpha, :options => ('a'..'z'), :required => 2..4, :multiple => true do |e|
315
+ e.required_message = "%1$s: you need to select between %3$s and %4$s items"
316
+ end
317
+ end
318
+ assert !form.validate
319
+ assert_equal ["required"], form[:alpha].errors.collect(&:code)
320
+ assert_equal ["Alpha: you need to select between 2 and 4 items"], form[:alpha].errors.collect(&:msg)
321
+ form[:alpha].value = ['a']
322
+ assert !form.validate
323
+ form[:alpha].value = ['a', 'b']
324
+ assert form.validate
325
+ form[:alpha].value = ['a', 'b', 'c']
326
+ assert form.validate
327
+ form[:alpha].value = ['a', 'b', 'c', 'd']
328
+ assert form.validate
329
+ form[:alpha].value = ['a', 'b', 'c', 'd', 'e']
330
+ assert !form.validate
331
+ end
332
+
333
+ def test_valid_option
334
+ elem = ActiveForm::Element::Select.new :elem, :multiple => true do |e|
335
+ e.option_group 'People', ['Barney', 'Fred', 'Wilma']
336
+ e.option_group 'Animals', ['Dino', 'Pluto']
337
+ end
338
+ assert elem.valid_option?('Barney')
339
+ assert elem.valid_option?('Dino')
340
+ assert !elem.valid_option?('Pebbles')
341
+ end
342
+
343
+ def test_enumerable_methods
344
+ form = ActiveForm::compose :myform do |f|
345
+ f.select_element :people, :options => [ ['Barney', 1], ['Fred', 2], ["Wilma", 3] ]
346
+ end
347
+ assert_equal ["Barney", "Fred", "Wilma"], form[:people].option_labels
348
+ assert_equal ["Barney", "Fred", "Wilma"], form[:people].collect(&:label)
349
+ assert_equal [1, 2, 3], form[:people].option_values
350
+ assert_equal [1, 2, 3], form[:people].collect(&:value)
351
+ end
352
+
353
+ def test_enumerable_methods_group
354
+ elem = ActiveForm::Element::Select.new :elem, :multiple => true do |e|
355
+ e.option_group 'People', ['Barney', 'Fred', 'Wilma']
356
+ e.option_group 'Animals', ['Dino', 'Pluto']
357
+ end
358
+ assert_equal ["Barney", "Fred", "Wilma", "Dino", "Pluto"], elem.option_labels
359
+ assert_equal ["Barney", "Fred", "Wilma", "Dino", "Pluto"], elem.option_values
360
+ assert_equal ["People", "Animals"], elem.collect(&:label)
361
+ assert_equal ["Barney", "Fred", "Wilma", "Dino", "Pluto"], elem.collect(&:options).flatten.collect(&:label)
362
+ end
363
+
364
+ end
@@ -0,0 +1,12 @@
1
+ require 'test_helper'
2
+
3
+ class TestSubmitElement < Test::Unit::TestCase
4
+
5
+ def test_element_to_html
6
+ elem = ActiveForm::Element::Submit.new :elem, :label => 'Send'
7
+ assert !elem.labelled?
8
+ expected = %|<input class="elem_submit" id="elem" name="elem" type="submit" value="Send"/>\n|
9
+ assert_equal expected, elem.to_html
10
+ end
11
+
12
+ end
@@ -0,0 +1,91 @@
1
+ require 'test_helper'
2
+
3
+ class TestTextElement < Test::Unit::TestCase
4
+
5
+ def test_set_attributes
6
+ [:title, :lang, :type, :value, :maxlength, :size].each do |attribute|
7
+ assert ActiveForm::Element::Text.element_attribute_names.include?(attribute)
8
+ end
9
+
10
+ elem = ActiveForm::Element::Text.new :elem, :value => 'string', :maxlength => 20, :size => 20
11
+ expected = {"type" => "text", "name"=>"elem", "class"=>"elem_text", "id"=>"elem", "value"=>"string", "maxlength"=>20, "size"=>20}
12
+ assert_equal expected, elem.element_attributes
13
+ end
14
+
15
+ def test_option_flag_to_html_flag
16
+ form = ActiveForm::compose :form do |f|
17
+ f.text_element :firstname, :readonly => true
18
+ f.text_element :lastname, :disabled => true
19
+ end
20
+ expected = {"name"=>"form[firstname]", "readonly"=>"readonly", "class"=>"elem_text readonly", "type"=>"text", "id"=>"form_firstname", "value"=>"", "size"=>30}
21
+ assert_equal expected, form[:firstname].element_attributes
22
+ expected = {"name"=>"form[lastname]", "class"=>"elem_text disabled", "type"=>"text", "id"=>"form_lastname", "disabled"=>"disabled", "value"=>"", "size"=>30}
23
+ assert_equal expected, form[:lastname].element_attributes
24
+ end
25
+
26
+ def test_frozen_value
27
+ elem = ActiveForm::Element::Text.new :elem, :frozen => true, :value => "Freeze me!"
28
+ assert elem.frozen?
29
+ assert_equal "Freeze me!", elem.formatted_value
30
+ elem.frozen_value = "I'm frozen now!"
31
+ assert_equal "I'm frozen now!", elem.formatted_value
32
+ assert_equal "I'm frozen now!", elem.to_html
33
+
34
+ elem.frozen = false
35
+ assert !elem.frozen?
36
+ expected = %|<input class="elem_text" id="elem" name="elem" size="30" type="text" value="Freeze me!"/>\n|
37
+ assert_equal expected, elem.to_html
38
+ end
39
+
40
+ def test_freeze_filter
41
+ elem = ActiveForm::Element::Text.new :elem, :frozen => true, :value => "Freeze me!"
42
+ elem.freeze_filter = lambda { |value| value.to_s.upcase }
43
+ assert elem.frozen?
44
+ assert_equal "FREEZE ME!", elem.formatted_value
45
+ elem.frozen_value = "I'm frozen now!"
46
+ assert_equal "I'm frozen now!", elem.formatted_value
47
+ elem.frozen = false
48
+ assert_equal "Freeze me!", elem.formatted_value
49
+ end
50
+
51
+ def test_element_to_html
52
+ elem = ActiveForm::Element::Text.new :elem
53
+ expected = %|<input class="elem_text" id="elem" name="elem" size="30" type="text"/>\n|
54
+ assert_equal expected, elem.to_html
55
+ end
56
+
57
+ def test_element_with_attributes_to_html
58
+ elem = ActiveForm::Element::Text.new :elem, :size => 20, :value => 'hello world'
59
+ assert_equal 'hello world', elem.element_value
60
+ elem.element_value = 'new value'
61
+ assert_equal 'new value', elem.element_value
62
+ expected = %|<input class="elem_text" id="elem" name="elem" size="20" type="text" value="new value"/>\n|
63
+ assert_equal expected, elem.to_html
64
+ end
65
+
66
+ def test_element_with_casting_and_formatting_filters
67
+ elem = ActiveForm::Element::Text.new :elem, :value => ['one', 'two', 'three'] # this is regarded as element_value
68
+ elem.define_formatting_filter { |value| value.join(', ') }
69
+ elem.define_casting_filter { |value| value.split(/,\s+/) }
70
+ assert_equal ['one', 'two', 'three'], elem.element_value
71
+ assert_equal 'one, two, three', elem.formatted_value
72
+ expected = %|<input class="elem_text" id="elem" name="elem" size="30" type="text" value="one, two, three"/>\n|
73
+ assert_equal expected, elem.to_html
74
+ elem.value = 'a, b, c, d, e'
75
+ assert_equal ['a', 'b', 'c', 'd', 'e'], elem.element_value
76
+ expected = %|<input class="elem_text" id="elem" name="elem" size="30" type="text" value="a, b, c, d, e"/>\n|
77
+ assert_equal expected, elem.to_html
78
+ end
79
+
80
+ def test_export_value_for_grouped_elements
81
+ form = ActiveForm::compose :form do |f|
82
+ f.text_element :elem_a, :group => :grp
83
+ f.text_element :elem_b, :group => :grp
84
+ f.text_element :elem_c
85
+ end
86
+ form.update_values(:elem_a => 'One', :elem_b => 'Two')
87
+ expected = { "elem_c" => nil, "grp" => ["One", "Two"] }
88
+ assert_equal expected, form.export_values
89
+ end
90
+
91
+ end