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,20 @@
|
|
|
1
|
+
require 'test_helper'
|
|
2
|
+
|
|
3
|
+
class TestFileElement < Test::Unit::TestCase
|
|
4
|
+
|
|
5
|
+
def test_set_attributes
|
|
6
|
+
[:title, :lang, :size, :accept].each do |attribute|
|
|
7
|
+
assert ActiveForm::Element::File.element_attribute_names.include?(attribute)
|
|
8
|
+
end
|
|
9
|
+
elem = ActiveForm::Element::File.new :elem, :size => 20, :accept => 'image/jpeg image/jpg image/png'
|
|
10
|
+
expected = {"name"=>"elem", "class"=>"elem_file", "id"=>"elem", "size"=>20, "type"=>"file", "accept"=>"image/jpeg image/jpg image/png"}
|
|
11
|
+
assert_equal expected, elem.element_attributes
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def test_element_to_html
|
|
15
|
+
elem = ActiveForm::Element::File.new :elem
|
|
16
|
+
expected = %|<input class="elem_file" id="elem" name="elem" type="file"/>\n|
|
|
17
|
+
assert_equal expected, elem.to_html
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
end
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
require 'test_helper'
|
|
2
|
+
|
|
3
|
+
class TestHiddenElement < Test::Unit::TestCase
|
|
4
|
+
|
|
5
|
+
def test_element_to_html
|
|
6
|
+
elem = ActiveForm::Element::Hidden.new :elem, :value => 'test'
|
|
7
|
+
expected = %|<input id="elem" name="elem" type="hidden" value="test"/>\n|
|
|
8
|
+
assert_equal expected, elem.to_html
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
end
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
require 'test_helper'
|
|
2
|
+
|
|
3
|
+
class TestImageElement < Test::Unit::TestCase
|
|
4
|
+
|
|
5
|
+
def test_element_to_html
|
|
6
|
+
elem = ActiveForm::Element::Image.new :elem
|
|
7
|
+
expected = %|<input class="elem_image" id="elem" name="elem" type="image"/>\n|
|
|
8
|
+
assert_equal expected, elem.to_html
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
end
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
require 'test_helper'
|
|
2
|
+
|
|
3
|
+
class TestInputElement < Test::Unit::TestCase
|
|
4
|
+
|
|
5
|
+
def test_set_attributes
|
|
6
|
+
[:title, :lang, :type, :value].each do |attribute|
|
|
7
|
+
assert ActiveForm::Element::Input.element_attribute_names.include?(attribute)
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
elem = ActiveForm::Element::Input.new :elem, :type => 'password', :value => 'secret'
|
|
11
|
+
expected = {"name"=>"elem", "class"=>"elem_input", "type"=>"password", "id"=>"elem", "value"=>"secret"}
|
|
12
|
+
assert_equal expected, elem.element_attributes
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def test_element_to_html
|
|
16
|
+
elem = ActiveForm::Element::Input.new :elem, :type => 'hidden'
|
|
17
|
+
expected = %|<input class="elem_input" id="elem" name="elem" type="hidden"/>\n|
|
|
18
|
+
assert_equal expected, elem.to_html
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def test_autocomplete_off
|
|
22
|
+
elem = ActiveForm::Element::Input.new :elem, :type => 'text', :autocomplete_off => true
|
|
23
|
+
expected = %|<input autocomplete="off" class="elem_input" id="elem" name="elem" type="text"/>\n|
|
|
24
|
+
assert_equal expected, elem.to_html
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def test_accesskey_attribute
|
|
28
|
+
elem = ActiveForm::Element::Input.new :elem, :type => 'text', :accesskey => 'f'
|
|
29
|
+
expected = %|<input accesskey="f" class="elem_input" id="elem" name="elem" type="text"/>\n|
|
|
30
|
+
assert_equal expected, elem.to_html
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def test_tabindex_attribute
|
|
34
|
+
elem = ActiveForm::Element::Input.new :elem, :type => 'text', :tabindex => '2'
|
|
35
|
+
expected = %|<input class="elem_input" id="elem" name="elem" tabindex="2" type="text"/>\n|
|
|
36
|
+
assert_equal expected, elem.to_html
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
end
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
require 'test_helper'
|
|
2
|
+
|
|
3
|
+
class TestPasswordElement < Test::Unit::TestCase
|
|
4
|
+
|
|
5
|
+
def test_element_to_html
|
|
6
|
+
elem = ActiveForm::Element::Password.new :elem, :value => 'secret'
|
|
7
|
+
expected = %|<input class="elem_password" id="elem" name="elem" size="30" type="password" value="secret"/>\n|
|
|
8
|
+
assert_equal expected, elem.to_html
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def test_render_frozen
|
|
12
|
+
elem = ActiveForm::Element::Password.new :elem, :value => 'secret', :frozen => true
|
|
13
|
+
assert_equal '••••••', elem.to_html
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
end
|
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
require 'test_helper'
|
|
2
|
+
|
|
3
|
+
class TestRadioElement < Test::Unit::TestCase
|
|
4
|
+
|
|
5
|
+
def test_standard_values
|
|
6
|
+
elem = ActiveForm::Element::Radio.new :elem
|
|
7
|
+
assert_equal nil, elem.fallback_value
|
|
8
|
+
assert_equal 1, elem.checked_value
|
|
9
|
+
assert_equal nil, elem.export_value
|
|
10
|
+
elem.checked = true
|
|
11
|
+
assert_equal 1, elem.export_value
|
|
12
|
+
expected = %|<input checked="checked" class="elem_radio" id="elem" name="elem" type="radio" value="1"/>\n|
|
|
13
|
+
assert_equal expected, elem.to_html
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def test_element_to_html
|
|
17
|
+
elem = ActiveForm::Element::Radio.new :elem, :option => 'yes'
|
|
18
|
+
assert !elem.checked?
|
|
19
|
+
assert_equal nil, elem.value
|
|
20
|
+
expected = %|<input class="elem_radio" id="elem" name="elem" type="radio" value="yes"/>\n|
|
|
21
|
+
assert_equal expected, elem.to_html
|
|
22
|
+
|
|
23
|
+
elem = ActiveForm::Element::Radio.new :elem, :option => 'yes', :checked => true
|
|
24
|
+
assert elem.checked?
|
|
25
|
+
assert_equal 'yes', elem.value
|
|
26
|
+
expected = %|<input checked="checked" class="elem_radio" id="elem" name="elem" type="radio" value="yes"/>\n|
|
|
27
|
+
assert_equal expected, elem.to_html
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def test_set_options
|
|
31
|
+
elem = ActiveForm::Element::Radio.new :elem, :options => ['yes', 'no']
|
|
32
|
+
assert !elem.checked?
|
|
33
|
+
expected = %|<input class="elem_radio" id="elem" name="elem" type="radio" value="yes"/>\n|
|
|
34
|
+
assert_equal expected, elem.to_html
|
|
35
|
+
|
|
36
|
+
elem.value = 'yes'
|
|
37
|
+
assert elem.checked?
|
|
38
|
+
expected = %|<input checked="checked" class="elem_radio" id="elem" name="elem" type="radio" value="yes"/>\n|
|
|
39
|
+
assert_equal expected, elem.to_html
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def test_unknown_value
|
|
43
|
+
elem = ActiveForm::Element::Radio.new :elem, :option => 'yes'
|
|
44
|
+
elem.value = 'unknown'
|
|
45
|
+
assert !elem.checked?
|
|
46
|
+
assert_equal nil, elem.element_value
|
|
47
|
+
|
|
48
|
+
elem.value = 'yes'
|
|
49
|
+
assert elem.checked?
|
|
50
|
+
assert_equal 'yes', elem.element_value
|
|
51
|
+
|
|
52
|
+
elem = ActiveForm::Element::Radio.new :elem, :options => ['yes', 'no']
|
|
53
|
+
elem.value = 'unknown'
|
|
54
|
+
assert !elem.checked?
|
|
55
|
+
assert_equal 'no', elem.element_value
|
|
56
|
+
|
|
57
|
+
elem.value = 'yes'
|
|
58
|
+
assert elem.checked?
|
|
59
|
+
assert_equal 'yes', elem.element_value
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
def test_set_checked
|
|
63
|
+
elem = ActiveForm::Element::Radio.new :elem, :options => ['yes', 'no'], :checked => true
|
|
64
|
+
assert elem.checked?
|
|
65
|
+
assert_equal 'yes', elem.checked_value
|
|
66
|
+
assert_equal 'no', elem.fallback_value
|
|
67
|
+
assert_equal 'yes', elem.export_value
|
|
68
|
+
assert_equal 'yes', elem.element_value
|
|
69
|
+
|
|
70
|
+
elem.checked = false
|
|
71
|
+
assert !elem.checked?
|
|
72
|
+
assert_equal 'yes', elem.checked_value
|
|
73
|
+
assert_equal 'no', elem.fallback_value
|
|
74
|
+
assert_equal 'no', elem.export_value
|
|
75
|
+
assert_equal 'no', elem.element_value
|
|
76
|
+
|
|
77
|
+
elem.checked = true
|
|
78
|
+
assert elem.checked?
|
|
79
|
+
assert_equal 'yes', elem.checked_value
|
|
80
|
+
assert_equal 'no', elem.fallback_value
|
|
81
|
+
assert_equal 'yes', elem.export_value
|
|
82
|
+
assert_equal 'yes', elem.element_value
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
def test_on_off_value
|
|
86
|
+
elem = ActiveForm::Element::Radio.new :elem, :options => ['yes', 'no']
|
|
87
|
+
assert !elem.checked?
|
|
88
|
+
assert_equal 'yes', elem.checked_value
|
|
89
|
+
assert_equal 'no', elem.fallback_value
|
|
90
|
+
assert_equal 'no', elem.export_value
|
|
91
|
+
assert_equal 'no', elem.element_value
|
|
92
|
+
|
|
93
|
+
elem.update_from_params('yes')
|
|
94
|
+
assert elem.checked?
|
|
95
|
+
assert_equal 'yes', elem.element_value
|
|
96
|
+
|
|
97
|
+
elem.update_from_params('no')
|
|
98
|
+
assert !elem.checked?
|
|
99
|
+
assert_equal 'no', elem.element_value
|
|
100
|
+
|
|
101
|
+
elem.update_from_params(nil)
|
|
102
|
+
assert !elem.checked?
|
|
103
|
+
assert_equal 'no', elem.element_value
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
def test_update_from_params
|
|
107
|
+
form = ActiveForm::compose :myform do |f|
|
|
108
|
+
f.text_element :first_name
|
|
109
|
+
f.text_element :last_name
|
|
110
|
+
f.radio_element :confirm, :options => ['yes', 'no'], :value => 'yes'
|
|
111
|
+
f.submit_element :send
|
|
112
|
+
end
|
|
113
|
+
assert form[:confirm].checked?
|
|
114
|
+
|
|
115
|
+
params = { :myform => { :first_name => 'Fred', :last_name => 'Flintstone', :confirm => 'yes' } }
|
|
116
|
+
form.update_from_params(params)
|
|
117
|
+
assert form[:confirm].checked?
|
|
118
|
+
|
|
119
|
+
params = { :myform => { :first_name => 'Fred', :last_name => 'Flintstone', :confirm => 'no' } }
|
|
120
|
+
form.update_from_params(params)
|
|
121
|
+
assert !form[:confirm].checked?
|
|
122
|
+
form[:confirm].checked = true
|
|
123
|
+
|
|
124
|
+
params = { :myform => { :first_name => 'Fred', :last_name => 'Flintstone', :confirm => nil } }
|
|
125
|
+
form.update_from_params(params)
|
|
126
|
+
assert !form[:confirm].checked?
|
|
127
|
+
form[:confirm].checked = true
|
|
128
|
+
|
|
129
|
+
params = { :myform => { :first_name => 'Fred', :last_name => 'Flintstone', :confirm => nil } }
|
|
130
|
+
form.update_from_params(params)
|
|
131
|
+
assert !form[:confirm].checked?
|
|
132
|
+
form[:confirm].checked = true
|
|
133
|
+
|
|
134
|
+
params = { :myform => { :first_name => 'Fred', :last_name => 'Flintstone' } }
|
|
135
|
+
form.update_from_params(params)
|
|
136
|
+
assert !form[:confirm].checked?
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
def test_if_checked
|
|
140
|
+
elem = ActiveForm::Element::Radio.new :elem, :option => 'yes'
|
|
141
|
+
assert_equal 'yes', elem.checked_value
|
|
142
|
+
assert_equal nil, elem.fallback_value
|
|
143
|
+
assert_equal nil, elem.export_value
|
|
144
|
+
assert_equal nil, elem.element_value
|
|
145
|
+
assert !elem.active?
|
|
146
|
+
assert !elem.checked?
|
|
147
|
+
assert !elem.selected?
|
|
148
|
+
|
|
149
|
+
elem.update_from_params('yes')
|
|
150
|
+
assert elem.active?
|
|
151
|
+
assert elem.checked?
|
|
152
|
+
assert elem.selected?
|
|
153
|
+
assert_equal 'yes', elem.element_value
|
|
154
|
+
|
|
155
|
+
elem.update_from_params('no')
|
|
156
|
+
assert !elem.checked?
|
|
157
|
+
assert_equal nil, elem.element_value
|
|
158
|
+
|
|
159
|
+
elem.update_from_params(nil)
|
|
160
|
+
assert !elem.checked?
|
|
161
|
+
assert_equal nil, elem.element_value
|
|
162
|
+
end
|
|
163
|
+
|
|
164
|
+
def test_required_validation
|
|
165
|
+
form = ActiveForm::compose :myform do |f|
|
|
166
|
+
f.text_element :first_name
|
|
167
|
+
f.text_element :last_name
|
|
168
|
+
f.radio_element :confirm, :options => ['yes', 'no'], :required => true
|
|
169
|
+
f.submit_element :send
|
|
170
|
+
end
|
|
171
|
+
|
|
172
|
+
assert_equal 0, form[:confirm].element_errors.length
|
|
173
|
+
assert_equal '', form[:confirm].validation_advice
|
|
174
|
+
|
|
175
|
+
validator = form[:confirm].validators.detect { |v| v.code == 'required' }
|
|
176
|
+
assert_kind_of ActiveForm::Validator::Proc, validator
|
|
177
|
+
assert !form.validate
|
|
178
|
+
expected = %|<div class="validation-advice advice-confirm" id="advice-validate-confirm-myform_confirm">Confirm: validation failed</div>\n|
|
|
179
|
+
assert_equal expected, form[:confirm].validation_advice
|
|
180
|
+
|
|
181
|
+
form[:confirm].value = 'no'
|
|
182
|
+
assert !form.validate
|
|
183
|
+
assert_equal expected, form[:confirm].validation_advice
|
|
184
|
+
|
|
185
|
+
form[:confirm].value = 'yes'
|
|
186
|
+
assert form.validate
|
|
187
|
+
assert_equal '', form[:confirm].validation_advice
|
|
188
|
+
|
|
189
|
+
form[:confirm].required_message = 'you need to confirm this'
|
|
190
|
+
assert_equal 'you need to confirm this', validator.message
|
|
191
|
+
|
|
192
|
+
form[:confirm].required = false
|
|
193
|
+
validator = form[:confirm].validators.detect { |v| v.code == 'required' }
|
|
194
|
+
assert_equal nil, validator
|
|
195
|
+
end
|
|
196
|
+
|
|
197
|
+
end
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
require 'test_helper'
|
|
2
|
+
|
|
3
|
+
class TestResetElement < Test::Unit::TestCase
|
|
4
|
+
|
|
5
|
+
def test_element_to_html
|
|
6
|
+
elem = ActiveForm::Element::Reset.new :elem, :label => 'Reset data'
|
|
7
|
+
assert !elem.labelled?
|
|
8
|
+
expected = %|<input class="elem_reset" id="elem" name="elem" type="reset" value="Reset data"/>\n|
|
|
9
|
+
assert_equal expected, elem.to_html
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
end
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
require 'test_helper'
|
|
2
|
+
|
|
3
|
+
class TestSectionElement < Test::Unit::TestCase
|
|
4
|
+
|
|
5
|
+
def test_standard_attributes
|
|
6
|
+
assert ActiveForm::Element::Section.element_attribute_names.include?(:title)
|
|
7
|
+
assert ActiveForm::Element::Section.element_attribute_names.include?(:lang)
|
|
8
|
+
elem = ActiveForm::Element::Section.new :elem
|
|
9
|
+
assert elem.respond_to?(:title=)
|
|
10
|
+
assert elem.respond_to?(:style=)
|
|
11
|
+
assert elem.respond_to?(:class=)
|
|
12
|
+
assert elem.respond_to?(:lang=)
|
|
13
|
+
assert_equal Hash.new, elem.attributes
|
|
14
|
+
expected = {"class"=>"active_section", "id"=>"elem"}
|
|
15
|
+
assert_equal expected, elem.element_attributes
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def test_set_standard_attributes
|
|
19
|
+
elem = ActiveForm::Element::Section.new :section, :title => 'My Element', :lang => 'nl-nl'
|
|
20
|
+
expected = {"title"=>"My Element", "lang"=>"nl-nl"}
|
|
21
|
+
assert_equal expected, elem.attributes
|
|
22
|
+
expected = {"id"=>"section", "class"=>"active_section", "title"=>"My Element", "lang"=>"nl-nl"}
|
|
23
|
+
assert_equal expected, elem.element_attributes
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def test_standard_option_flags
|
|
27
|
+
section = ActiveForm::Element::Section.new :section
|
|
28
|
+
[:frozen, :hidden, :disabled, :readonly, :required].each do |method|
|
|
29
|
+
assert ActiveForm::Element::Section.element_option_flag_names.include?(method)
|
|
30
|
+
assert section.respond_to?("#{method}")
|
|
31
|
+
assert section.respond_to?("#{method}=")
|
|
32
|
+
assert section.respond_to?("#{method}?")
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def test_render_label
|
|
37
|
+
section = ActiveForm::Element::Section.new :section, :label => 'My Section'
|
|
38
|
+
assert_equal %|<span class="label">My Section</span>\n|, section.render_label
|
|
39
|
+
section.hidden = true
|
|
40
|
+
assert_equal %|<span class="hidden label">My Section</span>\n|, section.render_label
|
|
41
|
+
section.hidden = false; section.required = true; section.frozen = true
|
|
42
|
+
assert_equal %|<span class="inactive required label">My Section</span>\n|, section.render_label
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
ActiveForm::Element::Section::create :person_name do |s|
|
|
48
|
+
|
|
49
|
+
s.text_element :firstname, :title => 'First Name'
|
|
50
|
+
s.text_element :lastname, :title => 'Last Name'
|
|
51
|
+
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
ActiveForm::Element::Section::create :message do |s|
|
|
55
|
+
|
|
56
|
+
s.text_element :subject
|
|
57
|
+
s.textarea_element :message
|
|
58
|
+
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
class TestSectionElementClass < Test::Unit::TestCase
|
|
62
|
+
|
|
63
|
+
def test_get_and_build_group
|
|
64
|
+
assert_equal ActiveForm::PersonNameSection, ActiveForm::Element::Section.get(:person_name)
|
|
65
|
+
section = ActiveForm::Element::Section.build(:person_name)
|
|
66
|
+
assert_kind_of ActiveForm::PersonNameSection, section
|
|
67
|
+
assert_equal [:firstname, :lastname], section.collect(&:name)
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
def test_append_section_to_form
|
|
71
|
+
form = ActiveForm::compose :form
|
|
72
|
+
form << ActiveForm::Element::Section.build(:person_name, :person)
|
|
73
|
+
form << ActiveForm::Element::Section.build(:message)
|
|
74
|
+
form << ActiveForm::Element::Submit.new(:send)
|
|
75
|
+
assert_equal [:person, :message, :send], form.collect(&:name)
|
|
76
|
+
assert_equal [:firstname, :lastname], form[:person].collect(&:name)
|
|
77
|
+
assert_equal [:subject, :message], form[:message].collect(&:name)
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
def test_append_and_use_section_binding
|
|
81
|
+
items = []
|
|
82
|
+
items << { :id => 1, :firstname => 'Fred', :lastname => 'Flintstone' }
|
|
83
|
+
items << { :id => 2, :firstname => 'Barney', :lastname => 'Rubble' }
|
|
84
|
+
|
|
85
|
+
person_wrapper = proc do |builder, elem, render|
|
|
86
|
+
builder.fieldset(:class => 'section') {
|
|
87
|
+
builder.legend(elem.label, :class => 'section')
|
|
88
|
+
builder.div(:id => "section-#{elem.identifier}", &render)
|
|
89
|
+
}
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
form = ActiveForm::compose :form
|
|
93
|
+
form.section :people do |s|
|
|
94
|
+
items.each do |item|
|
|
95
|
+
element_id = "person_#{item[:id]}"
|
|
96
|
+
s.append_section [:person_name, element_id, { :label => "#{item[:firstname]} #{item[:lastname]}", :element_wrapper => person_wrapper }]
|
|
97
|
+
s[element_id].values = item # do this here, so the container has been registered to the item's group
|
|
98
|
+
end
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
assert_equal [:person_1, :person_2], form[:people].collect(&:name)
|
|
102
|
+
form.values['people']['person_1']['firstname'] = 'Wilma'
|
|
103
|
+
assert_equal 'Wilma', form[:people][:person_1][:firstname].value
|
|
104
|
+
|
|
105
|
+
expected = [{"firstname"=>"Wilma", "id"=>1, "lastname"=>"Flintstone"}, {"firstname"=>"Barney", "id"=>2, "lastname"=>"Rubble"}]
|
|
106
|
+
assert_equal expected, form[:people].collect { |person| person.values }
|
|
107
|
+
|
|
108
|
+
expected = %|<form action="#form" class="active_form" id="form" method="post">
|
|
109
|
+
<fieldset class="section">
|
|
110
|
+
<legend class="section">Fred Flintstone</legend>
|
|
111
|
+
<div id="section-form_people_person_1">
|
|
112
|
+
<input class="elem_text" id="form_people_person_1_firstname" name="form[people][person_1][firstname]" size="30" title="First Name" type="text" value="Wilma"/>
|
|
113
|
+
<input class="elem_text" id="form_people_person_1_lastname" name="form[people][person_1][lastname]" size="30" title="Last Name" type="text" value="Flintstone"/>
|
|
114
|
+
</div>
|
|
115
|
+
</fieldset>
|
|
116
|
+
<fieldset class="section">
|
|
117
|
+
<legend class="section">Barney Rubble</legend>
|
|
118
|
+
<div id="section-form_people_person_2">
|
|
119
|
+
<input class="elem_text" id="form_people_person_2_firstname" name="form[people][person_2][firstname]" size="30" title="First Name" type="text" value="Barney"/>
|
|
120
|
+
<input class="elem_text" id="form_people_person_2_lastname" name="form[people][person_2][lastname]" size="30" title="Last Name" type="text" value="Rubble"/>
|
|
121
|
+
</div>
|
|
122
|
+
</fieldset>
|
|
123
|
+
</form>\n|
|
|
124
|
+
assert_equal expected, form.to_html
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
def test_append_section
|
|
128
|
+
form = ActiveForm::compose :form
|
|
129
|
+
form.append_section :person_name
|
|
130
|
+
form.append_section :message
|
|
131
|
+
form.submit_element :send
|
|
132
|
+
assert_equal [:person_name, :message, :send], form.collect(&:name)
|
|
133
|
+
assert_equal [:firstname, :lastname], form[:person_name].collect(&:name)
|
|
134
|
+
end
|
|
135
|
+
|
|
136
|
+
def test_append_sections
|
|
137
|
+
form = ActiveForm::compose :form
|
|
138
|
+
form.append_sections :person_name, :message
|
|
139
|
+
form.submit_element :send
|
|
140
|
+
assert_equal [:person_name, :message, :send], form.collect(&:name)
|
|
141
|
+
assert_equal [:firstname, :lastname], form[:person_name].collect(&:name)
|
|
142
|
+
end
|
|
143
|
+
|
|
144
|
+
def test_append_sections_using_array_syntax
|
|
145
|
+
form = ActiveForm::compose :form
|
|
146
|
+
form.append_sections [:person_name, :name], [:message, :email, { :label => "E-Mail" }]
|
|
147
|
+
form.submit_element :send
|
|
148
|
+
assert_equal [:name, :email, :send], form.collect(&:name)
|
|
149
|
+
assert_equal ['Name', 'E-Mail', 'Send'], form.collect(&:label)
|
|
150
|
+
assert_equal [:firstname, :lastname], form[:name].collect(&:name)
|
|
151
|
+
end
|
|
152
|
+
|
|
153
|
+
def test_append_section_using_concat_syntax
|
|
154
|
+
form = ActiveForm::compose :form
|
|
155
|
+
form << :person_name
|
|
156
|
+
form << :message
|
|
157
|
+
form.submit_element :send
|
|
158
|
+
assert_equal [:person_name, :message, :send], form.collect(&:name)
|
|
159
|
+
assert_equal [:firstname, :lastname], form[:person_name].collect(&:name)
|
|
160
|
+
end
|
|
161
|
+
|
|
162
|
+
end
|