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,26 @@
1
+ require 'test_helper'
2
+
3
+ class TestValidatesAsAlpha < Test::Unit::TestCase
4
+
5
+ def test_validator_defaults
6
+ elem = ActiveForm::Element::build(:text, :mystring) do |e|
7
+ e.validates_as_alpha
8
+ end
9
+ assert elem.validate
10
+ elem.value = 123
11
+ assert !elem.validate
12
+ assert_equal ["Mystring: should contain alphabetical characters only"], elem.errors.collect(&:message)
13
+ assert_equal ["Mystring: should contain alphabetical characters only"], elem.gather_validation_advice.collect(&:message)
14
+ end
15
+
16
+ def test_validator_check
17
+ elem = ActiveForm::Element::build(:text, :mystring) do |e|
18
+ e.validates_as_alpha
19
+ end
20
+ invalid = [123, '%a$', '_', 'Foo Bar']
21
+ valid = [nil, '', ' ','abc', 'AbC']
22
+ invalid.each { |value| elem.value = value; assert !elem.validate }
23
+ valid.each { |value| elem.value = value; assert elem.validate }
24
+ end
25
+
26
+ end
@@ -0,0 +1,26 @@
1
+ require 'test_helper'
2
+
3
+ class TestValidatesAsAlphanum < Test::Unit::TestCase
4
+
5
+ def test_validator_defaults
6
+ elem = ActiveForm::Element::build(:text, :mystring) do |e|
7
+ e.validates_as_alphanum
8
+ end
9
+ assert elem.validate
10
+ elem.value = 'Foo Bar'
11
+ assert !elem.validate
12
+ assert_equal ["Mystring: should contain alphabetical characters or numbers only"], elem.errors.collect(&:message)
13
+ assert_equal ["Mystring: should contain alphabetical characters or numbers only"], elem.gather_validation_advice.collect(&:message)
14
+ end
15
+
16
+ def test_validator_check
17
+ elem = ActiveForm::Element::build(:text, :mystring) do |e|
18
+ e.validates_as_alphanum
19
+ end
20
+ invalid = ['%a$', '_', 'Foo Bar']
21
+ valid = [nil, '', ' ', 123, 'abc', 'AbC', 'abc1234']
22
+ invalid.each { |value| elem.value = value; assert !elem.validate }
23
+ valid.each { |value| elem.value = value; assert elem.validate }
24
+ end
25
+
26
+ end
@@ -0,0 +1,26 @@
1
+ require 'test_helper'
2
+
3
+ class TestValidatesAsDigits < Test::Unit::TestCase
4
+
5
+ def test_validator_defaults
6
+ elem = ActiveForm::Element::build(:text, :mystring) do |e|
7
+ e.validates_as_digits
8
+ end
9
+ assert elem.validate
10
+ elem.value = 'abc123'
11
+ assert !elem.validate
12
+ assert_equal ["Mystring: should contain digits (0-9) only"], elem.errors.collect(&:message)
13
+ assert_equal ["Mystring: should contain digits (0-9) only"], elem.gather_validation_advice.collect(&:message)
14
+ end
15
+
16
+ def test_validator_check
17
+ elem = ActiveForm::Element::build(:text, :mystring) do |e|
18
+ e.validates_as_digits
19
+ end
20
+ invalid = ['123a', '%a$', '_', 'Foo Bar']
21
+ valid = [nil, '', ' ', 123, '45']
22
+ invalid.each { |value| elem.value = value; assert !elem.validate }
23
+ valid.each { |value| elem.value = value; assert elem.validate }
24
+ end
25
+
26
+ end
@@ -0,0 +1,29 @@
1
+ require 'test_helper'
2
+
3
+ class TestValidatesAsEmail < Test::Unit::TestCase
4
+
5
+ def test_validator_defaults
6
+ elem = ActiveForm::Element::build(:text, :mystring) { |e| e.validates_as_email }
7
+ assert elem.validate
8
+ elem.value = 'abc'
9
+ assert !elem.validate
10
+ assert_equal ["Mystring: is not a valid email address"], elem.errors.collect(&:message)
11
+ assert_equal ["Mystring: is not a valid email address"], elem.gather_validation_advice.collect(&:message)
12
+ end
13
+
14
+ def test_validator_check
15
+ elem = ActiveForm::Element::build(:text, :mystring) { |e| e.validates_as_email }
16
+ invalid = ['123a', '%a$', '_', 'Foo Bar']
17
+ valid = [nil, '', ' ', 'info@loobmedia.com', 'info@looboommediaz.com']
18
+ invalid.each { |value| elem.value = value; assert !elem.validate }
19
+ valid.each { |value| elem.value = value; assert elem.validate }
20
+ end
21
+
22
+ def test_validate_with_resolve
23
+ # this is hard to test with some ISP's
24
+ elem = ActiveForm::Element::build(:text, :mystring) { |e| e.validates_as_email :resolve => true }
25
+ elem.value = 'info@loobmedia.com'
26
+ assert elem.validate
27
+ end
28
+
29
+ end
@@ -0,0 +1,26 @@
1
+ require 'test_helper'
2
+
3
+ class TestValidatesAsNumber < Test::Unit::TestCase
4
+
5
+ def test_validator_defaults
6
+ elem = ActiveForm::Element::build(:text, :mystring) do |e|
7
+ e.validates_as_number
8
+ end
9
+ assert elem.validate
10
+ elem.value = 'abc'
11
+ assert !elem.validate
12
+ assert_equal ["Mystring: should be numeric"], elem.errors.collect(&:message)
13
+ assert_equal ["Mystring: should be numeric"], elem.gather_validation_advice.collect(&:message)
14
+ end
15
+
16
+ def test_validator_check
17
+ elem = ActiveForm::Element::build(:text, :mystring) do |e|
18
+ e.validates_as_number
19
+ end
20
+ invalid = ['123a', '%a$', '_', 'Foo Bar']
21
+ valid = [nil, '', ' ', 123, '45', '123,45', '1.5', 1.25]
22
+ invalid.each { |value| elem.value = value; assert !elem.validate }
23
+ valid.each { |value| elem.value = value; assert elem.validate }
24
+ end
25
+
26
+ end
@@ -0,0 +1,128 @@
1
+ require 'test_helper'
2
+
3
+ class TestValidatesAsUri < Test::Unit::TestCase
4
+
5
+ def test_validator_defaults
6
+ elem = ActiveForm::Element::build(:text, :mystring) do |e|
7
+ e.validates_as_uri
8
+ end
9
+ assert elem.validate
10
+ elem.value = 'http://www.loobmedia.com/placeholder/background.gif'
11
+ assert elem.validate
12
+
13
+ elem.value = 'loobmedia.com'
14
+ assert !elem.validate
15
+ assert_equal ["Mystring: is not a valid location"], elem.errors.collect(&:message)
16
+ assert_equal ["Mystring: is not a valid location"], elem.gather_validation_advice.collect(&:message)
17
+ end
18
+
19
+ def test_validator_options
20
+ elem = ActiveForm::Element::build(:text, :mystring) do |e|
21
+ e.validates_as_uri :schemes => 'http', :hosts => [/^(www\.)?loob/], :content_types => 'text/'
22
+ end
23
+ assert_equal ['http'], elem.validators.first.uri_validator.schemes
24
+ assert_equal [/^(www\.)?loob/], elem.validators.first.uri_validator.hosts
25
+ assert_equal ['text/'], elem.validators.first.uri_validator.content_types
26
+
27
+ elem.value = 'http://loobmedia.com'
28
+ assert elem.validate
29
+ elem.value = 'http://www.loobmedia.com'
30
+ assert elem.validate
31
+ elem.value = 'http://www.loob.be'
32
+ assert elem.validate
33
+
34
+ elem.value = 'http://www.loobmedia.com/placeholder/background.gif'
35
+ assert !elem.validate
36
+ assert_equal ["Mystring: is not a valid location"], elem.errors.collect(&:message)
37
+
38
+ elem.value = 'http://www.atelierfabien.be'
39
+ assert !elem.validate
40
+ assert_equal ["Mystring: is not a valid location"], elem.errors.collect(&:message)
41
+ end
42
+
43
+ def test_validator_options_with_block
44
+ elem = ActiveForm::Element::build(:text, :mystring) do |e|
45
+ e.validates_as_uri do |v|
46
+ v.schemes = 'http'
47
+ v.hosts = [/^(www\.)?loob/]
48
+ v.content_types = 'text/'
49
+ end
50
+ end
51
+ assert_equal ['http'], elem.validators.first.uri_validator.schemes
52
+ assert_equal [/^(www\.)?loob/], elem.validators.first.uri_validator.hosts
53
+ assert_equal ['text/'], elem.validators.first.uri_validator.content_types
54
+ end
55
+
56
+ def test_validator_message
57
+ elem = ActiveForm::Element::build(:text, :mystring) do |e|
58
+ e.validates_as_uri :msg => "%1$s: is not a valid location (%3$s)"
59
+ end
60
+ elem.value = 'loobmedia.com'
61
+ assert !elem.validate
62
+ assert_equal ["Mystring: is not a valid location (Not Accessible)"], elem.errors.collect(&:message)
63
+ end
64
+
65
+ def test_set_validation_messages
66
+ elem = ActiveForm::Element::build(:text, :mystring) do |e|
67
+ e.validates_as_uri :msg => "%1$s: is not a valid url", :schemes => 'http', :hosts => [/^(www\.)?loob/], :content_types => 'text/' do |v|
68
+ v.messages[:invalid_scheme] = '%s: only HTTP requests are accepted'
69
+ v.messages[:invalid_host] = '%s: only urls starting with `loob` are accepted'
70
+ v.messages[:invalid_content_type] = '%s: only text content accepted'
71
+ end
72
+ end
73
+
74
+ assert_equal ["invalid_content_type", "invalid_host", "invalid_scheme", "uri"], elem.gather_validation_advice.collect(&:code)
75
+
76
+ assert_equal [
77
+ "Mystring: only text content accepted",
78
+ "Mystring: only urls starting with `loob` are accepted",
79
+ "Mystring: only HTTP requests are accepted",
80
+ "Mystring: is not a valid url"], elem.gather_validation_advice.collect(&:message)
81
+
82
+ elem.value = 'http://www.loobmedia.com'
83
+ assert elem.validate
84
+
85
+ elem.value = 'ftp://www.loobmedia.com'
86
+ assert !elem.validate
87
+ assert_equal ["Mystring: only HTTP requests are accepted"], elem.errors.collect(&:message)
88
+
89
+ elem.value = 'http://www.loobmedia.com/placeholder/background.gif'
90
+ assert !elem.validate
91
+ assert_equal ["Mystring: only text content accepted"], elem.errors.collect(&:message)
92
+ elem.value = 'http://www.atelierfabien.be'
93
+ assert !elem.validate
94
+ assert_equal ["Mystring: only urls starting with `loob` are accepted"], elem.errors.collect(&:message)
95
+ end
96
+
97
+ def test_localized_validation_messages
98
+ translations = {
99
+ 'form_elem_a_label' => 'Link',
100
+ 'form_elem_a_validates_uri' => '%s: geef een geldige en actieve url',
101
+ 'form_elem_a_validates_invalid_scheme' => '%s: enkel HTTP-locaties worden geaccepteerd',
102
+ 'form_elem_a_validates_invalid_host' => '%s: alleen loob hosts worden geaccepteerd',
103
+ 'form_elem_a_validates_invalid_content_type' => '%s: alleen tekst data wordt geaccepteerd'
104
+ }
105
+
106
+ form = ActiveForm::compose :form do |f|
107
+ f.define_localizer { |formname, elemname, key| translations[ [formname, elemname, key].compact.join('_') ] }
108
+ f.text_element :elem_a, :label => 'URL' do |e|
109
+ e.validates_as_uri :msg => "%1$s: is not a valid url", :schemes => 'http', :hosts => [/^(www\.)?loob/], :content_types => 'text/' do |v|
110
+ v.messages[:invalid_scheme] = '%s: only HTTP requests are accepted'
111
+ v.messages[:invalid_host] = '%s: only urls starting with `loob` are accepted'
112
+ v.messages[:invalid_content_type] = '%s: only text content accepted'
113
+ end
114
+ end
115
+ end
116
+
117
+ assert_equal [
118
+ "Link: alleen tekst data wordt geaccepteerd",
119
+ "Link: alleen loob hosts worden geaccepteerd",
120
+ "Link: enkel HTTP-locaties worden geaccepteerd",
121
+ "Link: geef een geldige en actieve url"], form[:elem_a].gather_validation_advice.collect(&:message)
122
+
123
+ form[:elem_a].value = 'http://www.loobmedia.com/placeholder/background.gif'
124
+ assert !form.validate
125
+ assert_equal 'Link: alleen tekst data wordt geaccepteerd', form[:elem_a].errors[0].message
126
+ end
127
+
128
+ end
@@ -0,0 +1,26 @@
1
+ require 'test_helper'
2
+
3
+ class TestValidatesWithFormat < Test::Unit::TestCase
4
+
5
+ def test_validator_defaults
6
+ elem = ActiveForm::Element::build(:text, :mystring) do |e|
7
+ e.validates_with_format :regexp => /^[a-z]{3}/
8
+ end
9
+ assert elem.validate
10
+ elem.value = '123 abcd'
11
+ assert !elem.validate
12
+ assert_equal ["Mystring: has an invalid format"], elem.errors.collect(&:message)
13
+ assert_equal ["Mystring: has an invalid format"], elem.gather_validation_advice.collect(&:message)
14
+ end
15
+
16
+ def test_validator_check
17
+ elem = ActiveForm::Element::build(:text, :mystring) do |e|
18
+ e.validates_with_format :regexp => /^[a-z]{3}/
19
+ end
20
+ invalid = [123, '%a$', 'AbC', 'abCde', '_', 'Foo Bar']
21
+ valid = [nil, '', ' ', 'abcdef', 'abc abc', 'zxf 99']
22
+ invalid.each { |value| elem.value = value; assert !elem.validate }
23
+ valid.each { |value| elem.value = value; assert elem.validate }
24
+ end
25
+
26
+ end
@@ -0,0 +1,46 @@
1
+ require 'test_helper'
2
+
3
+ class TestValidatesWithinLengthRange < Test::Unit::TestCase
4
+
5
+ def test_validator_defaults
6
+ elem = ActiveForm::Element::build(:text, :mystring) do |e|
7
+ e.validates_within_length_range
8
+ end
9
+ assert elem.validate
10
+ assert_equal [], elem.errors.collect(&:message)
11
+ assert_equal ["Mystring: length should be within 0 and 1 characters"], elem.gather_validation_advice.collect(&:message)
12
+ end
13
+
14
+ def test_validator_with_range
15
+ elem = ActiveForm::Element::build(:text, :mystring) do |e|
16
+ e.validates_within_length_range :range => (3..9)
17
+ end
18
+ assert !elem.validate
19
+ assert_equal ["Mystring: length should be within 3 and 9 characters"], elem.errors.collect(&:message)
20
+ assert_equal ["Mystring: length should be within 3 and 9 characters"], elem.gather_validation_advice.collect(&:message)
21
+ testvalues = { 'ab' => false, 'abc' => true, 'abcdefghi' => true, 'abcdefghij' => false }
22
+ testvalues.each { |(value, expected)| elem.value = value; assert_equal expected, elem.validate }
23
+ end
24
+
25
+ def test_validator_with_array
26
+ elem = ActiveForm::Element::build(:text, :mystring) do |e|
27
+ e.validates_within_length_range :range => [3, 5, 8, 13]
28
+ end
29
+ assert !elem.validate
30
+ assert_equal ["Mystring: length should be within 3 and 13 characters"], elem.errors.collect(&:message)
31
+ testvalues = { 'ab' => false, 'abc' => true, 'abcde' => true, 'abcdefghi' => false }
32
+ testvalues.each { |(value, expected)| elem.value = value; assert_equal expected, elem.validate }
33
+ end
34
+
35
+ def test_custom_validation_message
36
+ elem = ActiveForm::Element::build(:text, :mystring) do |e|
37
+ e.validates_within_length_range :range => (3..9) do |v|
38
+ v.message = "%1$s: length should be within %3$s and %4$s characters but was %5$s"
39
+ end
40
+ end
41
+ elem.value = 'ab'
42
+ assert !elem.validate
43
+ assert_equal ["Mystring: length should be within 3 and 9 characters but was 2"], elem.errors.collect(&:message)
44
+ end
45
+
46
+ end
@@ -0,0 +1,46 @@
1
+ require 'test_helper'
2
+
3
+ class TestValidatesWithinSet < Test::Unit::TestCase
4
+
5
+ def test_validator_defaults
6
+ elem = ActiveForm::Element::build(:text, :mystring) do |e|
7
+ e.validates_within_set
8
+ end
9
+ assert !elem.validate
10
+ assert_equal ["Mystring: invalid value"], elem.errors.collect(&:message)
11
+ assert_equal ["Mystring: invalid value"], elem.gather_validation_advice.collect(&:message)
12
+ end
13
+
14
+ def test_validator_with_range
15
+ elem = ActiveForm::Element::build(:text, :mystring) do |e|
16
+ e.validates_within_set :set => ['a', 'b', 'c']
17
+ end
18
+ assert !elem.validate
19
+ assert_equal ["Mystring: invalid value"], elem.errors.collect(&:message)
20
+ assert_equal ["Mystring: invalid value"], elem.gather_validation_advice.collect(&:message)
21
+ testvalues = { 'a' => true, 'b' => true, 'c' => true, 'd' => false, 'foo' => false }
22
+ testvalues.each { |(value, expected)| elem.value = value; assert_equal expected, elem.validate }
23
+ end
24
+
25
+ def test_validator_with_array
26
+ elem = ActiveForm::Element::build(:text, :mystring) do |e|
27
+ e.validates_within_set :set => ('a'..'c')
28
+ end
29
+ assert !elem.validate
30
+ assert_equal ["Mystring: invalid value"], elem.errors.collect(&:message)
31
+ testvalues = { 'a' => true, 'b' => true, 'c' => true, 'd' => false, 'foo' => false }
32
+ testvalues.each { |(value, expected)| elem.value = value; assert_equal expected, elem.validate }
33
+ end
34
+
35
+ def test_custom_validation_message
36
+ elem = ActiveForm::Element::build(:text, :mystring) do |e|
37
+ e.validates_within_set :set => (3..9) do |v|
38
+ v.message = "%1$s: value is not within these values: %3$s"
39
+ end
40
+ end
41
+ elem.value = 'abc'
42
+ assert !elem.validate
43
+ assert_equal ["Mystring: value is not within these values: 3, 4, 5, 6, 7, 8, 9"], elem.errors.collect(&:message)
44
+ end
45
+
46
+ end
@@ -0,0 +1,53 @@
1
+ require 'test_helper'
2
+
3
+ class TestValidatesWithinTimeRange < Test::Unit::TestCase
4
+
5
+ def test_validator_defaults
6
+ elem = ActiveForm::Element::build(:select_date, :mydate) do |e|
7
+ e.validates_within_time_range
8
+ end
9
+ assert elem.validate
10
+ end
11
+
12
+ def test_validation_within_time_range
13
+ elem = ActiveForm::Element::build(:select_date, :mydate) do |e|
14
+ e.validates_within_time_range :range => (Time.local(2006, 8, 1)..Time.local(2006, 12, 31))
15
+ end
16
+ elem.value = Time.local(2006, 9, 11)
17
+ assert elem.validate
18
+ elem.value = Time.local(2006, 5, 5)
19
+ assert !elem.validate
20
+ assert_equal ["Mydate: specify a valid time or date between August 01, 2006 00:00 and December 31, 2006 00:00"], elem.errors.collect(&:message)
21
+ elem.value = Date.new(2006, 9, 11)
22
+ assert elem.validate
23
+ elem.value = '2006-9-11'
24
+ assert elem.validate
25
+ end
26
+
27
+ def test_validation_within_date_range
28
+ elem = ActiveForm::Element::build(:select_date, :mydate) do |e|
29
+ e.validates_within_time_range :range => (Date.new(2006, 8, 1)..Date.new(2006, 12, 31))
30
+ end
31
+ elem.value = Date.new(2006, 9, 11)
32
+ assert elem.validate
33
+ elem.value = Date.new(2006, 5, 5)
34
+ assert !elem.validate
35
+ assert_equal ["Mydate: specify a valid time or date between August 1, 2006 and December 31, 2006"], elem.errors.collect(&:message)
36
+ elem.value = Time.local(2006, 9, 11)
37
+ assert elem.validate
38
+ elem.value = '2006-9-11'
39
+ assert elem.validate
40
+ end
41
+
42
+ def test_validation_within_specific_array_of_dates
43
+ elem = ActiveForm::Element::build(:select_date, :mydate) do |e|
44
+ e.validates_within_time_range :range => [Date.new(2006, 8, 1), Date.new(2006, 9, 11)], :message => '%s: specify either August 1 or September 11'
45
+ end
46
+ elem.value = Date.new(2006, 9, 11)
47
+ assert elem.validate
48
+ elem.value = Date.new(2006, 5, 5)
49
+ assert !elem.validate
50
+ assert_equal ["Mydate: specify either August 1 or September 11"], elem.errors.collect(&:message)
51
+ end
52
+
53
+ end