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,211 @@
1
+ require 'test_helper'
2
+
3
+ class TestSelectDateElement < Test::Unit::TestCase
4
+
5
+ def teardown
6
+ ActiveForm::use_american_formatting
7
+ end
8
+
9
+ def test_format
10
+ form = ActiveForm::compose :form do |f|
11
+ f.select_date_element :start, :format => [:day, :month, :year], :range => (2000..2005)
12
+ end
13
+ assert_equal [:day, :month, :year], form[:start].collect(&:name)
14
+ range = Range.new(2000, 2005)
15
+ assert_equal [*range], form[:start][:year].collect(&:value)
16
+ assert_equal range.map(&:to_s), form[:start][:year].collect(&:label)
17
+ end
18
+
19
+ def test_european_formatting
20
+ ActiveForm::use_european_formatting
21
+ elem = ActiveForm::Element::SelectDate.new :date
22
+ assert_equal [:day, :month, :year], elem.collect(&:name)
23
+ end
24
+
25
+ def test_american_formatting
26
+ ActiveForm::use_american_formatting
27
+ elem = ActiveForm::Element::SelectDate.new :date
28
+ assert_equal [:month, :day, :year], elem.collect(&:name)
29
+ end
30
+
31
+ def test_invalid_dates
32
+ expected = {"month"=>1, "day"=>1, "year"=>2000}
33
+ elem = ActiveForm::Element::SelectDate.new :date, :start_year => 2000, :end_year => 2010
34
+ elem.value = '34-11-2006'
35
+ assert_equal expected, elem.export_value
36
+ elem.value = '2-34-2006'
37
+ assert_equal expected, elem.export_value
38
+ elem.value = nil
39
+ assert_equal expected, elem.export_value
40
+ elem.value = ''
41
+ assert_equal expected, elem.export_value
42
+ elem.value = { :month => 24, :day => 2, :year => 2005 }
43
+ expected = {"month"=>12, "day"=>2, "year"=>2005}
44
+ assert_equal expected, elem.export_value
45
+ end
46
+
47
+ def test_define_start_and_end_year
48
+ elem = ActiveForm::Element::SelectDate.new :date, :start_year => 2000, :end_year => 2006
49
+ range = Range.new(2000, 2006)
50
+ assert_equal [*range], elem[:year].collect(&:value)
51
+ assert_equal range.map(&:to_s), elem[:year].collect(&:label)
52
+ end
53
+
54
+ def test_assign_value_and_export_value
55
+ form = ActiveForm::compose :form do |f|
56
+ f.select_date_element :start, :format => [:day, :month, :year], :range => (2005..2010)
57
+ end
58
+ expected = {"month"=>1, "day"=>1, "year"=>2005}
59
+ assert_equal expected, form[:start].export_value
60
+
61
+ form[:start].value = { :day => 11, :month => 9 }
62
+ expected = {"month"=>9, "day"=>11, "year"=>2005}
63
+ assert_equal expected, form[:start].export_value
64
+
65
+ form[:start].value = { :day => 11, :month => 9, :year => 2008 }
66
+ expected = {"month"=>9, "day"=>11, "year"=>2008}
67
+ assert_equal expected, form[:start].export_value
68
+
69
+ form[:start].value = Time.local(2007, 8, 14, 13, 52, 5)
70
+ expected = {"month"=>8, "day"=>14, "year"=>2007}
71
+ assert_equal expected, form[:start].export_value
72
+
73
+ form[:start].value = '2007-08-14 13:52:05'
74
+ expected = {"month"=>8, "day"=>14, "year"=>2007}
75
+ assert_equal expected, form[:start].export_value
76
+
77
+ form[:start].value = '2007-08-14'
78
+ expected = {"month"=>8, "day"=>14, "year"=>2007}
79
+ assert_equal expected, form[:start].export_value
80
+
81
+ form[:start].value = '14-08-2007'
82
+ expected = {"month"=>8, "day"=>14, "year"=>2007}
83
+ assert_equal expected, form[:start].export_value
84
+ end
85
+
86
+ def test_export_value_as_casted
87
+ elem = ActiveForm::Element::SelectDate.new :date, :range => (2000..2010)
88
+ elem.value = '2007-08-14'
89
+ expected = {"month"=>8, "day"=>14, "year"=>2007}
90
+ assert_equal expected, elem.export_value
91
+
92
+ elem = ActiveForm::Element::SelectDate.new :date, :now => Time.local(2007, 8, 14, 13, 52, 5), :range => (2000..2010), :type_cast => :hash
93
+ expected = {"month"=>8, "second"=>5, "minute"=>52, "hour"=>13, "day"=>14, "year"=>2007}
94
+ assert_equal expected, elem.export_value
95
+
96
+ elem = ActiveForm::Element::SelectDate.new :date, :now => Time.local(2007, 8, 14, 13, 52, 5), :range => (2000..2010), :type_cast => :array
97
+ assert_equal [2007, 8, 14, 13, 52, 5], elem.export_value
98
+
99
+ elem = ActiveForm::Element::SelectDate.new :date, :now => Time.local(2007, 8, 14, 13, 52, 5), :range => (2000..2010), :type_cast => :string
100
+ assert_equal "2007-08-14 13:52:05", elem.export_value
101
+
102
+ elem = ActiveForm::Element::SelectDate.new :date, :now => Time.local(2007, 8, 14, 13, 52, 5), :range => (2000..2010), :type_cast => :date
103
+ assert_equal Time.local(2007, 8, 14, 13, 52, 5).to_date, elem.export_value
104
+
105
+ elem = ActiveForm::Element::SelectDate.new :date, :now => Time.local(2007, 8, 14, 13, 52, 5), :range => (2000..2010), :type_cast => :time
106
+ assert_equal Time.local(2007, 8, 14, 13, 52, 5), elem.export_value
107
+ end
108
+
109
+ def test_default_value
110
+ elem = ActiveForm::Element::SelectDate.new :date, :range => (2000..2010)
111
+ expected = {"month"=>1, "day"=>1, "year"=>2000}
112
+ assert_equal expected, elem.export_value
113
+
114
+ elem = ActiveForm::Element::SelectDate.new :date, :now => Time.local(2007, 8, 14, 13, 52, 5), :range => (2000..2010)
115
+ expected = {"month"=>8, "day"=>14, "year"=>2007}
116
+ assert_equal expected, elem.value
117
+ assert_equal expected, elem.export_value
118
+ end
119
+
120
+ def test_update_from_params
121
+ form = ActiveForm::compose :form do |f|
122
+ f.select_date_element :start, :range => (2000..2010)
123
+ end
124
+ expected = { 'month' => 9, 'day' => 22, 'year' => 2006 }
125
+ form.update_from_params({ 'form' => { 'start' => { 'month' => '9', 'day' => '22', 'year' => '2006' } } })
126
+ assert_equal expected, form[:start].export_value
127
+ form.update_from_params({ 'form' => { 'start' => '22-09-2006 13:52:05' } })
128
+ assert_equal expected, form[:start].export_value
129
+ form.update_from_params({ 'form' => { 'start' => '22-09-2006' } })
130
+ assert_equal expected, form[:start].export_value
131
+ form.update_from_params({ 'form' => { 'start' => '2006/09/22' } })
132
+ assert_equal expected, form[:start].export_value
133
+ end
134
+
135
+ def test_assign_with_now
136
+ form = ActiveForm::compose :form do |f|
137
+ f.select_date_element :start, :now => Time.local(2004, 12, 24, 13, 52, 5), :range => (2000..2010)
138
+ end
139
+ expected = {"month"=>12, "day"=>24, "year"=>2004}
140
+ assert_equal expected, form[:start].export_value
141
+ end
142
+
143
+ def test_element_to_html
144
+ form = ActiveForm::compose :form do |f|
145
+ f.select_date_element :start, :format => [:day, :month, :year], :range => (2005..2006) do |e|
146
+ e[:month].use_short_month = true
147
+ end
148
+ end
149
+ expected = %|<div class="active_select_date" id="form_start">
150
+ <span class="elem_select_day" id="elem_form_start_day">
151
+ <select class="elem_select_day" id="form_start_day" name="form[start][day]">
152
+ <option selected="selected" value="1">01</option>
153
+ <option value="2">02</option>
154
+ <option value="3">03</option>
155
+ <option value="4">04</option>
156
+ <option value="5">05</option>
157
+ <option value="6">06</option>
158
+ <option value="7">07</option>
159
+ <option value="8">08</option>
160
+ <option value="9">09</option>
161
+ <option value="10">10</option>
162
+ <option value="11">11</option>
163
+ <option value="12">12</option>
164
+ <option value="13">13</option>
165
+ <option value="14">14</option>
166
+ <option value="15">15</option>
167
+ <option value="16">16</option>
168
+ <option value="17">17</option>
169
+ <option value="18">18</option>
170
+ <option value="19">19</option>
171
+ <option value="20">20</option>
172
+ <option value="21">21</option>
173
+ <option value="22">22</option>
174
+ <option value="23">23</option>
175
+ <option value="24">24</option>
176
+ <option value="25">25</option>
177
+ <option value="26">26</option>
178
+ <option value="27">27</option>
179
+ <option value="28">28</option>
180
+ <option value="29">29</option>
181
+ <option value="30">30</option>
182
+ <option value="31">31</option>
183
+ </select>
184
+ </span>
185
+ <span class="elem_select_month" id="elem_form_start_month">
186
+ <select class="elem_select_month" id="form_start_month" name="form[start][month]">
187
+ <option selected="selected" value="1">Jan</option>
188
+ <option value="2">Feb</option>
189
+ <option value="3">Mar</option>
190
+ <option value="4">Apr</option>
191
+ <option value="5">May</option>
192
+ <option value="6">Jun</option>
193
+ <option value="7">Jul</option>
194
+ <option value="8">Aug</option>
195
+ <option value="9">Sep</option>
196
+ <option value="10">Oct</option>
197
+ <option value="11">Nov</option>
198
+ <option value="12">Dec</option>
199
+ </select>
200
+ </span>
201
+ <span class="elem_select_year" id="elem_form_start_year">
202
+ <select class="elem_select_year" id="form_start_year" name="form[start][year]">
203
+ <option selected="selected" value="2005">2005</option>
204
+ <option value="2006">2006</option>
205
+ </select>
206
+ </span>
207
+ </div>\n|
208
+ assert_equal expected, form[:start].to_html
209
+ end
210
+
211
+ end
@@ -0,0 +1,56 @@
1
+ require 'test_helper'
2
+
3
+ class TestSelectDatetimeElement < Test::Unit::TestCase
4
+
5
+ def teardown
6
+ ActiveForm::use_american_formatting
7
+ end
8
+
9
+ def test_format
10
+ form = ActiveForm::compose :form do |f|
11
+ f.select_datetime_element :start, :format => [:day, :month, :year, :hour, :minute, :second], :range => (2000..2005)
12
+ end
13
+ assert_equal [:day, :month, :year, :hour, :minute, :second], form[:start].collect(&:name)
14
+ end
15
+
16
+ def test_european_formatting
17
+ ActiveForm::use_european_formatting
18
+ elem = ActiveForm::Element::SelectDatetime.new :date
19
+ assert_equal [:day, :month, :year, :hour, :minute], elem.collect(&:name)
20
+ end
21
+
22
+ def test_american_formatting
23
+ ActiveForm::use_american_formatting
24
+ elem = ActiveForm::Element::SelectDatetime.new :date
25
+ assert_equal [:month, :day, :year, :hour, :minute], elem.collect(&:name)
26
+ end
27
+
28
+ def test_append_any_unknown_parts_as_element
29
+ form = ActiveForm::compose :form do |f|
30
+ f.select_datetime_element :start, :format => ['date: ', :day, :month, :year, '&nbsp;time: ', :hour, :minute, :second], :range => (2000..2005)
31
+ end
32
+ assert_equal [:builder, :day, :month, :year, :builder, :hour, :minute, :second], form[:start].collect(&:name)
33
+ end
34
+
35
+ def test_export_value_as_casted
36
+ elem = ActiveForm::Element::SelectDatetime.new :time, :now => Time.local(2007, 8, 14, 13, 52, 5), :range => (2000..2010), :type_cast => :hash
37
+ expected = {"month"=>8, "second"=>0, "minute"=>52, "hour"=>13, "day"=>14, "year"=>2007}
38
+ assert_equal expected, elem.export_value
39
+
40
+ elem = ActiveForm::Element::SelectDatetime.new :time, :now => Time.local(2007, 8, 14, 13, 52, 5), :range => (2000..2010), :type_cast => :array
41
+ assert_equal [2007, 8, 14, 13, 52, 0], elem.export_value
42
+
43
+ elem = ActiveForm::Element::SelectDatetime.new :time, :now => Time.local(2007, 8, 14, 13, 52, 5), :range => (2000..2010), :type_cast => :string
44
+ assert_equal "2007-08-14 13:52:00", elem.export_value
45
+
46
+ elem = ActiveForm::Element::SelectDatetime.new :time, :now => Time.local(2007, 8, 14, 13, 52, 5), :range => (2000..2010), :type_cast => :date
47
+ assert_equal Time.local(2007, 8, 14, 13, 52, 0).to_date, elem.export_value
48
+
49
+ elem = ActiveForm::Element::SelectDatetime.new :time, :now => Time.local(2007, 8, 14, 13, 52, 5), :range => (2000..2010), :type_cast => :time
50
+ assert_equal Time.local(2007, 8, 14, 13, 52, 0), elem.export_value
51
+
52
+ elem = ActiveForm::Element::SelectDatetime.new :time, :now => Time.local(2007, 8, 14, 13, 52, 5), :range => (2000..2010), :type_cast => :yaml
53
+ assert_equal "--- 2007-08-14 13:52:00 +02:00\n", elem.export_value
54
+ end
55
+
56
+ end
@@ -0,0 +1,37 @@
1
+ require 'test_helper'
2
+
3
+ class TestSelectDayElement < Test::Unit::TestCase
4
+
5
+ def test_element_to_html
6
+ elem = ActiveForm::Element::SelectDay.new :day
7
+ assert_equal [*(1..31)], elem.collect(&:value)
8
+ assert_equal [*('01'..'31')], elem.collect(&:label)
9
+
10
+ elem = ActiveForm::Element::SelectDay.new :day, :increment => 7
11
+ assert_equal [1, 8, 15, 22, 29], elem.collect(&:value)
12
+ assert_equal ["01", "08", "15", "22", "29"], elem.collect(&:label)
13
+ end
14
+
15
+ def test_assign_value
16
+ elem = ActiveForm::Element::SelectDay.new :day, :value => 22
17
+ assert_equal 22, elem.value
18
+ elem = ActiveForm::Element::SelectDay.new :day, :value => Date.new(2004, 9, 22)
19
+ assert_equal 22, elem.value
20
+ elem = ActiveForm::Element::SelectDay.new :day, :value => Time.local(2004, 9, 22, 13, 15, 5)
21
+ assert_equal 22, elem.value
22
+ end
23
+
24
+ def test_out_of_range_value
25
+ elem = ActiveForm::Element::SelectDay.new :day, :value => -5
26
+ assert_equal 1, elem.value
27
+ elem = ActiveForm::Element::SelectDay.new :day, :value => 34
28
+ assert_equal 31, elem.value
29
+ end
30
+
31
+ def test_select_multiple
32
+ elem = ActiveForm::Element::SelectDay.new :day, :multiple => true
33
+ elem.values = [2, 3, 4]
34
+ assert_equal [2, 3, 4], elem.export_value
35
+ end
36
+
37
+ end
@@ -0,0 +1,86 @@
1
+ require 'test_helper'
2
+
3
+ ActiveForm::Element::Select::create :select_publisher do
4
+
5
+ def options
6
+ Publisher.find(:all, :order => 'id', :limit => 2).map { |item| ActiveForm::Element::CollectionOption.new(item.name, item.id) }
7
+ end
8
+
9
+ end
10
+
11
+ class TestSelectFromModelElement < Test::Unit::TestCase
12
+
13
+ fixtures :publishers
14
+
15
+ def test_options_for_implicit_definition
16
+ elem = ActiveForm::Element::SelectFromModel.new :publisher_id
17
+ assert_equal 'Publisher', elem.model_class
18
+ elem_options = elem.options
19
+ assert_equal "O'Reilly", elem_options[0].label
20
+ assert_equal 2, elem_options[0].value
21
+ assert_equal "The Pragmatic Programmers", elem_options[1].label
22
+ assert_equal 1, elem_options[1].value
23
+ end
24
+
25
+ def test_options_for_explicit_definition
26
+ elem = ActiveForm::Element::SelectFromModel.new :published_by, :model => :publisher
27
+ assert_equal 'Publisher', elem.model_class
28
+ elem_options = elem.options
29
+ assert_equal "O'Reilly", elem_options[0].label
30
+ assert_equal 2, elem_options[0].value
31
+ end
32
+
33
+ def test_options_for_custom_find
34
+ elem = ActiveForm::Element::SelectFromModel.new :publisher_id, :find => { :order => 'id', :limit => 2 }
35
+ assert_equal 'Publisher', elem.model_class
36
+ elem_options = elem.options
37
+ assert_equal "The Pragmatic Programmers", elem_options[0].label
38
+ assert_equal 1, elem_options[0].value
39
+ assert_equal "O'Reilly", elem_options[1].label
40
+ assert_equal 2, elem_options[1].value
41
+ end
42
+
43
+ def test_options_with_to_dropdown
44
+ elem = ActiveForm::Element::SelectFromModel.new :publisher_id, :to_dropdown => true
45
+ elem_options = elem.options
46
+ assert_equal "The Pragmatic Programmers", elem_options[0].label
47
+ assert_equal 1, elem_options[0].value
48
+ assert_equal "O'Reilly", elem_options[1].label
49
+ assert_equal 2, elem_options[1].value
50
+ end
51
+
52
+ def test_options_with_group_attr
53
+ elem = ActiveForm::Element::SelectFromModel.new :publisher_id, :group_attr => 'id'
54
+ elem_options = elem.options
55
+ assert_kind_of ActiveForm::Element::CollectionOptionGroup, elem_options.first
56
+ assert_equal "1", elem_options[0].label
57
+ assert_equal "The Pragmatic Programmers", elem_options[0].options[0].label
58
+ assert_equal 1, elem_options[0].options[0].value
59
+ end
60
+
61
+ def test_syntax_sugar
62
+ form = ActiveForm::compose :book do |f|
63
+ f.select_from_publishers :publisher_id
64
+ end
65
+ elem_options = form[:publisher_id].options
66
+ assert_equal "The Pragmatic Programmers", elem_options[0].label
67
+ assert_equal 1, elem_options[0].value
68
+ assert_equal "O'Reilly", elem_options[1].label
69
+ assert_equal 2, elem_options[1].value
70
+ end
71
+
72
+ def test_to_html
73
+ form = ActiveForm::compose :book do |f|
74
+ f.select_publisher_element :publisher_id
75
+ end
76
+ assert_equal :select_publisher, form[:publisher_id].element_type
77
+ expected = %|<form action="#book" class="active_form" id="book" method="post">
78
+ <select class="elem_select_publisher" id="book_publisher_id" name="book[publisher_id]">
79
+ <option value="1">The Pragmatic Programmers</option>
80
+ <option value="2">O'Reilly</option>
81
+ </select>
82
+ </form>\n|
83
+ assert_equal expected, form.to_html
84
+ end
85
+
86
+ end
@@ -0,0 +1,37 @@
1
+ require 'test_helper'
2
+
3
+ class TestSelectHourElement < Test::Unit::TestCase
4
+
5
+ def test_element_to_html
6
+ elem = ActiveForm::Element::SelectHour.new :hour
7
+ assert_equal [*(0..23)], elem.collect(&:value)
8
+ assert_equal [*('00'..'23')], elem.collect(&:label)
9
+
10
+ elem = ActiveForm::Element::SelectHour.new :hour, :increment => 12
11
+ assert_equal [0, 12], elem.collect(&:value)
12
+ assert_equal ["00", "12"], elem.collect(&:label)
13
+ end
14
+
15
+ def test_assign_value
16
+ elem = ActiveForm::Element::SelectHour.new :hour, :value => 22
17
+ assert_equal 22, elem.value
18
+ elem = ActiveForm::Element::SelectHour.new :hour, :value => Date.new(2004, 1, 1)
19
+ assert_equal 0, elem.value
20
+ elem = ActiveForm::Element::SelectHour.new :hour, :value => Time.local(2004, 1, 1, 13, 15, 5)
21
+ assert_equal 13, elem.value
22
+ end
23
+
24
+ def test_out_of_range_value
25
+ elem = ActiveForm::Element::SelectHour.new :hour, :value => -5
26
+ assert_equal 0, elem.value
27
+ elem = ActiveForm::Element::SelectHour.new :hour, :value => 28
28
+ assert_equal 23, elem.value
29
+ end
30
+
31
+ def test_select_multiple
32
+ elem = ActiveForm::Element::SelectHour.new :hour, :multiple => true
33
+ elem.values = [20, 21, 22]
34
+ assert_equal [20, 21, 22], elem.export_value
35
+ end
36
+
37
+ end
@@ -0,0 +1,52 @@
1
+ require 'test_helper'
2
+
3
+ class TestSelectMinuteElement < Test::Unit::TestCase
4
+
5
+ def test_element_to_html
6
+ elem = ActiveForm::Element::SelectMinute.new :minute
7
+ assert_equal [*(0..59)], elem.collect(&:value)
8
+ assert_equal [*('00'..'59')], elem.collect(&:label)
9
+
10
+ elem = ActiveForm::Element::SelectMinute.new :minute, :increment => 5
11
+ assert_equal [0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55], elem.collect(&:value)
12
+ assert_equal ["00", "05", "10", "15", "20", "25", "30", "35", "40", "45", "50", "55"], elem.collect(&:label)
13
+
14
+ elem = ActiveForm::Element::SelectMinute.new :minute, :increment => 10
15
+ assert_equal [0, 10, 20, 30, 40, 50], elem.collect(&:value)
16
+ assert_equal ["00", "10", "20", "30", "40", "50"], elem.collect(&:label)
17
+ end
18
+
19
+ def test_assign_value
20
+ elem = ActiveForm::Element::SelectMinute.new :minute, :value => 22
21
+ assert_equal 22, elem.value
22
+ elem = ActiveForm::Element::SelectMinute.new :minute, :value => Date.new(2004, 1, 1)
23
+ assert_equal 0, elem.value
24
+ elem = ActiveForm::Element::SelectMinute.new :minute, :value => Time.local(2004, 1, 1, 13, 15, 5)
25
+ assert_equal 15, elem.value
26
+ end
27
+
28
+ def test_out_of_range_value
29
+ elem = ActiveForm::Element::SelectMinute.new :minute, :value => -5
30
+ assert_equal 0, elem.value
31
+ elem = ActiveForm::Element::SelectMinute.new :minute, :value => 80
32
+ assert_equal 59, elem.value
33
+ elem = ActiveForm::Element::SelectMinute.new :minute, :value => 80, :increment => 5
34
+ assert_equal 55, elem.value
35
+ elem = ActiveForm::Element::SelectMinute.new :minute, :value => 80, :increment => 15
36
+ assert_equal 45, elem.value
37
+ end
38
+
39
+ def test_push_value_towards_increment_value
40
+ elem = ActiveForm::Element::SelectMinute.new :minute, :increment => 5, :value => 22
41
+ assert_equal 20, elem.value
42
+ elem = ActiveForm::Element::SelectMinute.new :minute, :increment => 10, :value => 26
43
+ assert_equal 30, elem.value
44
+ end
45
+
46
+ def test_select_multiple
47
+ elem = ActiveForm::Element::SelectMinute.new :minute, :multiple => true, :increment => 15
48
+ elem.values = [12, 35, 46]
49
+ assert_equal [15, 30, 45], elem.export_value
50
+ end
51
+
52
+ end