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.
- data.tar.gz.sig +2 -0
- data/History.txt +4 -0
- data/License.txt +20 -0
- data/MIT-LICENSE +19 -0
- data/Manifest.txt +181 -0
- data/README.txt +1 -0
- data/Rakefile +4 -0
- data/config/hoe.rb +71 -0
- data/config/requirements.rb +17 -0
- data/init.rb +5 -0
- data/lib/active_form.rb +86 -0
- data/lib/active_form/core_extensions.rb +179 -0
- data/lib/active_form/definition.rb +72 -0
- data/lib/active_form/element.rb +50 -0
- data/lib/active_form/elements/base.rb +67 -0
- data/lib/active_form/elements/builder.rb +103 -0
- data/lib/active_form/elements/button.rb +15 -0
- data/lib/active_form/elements/checkbox.rb +18 -0
- data/lib/active_form/elements/file.rb +15 -0
- data/lib/active_form/elements/hidden.rb +9 -0
- data/lib/active_form/elements/image.rb +7 -0
- data/lib/active_form/elements/input.rb +23 -0
- data/lib/active_form/elements/password.rb +12 -0
- data/lib/active_form/elements/radio.rb +18 -0
- data/lib/active_form/elements/reset.rb +15 -0
- data/lib/active_form/elements/section.rb +37 -0
- data/lib/active_form/elements/select.rb +42 -0
- data/lib/active_form/elements/submit.rb +19 -0
- data/lib/active_form/elements/text.rb +9 -0
- data/lib/active_form/elements/textarea.rb +18 -0
- data/lib/active_form/errors.rb +73 -0
- data/lib/active_form/facets/checkbox_group.rb +11 -0
- data/lib/active_form/facets/collection_input.rb +96 -0
- data/lib/active_form/facets/radio_group.rb +11 -0
- data/lib/active_form/facets/select_date.rb +10 -0
- data/lib/active_form/facets/select_datetime.rb +10 -0
- data/lib/active_form/facets/select_day.rb +17 -0
- data/lib/active_form/facets/select_from_model.rb +60 -0
- data/lib/active_form/facets/select_hour.rb +17 -0
- data/lib/active_form/facets/select_minute.rb +17 -0
- data/lib/active_form/facets/select_month.rb +46 -0
- data/lib/active_form/facets/select_numeric_range.rb +59 -0
- data/lib/active_form/facets/select_second.rb +17 -0
- data/lib/active_form/facets/select_time.rb +10 -0
- data/lib/active_form/facets/select_timebased.rb +145 -0
- data/lib/active_form/facets/select_weekday.rb +46 -0
- data/lib/active_form/facets/select_year.rb +24 -0
- data/lib/active_form/mixins/attribute_methods.rb +33 -0
- data/lib/active_form/mixins/casting.rb +152 -0
- data/lib/active_form/mixins/collection_element_methods.rb +204 -0
- data/lib/active_form/mixins/common_methods.rb +350 -0
- data/lib/active_form/mixins/container_methods.rb +417 -0
- data/lib/active_form/mixins/css_methods.rb +70 -0
- data/lib/active_form/mixins/element_methods.rb +314 -0
- data/lib/active_form/mixins/javascript_methods.rb +99 -0
- data/lib/active_form/mixins/loader_methods.rb +72 -0
- data/lib/active_form/mixins/option_element_methods.rb +61 -0
- data/lib/active_form/mixins/validation_methods.rb +253 -0
- data/lib/active_form/validator.rb +47 -0
- data/lib/active_form/validators/alpha.rb +9 -0
- data/lib/active_form/validators/alphanum.rb +9 -0
- data/lib/active_form/validators/base.rb +132 -0
- data/lib/active_form/validators/digits.rb +9 -0
- data/lib/active_form/validators/email.rb +29 -0
- data/lib/active_form/validators/format.rb +15 -0
- data/lib/active_form/validators/length_range.rb +24 -0
- data/lib/active_form/validators/number.rb +9 -0
- data/lib/active_form/validators/option_count.rb +24 -0
- data/lib/active_form/validators/proc.rb +22 -0
- data/lib/active_form/validators/required.rb +9 -0
- data/lib/active_form/validators/set.rb +21 -0
- data/lib/active_form/validators/time_range.rb +30 -0
- data/lib/active_form/validators/uri.rb +54 -0
- data/lib/active_form/version.rb +9 -0
- data/lib/active_form/views/fieldsets.rb +34 -0
- data/lib/active_form/views/plain.rb +32 -0
- data/lib/active_form/views/tables.rb +28 -0
- data/lib/active_form/widget.rb +43 -0
- data/lib/active_form/widgets/base.rb +28 -0
- data/lib/loob/uri_validator.rb +140 -0
- data/lib/rails/acts_as_dropdown/MIT-LICENSE +20 -0
- data/lib/rails/acts_as_dropdown/acts_as_dropdown.rb +119 -0
- data/lib/rails/acts_as_dropdown/dropdown.rb +27 -0
- data/lib/rails/controller_helper.rb +19 -0
- data/lib/rails/model/loader.rb +206 -0
- data/lib/rails/view_helper.rb +20 -0
- data/samples/html/css/style.css +175 -0
- data/samples/html/js/effects.js +958 -0
- data/samples/html/js/prototype.js +2006 -0
- data/samples/html/js/validation.js +228 -0
- data/samples/html/plain_view.html +77 -0
- data/samples/html/sample001.html +158 -0
- data/samples/html/sample002.html +76 -0
- data/samples/html/sample003.html +34 -0
- data/samples/layouts/default.rhtml +18 -0
- data/samples/layouts/plain.rhtml +21 -0
- data/samples/layouts/sample003.rhtml +25 -0
- data/samples/plain_view.rb +58 -0
- data/samples/sample001.rb +111 -0
- data/samples/sample002.rb +92 -0
- data/samples/sample003.rb +30 -0
- data/script/destroy +14 -0
- data/script/generate +14 -0
- data/script/txt2html +74 -0
- data/setup.rb +1585 -0
- data/tasks/deployment.rake +34 -0
- data/tasks/environment.rake +7 -0
- data/tasks/website.rake +17 -0
- data/test/elements/test_base_element.rb +159 -0
- data/test/elements/test_builder_element.rb +81 -0
- data/test/elements/test_button_element.rb +12 -0
- data/test/elements/test_checkbox_element.rb +233 -0
- data/test/elements/test_file_element.rb +20 -0
- data/test/elements/test_hidden_element.rb +11 -0
- data/test/elements/test_image_element.rb +11 -0
- data/test/elements/test_input_element.rb +39 -0
- data/test/elements/test_password_element.rb +16 -0
- data/test/elements/test_radio_element.rb +197 -0
- data/test/elements/test_reset_element.rb +12 -0
- data/test/elements/test_section_element.rb +162 -0
- data/test/elements/test_select_element.rb +364 -0
- data/test/elements/test_submit_element.rb +12 -0
- data/test/elements/test_text_element.rb +91 -0
- data/test/elements/test_textarea_element.rb +23 -0
- data/test/facets/test_checkbox_group_element.rb +388 -0
- data/test/facets/test_radio_group_element.rb +312 -0
- data/test/facets/test_select_date_element.rb +211 -0
- data/test/facets/test_select_datetime_element.rb +56 -0
- data/test/facets/test_select_day_element.rb +37 -0
- data/test/facets/test_select_from_model_element.rb +86 -0
- data/test/facets/test_select_hour_element.rb +37 -0
- data/test/facets/test_select_minute_element.rb +52 -0
- data/test/facets/test_select_month_element.rb +79 -0
- data/test/facets/test_select_numeric_range_element.rb +14 -0
- data/test/facets/test_select_second_element.rb +48 -0
- data/test/facets/test_select_time_element.rb +148 -0
- data/test/facets/test_select_weekday_element.rb +71 -0
- data/test/facets/test_select_year_element.rb +73 -0
- data/test/fixtures/author.rb +11 -0
- data/test/fixtures/authors.yml +0 -0
- data/test/fixtures/book.rb +14 -0
- data/test/fixtures/books.yml +8 -0
- data/test/fixtures/categories.yml +0 -0
- data/test/fixtures/categorization.rb +2 -0
- data/test/fixtures/categorizations.yml +0 -0
- data/test/fixtures/category.rb +8 -0
- data/test/fixtures/publisher.rb +5 -0
- data/test/fixtures/publishers.yml +10 -0
- data/test/fixtures/schema.rb +43 -0
- data/test/rails/test_model_autodefinition.rb +121 -0
- data/test/rails/test_model_loader.rb +61 -0
- data/test/resources/elements/chunky.rb +11 -0
- data/test/resources/forms/demo.rb +5 -0
- data/test/resources/models/book.rb +8 -0
- data/test/resources/models/register_publisher.rb +5 -0
- data/test/resources/sections/demo.rb +6 -0
- data/test/resources/sections/foo.rb +6 -0
- data/test/resources/validators/foo.rb +9 -0
- data/test/resources/widgets/custom.rb +13 -0
- data/test/test_active_form.rb +1050 -0
- data/test/test_casting.rb +124 -0
- data/test/test_definition.rb +68 -0
- data/test/test_definition_class.rb +118 -0
- data/test/test_element_class.rb +201 -0
- data/test/test_helper.rb +74 -0
- data/test/test_javascript.rb +234 -0
- data/test/test_load_definition.rb +68 -0
- data/test/test_load_element.rb +35 -0
- data/test/test_load_section_element.rb +43 -0
- data/test/test_load_validator.rb +31 -0
- data/test/test_load_widget.rb +93 -0
- data/test/test_validation.rb +722 -0
- data/test/validators/test_validates_as_alpha.rb +26 -0
- data/test/validators/test_validates_as_alphanum.rb +26 -0
- data/test/validators/test_validates_as_digits.rb +26 -0
- data/test/validators/test_validates_as_email.rb +29 -0
- data/test/validators/test_validates_as_number.rb +26 -0
- data/test/validators/test_validates_as_uri.rb +128 -0
- data/test/validators/test_validates_with_format.rb +26 -0
- data/test/validators/test_validates_within_length_range.rb +46 -0
- data/test/validators/test_validates_within_set.rb +46 -0
- data/test/validators/test_validates_within_time_range.rb +53 -0
- metadata +307 -0
- 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
|