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,79 @@
1
+ require 'test_helper'
2
+
3
+ class TestSelectMonthElement < Test::Unit::TestCase
4
+
5
+ def test_element_to_html
6
+ elem = ActiveForm::Element::SelectMonth.new :month
7
+ assert_equal [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12], elem.collect(&:value)
8
+ expected = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]
9
+ assert_equal expected, elem.collect(&:label)
10
+
11
+ elem = ActiveForm::Element::SelectMonth.new :month, :use_month_numbers => true
12
+ assert_equal [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12], elem.collect(&:value)
13
+ expected = ["01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12"]
14
+ assert_equal expected, elem.collect(&:label)
15
+
16
+ elem = ActiveForm::Element::SelectMonth.new :month, :use_short_month => true
17
+ assert_equal [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12], elem.collect(&:value)
18
+ expected = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]
19
+ assert_equal expected, elem.collect(&:label)
20
+
21
+ elem = ActiveForm::Element::SelectMonth.new :month, :use_short_month => true, :add_month_numbers => true
22
+ assert_equal [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12], elem.collect(&:value)
23
+ expected = ["01 - Jan", "02 - Feb", "03 - Mar", "04 - Apr", "05 - May", "06 - Jun", "07 - Jul", "08 - Aug", "09 - Sep", "10 - Oct", "11 - Nov", "12 - Dec"]
24
+ assert_equal expected, elem.collect(&:label)
25
+
26
+ elem = ActiveForm::Element::SelectMonth.new :month, :increment => 3
27
+ assert_equal [1, 4, 7, 10], elem.collect(&:value)
28
+ assert_equal ["January", "April", "July", "October"], elem.collect(&:label)
29
+ end
30
+
31
+ def test_subset
32
+ elem = ActiveForm::Element::SelectMonth.new :month, :subset => [1, 2, 3, 10, 11, 12]
33
+ assert_equal [1, 2, 3, 10, 11, 12], elem.collect(&:value)
34
+ assert_equal ["January", "February", "March", "October", "November", "December"], elem.collect(&:label)
35
+ end
36
+
37
+ def test_assign_value
38
+ elem = ActiveForm::Element::SelectMonth.new :month, :value => 9
39
+ assert_equal 9, elem.value
40
+ elem = ActiveForm::Element::SelectMonth.new :month, :value => Date.new(2004, 9, 22)
41
+ assert_equal 9, elem.value
42
+ elem = ActiveForm::Element::SelectMonth.new :month, :value => Time.local(2004, 9, 22, 13, 15, 5)
43
+ assert_equal 9, elem.value
44
+ end
45
+
46
+ def test_push_value_towards_increment_value
47
+ elem = ActiveForm::Element::SelectMonth.new :month, :increment => 3, :value => 6
48
+ assert_equal [1, 4, 7, 10], elem.collect(&:value)
49
+ assert_equal 7, elem.value
50
+ end
51
+
52
+ def test_out_of_range_value
53
+ elem = ActiveForm::Element::SelectMonth.new :month, :value => -5
54
+ assert_equal 1, elem.value
55
+ elem = ActiveForm::Element::SelectMonth.new :month, :value => 28
56
+ assert_equal 12, elem.value
57
+ end
58
+
59
+ def test_assign_value_and_return_as_string
60
+ elem = ActiveForm::Element::SelectMonth.new :month, :value => 3
61
+ assert_equal "March", elem.to_monthname
62
+ elem = ActiveForm::Element::SelectMonth.new :month, :value => 9, :type_cast => :string
63
+ assert_equal "September", elem.to_monthname
64
+ assert_equal "September", elem.export_value
65
+ elem = ActiveForm::Element::SelectMonth.new :month, :value => Date.new(2006, 9, 11), :type_cast => :string, :use_short_month => true
66
+ assert_equal "Sep", elem.to_monthname
67
+ assert_equal "Sep", elem.export_value
68
+ end
69
+
70
+ def test_select_multiple
71
+ elem = ActiveForm::Element::SelectMonth.new :month, :multiple => true
72
+ elem.values = [1, 3, 5]
73
+ assert_equal [1, 3, 5], elem.export_value
74
+ elem = ActiveForm::Element::SelectMonth.new :month, :multiple => true, :type_cast => :string
75
+ elem.values = [1, 3, 5]
76
+ assert_equal ["January", "March", "May"], elem.export_value
77
+ end
78
+
79
+ end
@@ -0,0 +1,14 @@
1
+ require 'test_helper'
2
+
3
+ class TestSelectNumericRangeElement < Test::Unit::TestCase
4
+
5
+ def test_select_multiple
6
+ elem = ActiveForm::Element::SelectNumericRange.new :numbers, :range => (0..10), :increment => 2, :multiple => true
7
+ assert_equal [0, 2, 4, 6, 8, 10], elem.collect(&:value)
8
+ elem.values = [4, 6]
9
+ assert_equal [4, 6], elem.export_value
10
+ elem.values = [1, 7]
11
+ assert_equal [2, 8], elem.export_value
12
+ end
13
+
14
+ end
@@ -0,0 +1,48 @@
1
+ require 'test_helper'
2
+
3
+ class TestSelectSecondElement < Test::Unit::TestCase
4
+
5
+ def test_element_to_html
6
+ elem = ActiveForm::Element::SelectSecond.new :seconds
7
+ assert_equal [*(0..59)], elem.collect(&:value)
8
+ assert_equal [*('00'..'59')], elem.collect(&:label)
9
+
10
+ elem = ActiveForm::Element::SelectSecond.new :seconds, :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::SelectSecond.new :seconds, :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::SelectSecond.new :seconds, :value => 22
21
+ assert_equal 22, elem.value
22
+ elem = ActiveForm::Element::SelectSecond.new :seconds, :value => Date.new(2004, 1, 1)
23
+ assert_equal 0, elem.value
24
+ elem = ActiveForm::Element::SelectSecond.new :seconds, :value => Time.local(2004, 1, 1, 13, 15, 5)
25
+ assert_equal 5, elem.value
26
+ end
27
+
28
+ def test_out_of_range_value
29
+ elem = ActiveForm::Element::SelectSecond.new :seconds, :value => -5
30
+ assert_equal 0, elem.value
31
+ elem = ActiveForm::Element::SelectSecond.new :seconds, :value => 80
32
+ assert_equal 59, elem.value
33
+ end
34
+
35
+ def test_push_value_towards_increment_value
36
+ elem = ActiveForm::Element::SelectSecond.new :seconds, :increment => 5, :value => 22
37
+ assert_equal 20, elem.value
38
+ elem = ActiveForm::Element::SelectSecond.new :seconds, :increment => 10, :value => 26
39
+ assert_equal 30, elem.value
40
+ end
41
+
42
+ def test_select_multiple
43
+ elem = ActiveForm::Element::SelectSecond.new :seconds, :multiple => true, :increment => 30
44
+ elem.values = [12, 35, 46]
45
+ assert_equal [0, 30], elem.export_value
46
+ end
47
+
48
+ end
@@ -0,0 +1,148 @@
1
+ require 'test_helper'
2
+
3
+ class TestSelectTimeElement < Test::Unit::TestCase
4
+
5
+ def test_format
6
+ form = ActiveForm::compose :form do |f|
7
+ f.select_time_element :start, :format => [:hour, :minute, :second], :minute_increment => 5
8
+ end
9
+ assert_equal [:hour, :minute, :second], form[:start].collect(&:name)
10
+ form[:start].value = '13:52:05'
11
+
12
+ expected = { "hour" => 13, "minute" => 50, "second" => 5 }
13
+ assert_equal expected, form[:start].export_value
14
+
15
+ form[:start].value = '13:52'
16
+ expected = { "hour" => 13, "minute" => 50, "second" => 0 }
17
+ assert_equal expected, form[:start].export_value
18
+ end
19
+
20
+ def test_assign_value_and_export_value
21
+ form = ActiveForm::compose :form do |f|
22
+ f.select_time_element :start, :minute_increment => 5
23
+ end
24
+ assert_equal [:hour, :minute], form[:start].collect(&:name)
25
+ expected = { "hour" => 13, "minute" => 50 }
26
+
27
+ form[:start].value = { :hour => 13, :minute => 52 }
28
+ assert_equal expected, form[:start].export_value
29
+
30
+ form[:start].value = Time.local(2004, 1, 1, 13, 52, 5)
31
+ assert_equal expected, form[:start].export_value
32
+
33
+ form[:start].value = '2004-01-01 13:52:05'
34
+ assert_equal expected, form[:start].export_value
35
+
36
+ form[:start].value = '13:52:05'
37
+ assert_equal expected, form[:start].export_value
38
+
39
+ form[:start].value = '13:52'
40
+ assert_equal expected, form[:start].export_value
41
+ end
42
+
43
+ def test_default_value
44
+ elem = ActiveForm::Element::SelectTime.new :time, :format => [:hour, :minute, :second]
45
+ expected = {"hour"=>12, "minute"=>0, "second"=>0}
46
+ assert_equal expected, elem.export_value
47
+
48
+ elem = ActiveForm::Element::SelectTime.new :time, :format => [:hour, :minute, :second], :now => Time.local(2004, 1, 1, 13, 52, 5)
49
+ expected = {"hour"=>13, "minute"=>52, "second"=>5}
50
+ assert_equal expected, elem.value
51
+ assert_equal expected, elem.export_value
52
+ end
53
+
54
+ def test_export_value_as_casted
55
+ elem = ActiveForm::Element::SelectTime.new :time, :now => Time.local(2007, 8, 14, 13, 52, 5), :range => (2000..2010), :type_cast => :hash
56
+ expected = {"month"=>8, "second"=>0, "minute"=>52, "hour"=>13, "day"=>14, "year"=>2007}
57
+ assert_equal expected, elem.export_value
58
+
59
+ elem = ActiveForm::Element::SelectTime.new :time, :now => Time.local(2007, 8, 14, 13, 52, 5), :range => (2000..2010), :type_cast => :array
60
+ assert_equal [2007, 8, 14, 13, 52, 0], elem.export_value
61
+
62
+ elem = ActiveForm::Element::SelectTime.new :time, :now => Time.local(2007, 8, 14, 13, 52, 5), :range => (2000..2010), :type_cast => :string
63
+ assert_equal "2007-08-14 13:52:00", elem.export_value
64
+
65
+ elem = ActiveForm::Element::SelectTime.new :time, :now => Time.local(2007, 8, 14, 13, 52, 5), :range => (2000..2010), :type_cast => :date
66
+ assert_equal Time.local(2007, 8, 14, 13, 52, 0).to_date, elem.export_value
67
+
68
+ elem = ActiveForm::Element::SelectTime.new :time, :now => Time.local(2007, 8, 14, 13, 52, 5), :range => (2000..2010), :type_cast => :time
69
+ assert_equal Time.local(2007, 8, 14, 13, 52, 0), elem.export_value
70
+ end
71
+
72
+ def test_update_from_params
73
+ form = ActiveForm::compose :form do |f|
74
+ f.select_time_element :start, :minute_increment => 5
75
+ end
76
+ form.update_from_params({ 'form' => { 'start' => { 'hour' => '9', 'minute' => '22' } } })
77
+ expected = { 'hour' => 9, 'minute' => 20 }
78
+ assert_equal expected, form[:start].export_value
79
+ form.update_from_params({ 'form' => { 'start' => '2004-01-01 13:52:05' } })
80
+ expected = { 'hour' => 13, 'minute' => 50 }
81
+ assert_equal expected, form[:start].export_value
82
+ form.update_from_params({ 'form' => { 'start' => '13:52:05' } })
83
+ expected = { 'hour' => 13, 'minute' => 50 }
84
+ assert_equal expected, form[:start].export_value
85
+ end
86
+
87
+ def test_assign_with_now
88
+ form = ActiveForm::compose :form do |f|
89
+ f.select_time_element :start, :format => [:hour, :minute], :minute_increment => 5, :now => Time.local(2004, 1, 1, 13, 52, 5)
90
+ end
91
+ form[:start].value = { :hour => 10, :minute => 22 }
92
+ expected = {"minute"=>20, "hour"=>10}
93
+ assert_equal expected, form[:start].export_value
94
+
95
+ form = ActiveForm::compose :form do |f|
96
+ f.select_time_element :start, :format => [:hour, :minute, :second], :second_increment => 10, :now => Time.local(2004, 1, 1, 13, 52, 5)
97
+ end
98
+ form[:start].value = { :hour => 10, :minute => 22, :second => 28 }
99
+ expected = {"second"=>30, "minute"=>22, "hour"=>10}
100
+ assert_equal expected, form[:start].export_value
101
+ form[:start].value = Time.local(2004, 1, 1, 13, 52, 5)
102
+ expected = {"second"=>10, "minute"=>52, "hour"=>13}
103
+ assert_equal expected, form[:start].export_value
104
+ end
105
+
106
+ def test_include_empty
107
+ form = ActiveForm::compose :form do |f|
108
+ f.select_time_element :start, :format => [:hour, :minute, :second]
109
+ end
110
+ assert_equal [false], form[:start].collect(&:include_empty?).uniq
111
+ form[:start].include_empty = true
112
+ assert_equal [true], form[:start].collect(&:include_empty?).uniq
113
+ end
114
+
115
+ def test_element_to_html
116
+ form = ActiveForm::compose :form do |f|
117
+ f.select_time_element :start, :format => [:hour, :minute, :second], :hour_increment => 4, :minute_increment => 20, :second_increment => 20
118
+ end
119
+ expected = %|<div class="active_select_time" id="form_start">
120
+ <span class="elem_select_hour" id="elem_form_start_hour">
121
+ <select class="elem_select_hour" id="form_start_hour" name="form[start][hour]">
122
+ <option value="0">00</option>
123
+ <option value="4">04</option>
124
+ <option value="8">08</option>
125
+ <option selected="selected" value="12">12</option>
126
+ <option value="16">16</option>
127
+ <option value="20">20</option>
128
+ </select>
129
+ </span>
130
+ <span class="elem_select_minute" id="elem_form_start_minute">
131
+ <select class="elem_select_minute" id="form_start_minute" name="form[start][minute]">
132
+ <option selected="selected" value="0">00</option>
133
+ <option value="20">20</option>
134
+ <option value="40">40</option>
135
+ </select>
136
+ </span>
137
+ <span class="elem_select_second" id="elem_form_start_second">
138
+ <select class="elem_select_second" id="form_start_second" name="form[start][second]">
139
+ <option selected="selected" value="0">00</option>
140
+ <option value="20">20</option>
141
+ <option value="40">40</option>
142
+ </select>
143
+ </span>
144
+ </div>\n|
145
+ assert_equal expected, form[:start].to_html
146
+ end
147
+
148
+ end
@@ -0,0 +1,71 @@
1
+ require 'test_helper'
2
+
3
+ class TestSelectWeekdayElement < Test::Unit::TestCase
4
+
5
+ def test_element_to_html
6
+ elem = ActiveForm::Element::SelectWeekday.new :day
7
+ assert_equal [*(0..6)], elem.collect(&:value)
8
+ assert_equal ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"], elem.collect(&:label)
9
+
10
+ elem = ActiveForm::Element::SelectWeekday.new :day, :use_short_day => true
11
+ assert_equal [*(0..6)], elem.collect(&:value)
12
+ assert_equal ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"], elem.collect(&:label)
13
+ end
14
+
15
+ def test_only_weekdays
16
+ elem = ActiveForm::Element::SelectWeekday.new :day, :weekdays_only => true
17
+ assert_equal [*(1..5)], elem.collect(&:value)
18
+ assert_equal ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"], elem.collect(&:label)
19
+ end
20
+
21
+ def test_only_weekends
22
+ elem = ActiveForm::Element::SelectWeekday.new :day, :weekend_only => true
23
+ assert_equal [6, 0], elem.collect(&:value)
24
+ assert_equal ["Saturday", "Sunday"], elem.collect(&:label)
25
+ end
26
+
27
+ def test_subset
28
+ elem = ActiveForm::Element::SelectWeekday.new :day, :subset => [1, 2, 3]
29
+ assert_equal [1, 2, 3], elem.collect(&:value)
30
+ assert_equal ["Monday", "Tuesday", "Wednesday"], elem.collect(&:label)
31
+ end
32
+
33
+ def test_out_of_range_value
34
+ elem = ActiveForm::Element::SelectWeekday.new :day, :value => -5
35
+ assert_equal 0, elem.value
36
+ elem = ActiveForm::Element::SelectWeekday.new :day, :value => 9
37
+ assert_equal 6, elem.value
38
+ end
39
+
40
+ def test_assign_value
41
+ elem = ActiveForm::Element::SelectWeekday.new :day, :value => 1
42
+ assert_equal 1, elem.value
43
+ elem = ActiveForm::Element::SelectWeekday.new :day, :value => Date.new(2006, 9, 11)
44
+ assert_equal 1, elem.value
45
+ elem = ActiveForm::Element::SelectWeekday.new :day, :value => Date.new(2006, 9, 12)
46
+ assert_equal 2, elem.value
47
+ elem = ActiveForm::Element::SelectWeekday.new :day, :value => Time.local(2006, 9, 11, 13, 15, 5)
48
+ assert_equal 1, elem.value
49
+ end
50
+
51
+ def test_assign_value_and_return_as_string
52
+ elem = ActiveForm::Element::SelectWeekday.new :day, :value => 3
53
+ assert_equal "Wednesday", elem.to_dayname
54
+ elem = ActiveForm::Element::SelectWeekday.new :day, :value => 3, :type_cast => :string
55
+ assert_equal "Wednesday", elem.to_dayname
56
+ assert_equal "Wednesday", elem.export_value
57
+ elem = ActiveForm::Element::SelectWeekday.new :day, :value => Date.new(2006, 9, 11), :type_cast => :string
58
+ assert_equal "Monday", elem.to_dayname
59
+ assert_equal "Monday", elem.export_value
60
+ end
61
+
62
+ def test_select_multiple
63
+ elem = ActiveForm::Element::SelectWeekday.new :day, :multiple => true
64
+ elem.values = [0, 3, 5]
65
+ assert_equal [0, 3, 5], elem.export_value
66
+ elem = ActiveForm::Element::SelectWeekday.new :day, :multiple => true, :type_cast => :string
67
+ elem.values = [0, 3, 5]
68
+ assert_equal ["Sunday", "Wednesday", "Friday"], elem.export_value
69
+ end
70
+
71
+ end
@@ -0,0 +1,73 @@
1
+ require 'test_helper'
2
+
3
+ class TestSelectYearElement < Test::Unit::TestCase
4
+
5
+ def test_element_to_html
6
+ elem = ActiveForm::Element::SelectYear.new :year
7
+ default_range = Range.new(Time.now.year - 5, Time.now.year + 5)
8
+ assert_equal [*default_range], elem.collect(&:value)
9
+ assert_equal default_range.map(&:to_s), elem.collect(&:label)
10
+
11
+ elem = ActiveForm::Element::SelectYear.new :year, :range => (2000..2010)
12
+ default_range = Range.new(2000, 2010)
13
+ assert_equal [*default_range], elem.collect(&:value)
14
+ assert_equal default_range.map(&:to_s), elem.collect(&:label)
15
+
16
+ elem = ActiveForm::Element::SelectYear.new :year, :range => (2000..2010), :increment => 5
17
+ assert_equal [2000, 2005, 2010], elem.collect(&:value)
18
+ assert_equal ['2000', '2005', '2010'], elem.collect(&:label)
19
+ end
20
+
21
+ def test_define_start_and_end_year
22
+ elem = ActiveForm::Element::SelectYear.new :year, :start_year => 2000, :end_year => 2006
23
+ range = Range.new(2000, 2006)
24
+ assert_equal [*range], elem.collect(&:value)
25
+ assert_equal range.map(&:to_s), elem.collect(&:label)
26
+ end
27
+
28
+ def test_include_empty
29
+ elem = ActiveForm::Element::SelectYear.new :year, :range => (2000..2010)
30
+ assert_equal 2000, elem.options.first.value
31
+ elem = ActiveForm::Element::SelectYear.new :year, :range => (2000..2010), :include_empty => true
32
+ assert_equal :blank, elem.options.first.value
33
+ end
34
+
35
+ def test_assign_value
36
+ elem = ActiveForm::Element::SelectYear.new :year, :value => 2006
37
+ assert_equal 2006, elem.value
38
+ elem = ActiveForm::Element::SelectYear.new :year, :value => Date.new(2004, 9, 22)
39
+ assert_equal 2004, elem.value
40
+ elem = ActiveForm::Element::SelectYear.new :year, :value => Time.local(2004, 9, 22, 13, 15, 5)
41
+ assert_equal 2004, elem.value
42
+ end
43
+
44
+ def test_update_from_params
45
+ form = ActiveForm::compose :form do |f|
46
+ f.select_year_element :anno, :range => (2000..2010)
47
+ end
48
+ form.params = { 'form' => { 'anno' => '1996' } }
49
+ assert_equal 2000, form[:anno].value
50
+ form.params = { 'form' => { 'anno' => '2006' } }
51
+ assert_equal 2006, form[:anno].value
52
+ form.params = { 'form' => { 'anno' => '2012' } }
53
+ assert_equal 2010, form[:anno].value
54
+ end
55
+
56
+ def test_out_of_range_value
57
+ elem = ActiveForm::Element::SelectYear.new :year, :value => 2
58
+ assert_equal Time.now.year - 5, elem.value
59
+ elem = ActiveForm::Element::SelectYear.new :year, :value => 3000
60
+ assert_equal Time.now.year + 5, elem.value
61
+ elem = ActiveForm::Element::SelectYear.new :year, :value => 1996, :range => (2000..2005)
62
+ assert_equal 2000, elem.value
63
+ elem = ActiveForm::Element::SelectYear.new :year, :value => 2006, :range => (2000..2005)
64
+ assert_equal 2005, elem.value
65
+ end
66
+
67
+ def test_select_multiple
68
+ elem = ActiveForm::Element::SelectYear.new :year, :multiple => true, :range => (2000..2005)
69
+ elem.values = [1996, 2002, 2006]
70
+ assert_equal [2000, 2002, 2005], elem.export_value
71
+ end
72
+
73
+ end
@@ -0,0 +1,11 @@
1
+ class Author < ActiveRecord::Base
2
+
3
+ has_and_belongs_to_many :books
4
+
5
+ acts_as_dropdown
6
+
7
+ def name
8
+ "#{first_name} #{last_name}"
9
+ end
10
+
11
+ end