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,124 @@
|
|
|
1
|
+
require 'test_helper'
|
|
2
|
+
|
|
3
|
+
class TestCasting < Test::Unit::TestCase
|
|
4
|
+
|
|
5
|
+
def test_type_casting
|
|
6
|
+
form = ActiveForm::compose :form do |f|
|
|
7
|
+
f.text_element :string , :type_cast => :string , :value => 123
|
|
8
|
+
f.text_element :text , :type_cast => :text , :value => 123
|
|
9
|
+
f.text_element :integer , :type_cast => :integer , :value => 123
|
|
10
|
+
end
|
|
11
|
+
assert_equal :string, form[:string].type_cast
|
|
12
|
+
assert_equal :text, form[:text].type_cast
|
|
13
|
+
assert_equal :integer, form[:integer].type_cast
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def test_cast_raw_element_value
|
|
17
|
+
form = ActiveForm::compose :form do |f|
|
|
18
|
+
f.text_element :string , :type_cast => :string , :value => 123
|
|
19
|
+
f.text_element :text , :type_cast => :text , :value => 123
|
|
20
|
+
f.text_element :integer , :type_cast => :integer , :value => 123
|
|
21
|
+
f.text_element :float , :type_cast => :float , :value => 123
|
|
22
|
+
f.text_element :array , :type_cast => :array , :value => 123
|
|
23
|
+
f.text_element :datetime , :type_cast => :datetime , :value => '2004-01-01 13:15:05'
|
|
24
|
+
f.text_element :timestamp, :type_cast => :timestamp , :value => '2004-01-01 13:15:05'
|
|
25
|
+
f.text_element :time , :type_cast => :time , :value => '13:15:05'
|
|
26
|
+
f.text_element :date , :type_cast => :date , :value => '2004-01-01'
|
|
27
|
+
f.text_element :boolean , :type_cast => :boolean , :value => 'f'
|
|
28
|
+
end
|
|
29
|
+
assert_equal '123', form[:string].element_value
|
|
30
|
+
assert_equal '123', form[:text].element_value
|
|
31
|
+
assert_equal 123, form[:integer].element_value
|
|
32
|
+
assert_equal 123.0, form[:float].element_value
|
|
33
|
+
assert_equal [123], form[:array].element_value
|
|
34
|
+
assert_equal false, form[:boolean].element_value
|
|
35
|
+
assert_kind_of Time, form[:time].element_value
|
|
36
|
+
assert_equal Date.new(2004, 1, 1), form[:date].element_value
|
|
37
|
+
assert_equal Time.local(2004, 1, 1, 13, 15, 5), form[:datetime].element_value
|
|
38
|
+
assert_equal Time.local(2004, 1, 1, 13, 15, 5), form[:timestamp].element_value
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def test_cast_native_element_value
|
|
42
|
+
form = ActiveForm::compose :form do |f|
|
|
43
|
+
f.text_element :string , :type_cast => :string , :value => 'abc'
|
|
44
|
+
f.text_element :text , :type_cast => :text , :value => 'abc'
|
|
45
|
+
f.text_element :integer , :type_cast => :integer , :value => 123
|
|
46
|
+
f.text_element :float , :type_cast => :float , :value => 123.0
|
|
47
|
+
f.text_element :array , :type_cast => :array , :value => [1, 2, 3]
|
|
48
|
+
f.text_element :datetime , :type_cast => :datetime , :value => Time.local(2004, 1, 1, 13, 15, 5)
|
|
49
|
+
f.text_element :timestamp , :type_cast => :timestamp , :value => Time.local(2004, 1, 1, 13, 15, 5)
|
|
50
|
+
f.text_element :time , :type_cast => :time , :value => Time.now
|
|
51
|
+
f.text_element :date , :type_cast => :date , :value => Date.new(2004, 1, 1)
|
|
52
|
+
f.text_element :boolean , :type_cast => :boolean , :value => true
|
|
53
|
+
end
|
|
54
|
+
assert_equal 'abc', form[:string].element_value
|
|
55
|
+
assert_equal 'abc', form[:text].element_value
|
|
56
|
+
assert_equal 123, form[:integer].element_value
|
|
57
|
+
assert_equal 123.0, form[:float].element_value
|
|
58
|
+
assert_equal [1, 2, 3], form[:array].element_value
|
|
59
|
+
assert_equal true, form[:boolean].element_value
|
|
60
|
+
assert_kind_of Time, form[:time].element_value
|
|
61
|
+
assert_equal Date.new(2004, 1, 1), form[:date].element_value
|
|
62
|
+
assert_equal Time.local(2004, 1, 1, 13, 15, 5), form[:datetime].element_value
|
|
63
|
+
assert_equal Time.local(2004, 1, 1, 13, 15, 5), form[:timestamp].element_value
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
def test_cast_to_yaml
|
|
67
|
+
form = ActiveForm::compose :form do |f|
|
|
68
|
+
f.text_element :string, :type_cast => :yaml, :value => "--- 2007-08-14 13:52:00 +02:00\n"
|
|
69
|
+
end
|
|
70
|
+
assert_equal Time.local(2007, 8, 14, 13, 52, 0), form[:string].element_value
|
|
71
|
+
assert_equal "--- 2007-08-14 13:52:00 +02:00\n", form[:string].formatted_value
|
|
72
|
+
|
|
73
|
+
form = ActiveForm::compose :form do |f|
|
|
74
|
+
f.text_element :string, :type_cast => :yaml, :value => Time.local(2007, 8, 14, 13, 52, 0)
|
|
75
|
+
end
|
|
76
|
+
assert_equal Time.local(2007, 8, 14, 13, 52, 0), form[:string].element_value
|
|
77
|
+
assert_equal "--- 2007-08-14 13:52:00 +02:00\n", form[:string].formatted_value
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
def test_set_value
|
|
81
|
+
form = ActiveForm::compose :form do |f|
|
|
82
|
+
f.text_element :integer, :type_cast => :integer
|
|
83
|
+
end
|
|
84
|
+
form[:integer].value = 123
|
|
85
|
+
assert_equal 123, form[:integer].value
|
|
86
|
+
form[:integer].value = '123'
|
|
87
|
+
assert_equal 123, form[:integer].value
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
def test_update_value
|
|
91
|
+
form = ActiveForm::compose :form do |f|
|
|
92
|
+
f.text_element :integer , :type_cast => :integer
|
|
93
|
+
f.text_element :datetime , :type_cast => :datetime
|
|
94
|
+
end
|
|
95
|
+
form.update_values(:datetime => Time.local(2004, 1, 1, 13, 15, 5), :integer => 123)
|
|
96
|
+
|
|
97
|
+
expected = { 'datetime' => Time.local(2004, 1, 1, 13, 15, 5), 'integer' => 123 }
|
|
98
|
+
assert_equal expected, form.export_values
|
|
99
|
+
|
|
100
|
+
assert_equal 123, form[:integer].element_value
|
|
101
|
+
assert_equal '123', form[:integer].formatted_value
|
|
102
|
+
|
|
103
|
+
assert_equal Time.local(2004, 1, 1, 13, 15, 5), form[:datetime].element_value
|
|
104
|
+
assert_equal 'January 01, 2004 13:15', form[:datetime].formatted_value
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
def test_update_from_params
|
|
108
|
+
form = ActiveForm::compose :form do |f|
|
|
109
|
+
f.text_element :integer , :type_cast => :integer
|
|
110
|
+
f.text_element :datetime , :type_cast => :datetime
|
|
111
|
+
end
|
|
112
|
+
form.update_from_params('form' => { 'datetime' => '2004-01-01 13:15:05', 'integer' => '123' })
|
|
113
|
+
|
|
114
|
+
expected = { 'datetime' => Time.local(2004, 1, 1, 13, 15, 5), 'integer' => 123 }
|
|
115
|
+
assert_equal expected, form.export_values
|
|
116
|
+
|
|
117
|
+
assert_equal 123, form[:integer].element_value
|
|
118
|
+
assert_equal '123', form[:integer].formatted_value
|
|
119
|
+
|
|
120
|
+
assert_equal Time.local(2004, 1, 1, 13, 15, 5), form[:datetime].element_value
|
|
121
|
+
assert_equal 'January 01, 2004 13:15', form[:datetime].formatted_value
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
end
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
require 'test_helper'
|
|
2
|
+
|
|
3
|
+
class TestDefinition < Test::Unit::TestCase
|
|
4
|
+
|
|
5
|
+
def test_standard_attributes
|
|
6
|
+
assert ActiveForm::Definition.element_attribute_names.include?(:title)
|
|
7
|
+
assert ActiveForm::Definition.element_attribute_names.include?(:lang)
|
|
8
|
+
assert ActiveForm::Definition.element_attribute_names.include?(:method)
|
|
9
|
+
assert ActiveForm::Definition.element_attribute_names.include?(:enctype)
|
|
10
|
+
assert ActiveForm::Definition.element_attribute_names.include?(:accept)
|
|
11
|
+
assert ActiveForm::Definition.element_attribute_names.include?(:"accept-charset")
|
|
12
|
+
form = ActiveForm::compose :form
|
|
13
|
+
assert form.respond_to?(:title=)
|
|
14
|
+
assert form.respond_to?(:style=)
|
|
15
|
+
assert form.respond_to?(:class=)
|
|
16
|
+
assert form.respond_to?(:lang=)
|
|
17
|
+
assert_equal '#form', form.action
|
|
18
|
+
assert_equal 'post', form.method
|
|
19
|
+
expected = {"action"=>"#form", "method"=>"post"}
|
|
20
|
+
assert_equal expected, form.attributes
|
|
21
|
+
expected = {"class"=>"active_form", "action"=>"#form", "id"=>"form", "method"=>"post"}
|
|
22
|
+
assert_equal expected, form.element_attributes
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def test_set_standard_attributes
|
|
26
|
+
form = ActiveForm::compose :form, :action => '/item/edit', :title => 'My Form', :method => 'get', :enctype => 'multipart/form-data', 'accept-charset' => 'utf-8'
|
|
27
|
+
assert_equal "/item/edit", form.action
|
|
28
|
+
assert_equal 'My Form', form.title
|
|
29
|
+
assert_equal 'get', form.method
|
|
30
|
+
assert_equal 'multipart/form-data', form.enctype
|
|
31
|
+
assert_equal 'utf-8', form.attributes['accept-charset']
|
|
32
|
+
expected = {"title"=>"My Form", "enctype"=>"multipart/form-data", "action"=>"/item/edit", "method"=>"get", "accept-charset"=>"utf-8"}
|
|
33
|
+
assert_equal expected, form.attributes
|
|
34
|
+
expected = {"class"=>"active_form", "title"=>"My Form", "enctype"=>"multipart/form-data", "action"=>"/item/edit", "id"=>"form", "method"=>"get", "accept-charset"=>"utf-8"}
|
|
35
|
+
assert_equal expected, form.element_attributes
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def test_standard_option_flags
|
|
39
|
+
form = ActiveForm::compose :form
|
|
40
|
+
[:frozen, :hidden, :disabled, :required, :multipart].each do |method|
|
|
41
|
+
assert ActiveForm::Definition.element_option_flag_names.include?(method)
|
|
42
|
+
assert form.respond_to?("#{method}")
|
|
43
|
+
assert form.respond_to?("#{method}=")
|
|
44
|
+
assert form.respond_to?("#{method}?")
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def test_multipart_option_flag
|
|
49
|
+
form = ActiveForm::compose :form, :multipart => false
|
|
50
|
+
assert !form.multipart?
|
|
51
|
+
expected = {"class"=>"active_form", "action"=>"#form", "id"=>"form", "method"=>"post"}
|
|
52
|
+
assert_equal expected, form.element_attributes
|
|
53
|
+
form = ActiveForm::compose :form, :multipart => true
|
|
54
|
+
assert form.multipart?
|
|
55
|
+
expected = {"class"=>"active_form", "action"=>"#form", "id"=>"form", "method"=>"post", "enctype"=>"multipart/form-data"}
|
|
56
|
+
assert_equal expected, form.element_attributes
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
def test_render_label
|
|
60
|
+
form = ActiveForm::compose :form, :label => 'My Element'
|
|
61
|
+
assert_equal %|<span class="label">My Element</span>\n|, form.render_label
|
|
62
|
+
form.hidden = true
|
|
63
|
+
assert_equal %|<span class="hidden label">My Element</span>\n|, form.render_label
|
|
64
|
+
form.hidden = false; form.required = true; form.frozen = true
|
|
65
|
+
assert_equal %|<span class="inactive required label">My Element</span>\n|, form.render_label
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
end
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
require 'test_helper'
|
|
2
|
+
|
|
3
|
+
# create ActiveForm::ContactForm < ActiveForm::Definition
|
|
4
|
+
ActiveForm::Definition::create :contact do |f|
|
|
5
|
+
|
|
6
|
+
f.text_element :firstname, :title => 'Your firstname'
|
|
7
|
+
f.text_element :lastname, :title => 'Your familyname'
|
|
8
|
+
f.text_element :country
|
|
9
|
+
f.submit_element
|
|
10
|
+
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
ActiveForm::Definition::create :test do |f|
|
|
14
|
+
f.text_element :firstname
|
|
15
|
+
f.text_element :lastname
|
|
16
|
+
f.submit_element
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
class ActiveForm::CustomDefinition < ActiveForm::Definition
|
|
20
|
+
|
|
21
|
+
def do_something_special
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
# create ActiveForm::CustomForm < ActiveForm::CustomDefinition
|
|
27
|
+
ActiveForm::CustomDefinition::create :custom do |f|
|
|
28
|
+
|
|
29
|
+
f.text_element :firstname
|
|
30
|
+
f.text_element :lastname
|
|
31
|
+
f.submit_element
|
|
32
|
+
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
class TestDefinitionClass < Test::Unit::TestCase
|
|
36
|
+
|
|
37
|
+
def test_create_definition
|
|
38
|
+
definition = ActiveForm::Definition.create :sample do |f|
|
|
39
|
+
f.text_element :firstname
|
|
40
|
+
f.text_element :lastname
|
|
41
|
+
f.submit_element
|
|
42
|
+
end
|
|
43
|
+
assert_equal ActiveForm::SampleForm, definition
|
|
44
|
+
assert_equal ActiveForm::SampleForm, ActiveForm::Definition.get(:sample)
|
|
45
|
+
assert_kind_of ActiveForm::SampleForm, definition.new(:test)
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def test_recreate_created_class
|
|
49
|
+
definition = ActiveForm::Definition.create :contact
|
|
50
|
+
assert_equal nil, definition
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def test_get_and_modify_class
|
|
54
|
+
assert_equal ActiveForm::TestForm, ActiveForm::Definition.modify(:test)
|
|
55
|
+
ActiveForm::Definition.get(:test) do |f|
|
|
56
|
+
|
|
57
|
+
f.define_validation do |form|
|
|
58
|
+
form.errors.add('please give your family name', 'empty') if form[:lastname].blank?
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
end
|
|
62
|
+
form = ActiveForm::Definition.build(:test)
|
|
63
|
+
form.validate
|
|
64
|
+
expected = ["please give your family name"]
|
|
65
|
+
assert_equal expected, form.all_errors.collect(&:message)
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
def test_get_and_build
|
|
69
|
+
assert_equal ActiveForm::ContactForm, ActiveForm::Definition.get(:contact)
|
|
70
|
+
form = ActiveForm::Definition.build(:contact)
|
|
71
|
+
assert_kind_of ActiveForm::ContactForm, form
|
|
72
|
+
assert_equal :contact, form.name
|
|
73
|
+
form = ActiveForm::Definition.build(:contact, :my_form)
|
|
74
|
+
assert_kind_of ActiveForm::ContactForm, form
|
|
75
|
+
assert_equal :my_form, form.name
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
def test_build_with_block
|
|
79
|
+
form = ActiveForm::Definition.build(:contact) do |f|
|
|
80
|
+
f.define_element_at(-2, :textarea, :comment) do |e|
|
|
81
|
+
e.label = 'Your comment'
|
|
82
|
+
end
|
|
83
|
+
end
|
|
84
|
+
assert_kind_of ActiveForm::ContactForm, form
|
|
85
|
+
assert_kind_of ActiveForm::Definition, form
|
|
86
|
+
assert_equal :contact, form.name
|
|
87
|
+
assert_equal [:firstname, :lastname, :country, :comment, :submit], form.collect(&:name)
|
|
88
|
+
assert_equal 'Your comment', form[:comment].label
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
def test_localization_of_prebuild_form
|
|
92
|
+
translations = {
|
|
93
|
+
'firstname_title' => 'Uw voornaam',
|
|
94
|
+
'firstname_label' => 'Voornaam',
|
|
95
|
+
'lastname_label' => 'Achternaam',
|
|
96
|
+
'country_label' => nil
|
|
97
|
+
}
|
|
98
|
+
form = ActiveForm::Definition.build(:contact)
|
|
99
|
+
form.define_localizer { |formname, elemname, key| translations[ [elemname, key].compact.join('_') ] }
|
|
100
|
+
assert form.localized?
|
|
101
|
+
assert_equal 'Uw voornaam', form[:firstname].title
|
|
102
|
+
assert_equal 'Voornaam', form[:firstname].label
|
|
103
|
+
assert_equal 'Achternaam', form[:lastname].label
|
|
104
|
+
assert_equal 'Your familyname', form[:lastname].title
|
|
105
|
+
assert_equal 'Country', form[:country].label
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
def test_subclassed_definition
|
|
109
|
+
assert_equal ActiveForm::CustomForm, ActiveForm::CustomDefinition.get(:custom)
|
|
110
|
+
assert_equal ActiveForm::CustomForm, ActiveForm::Definition.get(:custom)
|
|
111
|
+
form = ActiveForm::Definition.build(:custom)
|
|
112
|
+
assert_kind_of ActiveForm::CustomDefinition, form
|
|
113
|
+
assert_kind_of ActiveForm::CustomForm, form
|
|
114
|
+
assert_kind_of ActiveForm::Definition, form
|
|
115
|
+
assert form.respond_to?(:do_something_special)
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
end
|
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
require 'test_helper'
|
|
2
|
+
|
|
3
|
+
ActiveForm::Element::create :simple_widget do
|
|
4
|
+
|
|
5
|
+
def render_element(builder = create_builder)
|
|
6
|
+
builder.h1(label, { :id => identifier, :class => css })
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
ActiveForm::Element::Input::create :special_widget do
|
|
12
|
+
|
|
13
|
+
def default_attributes
|
|
14
|
+
super.merge(:type => 'special')
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
class TestElementClass < Test::Unit::TestCase
|
|
20
|
+
|
|
21
|
+
def test_create_element_class
|
|
22
|
+
assert_equal ActiveForm::Element::SimpleWidget , ActiveForm::Element::get(:simple_widget)
|
|
23
|
+
elem = ActiveForm::Element::build(:simple_widget, :easy)
|
|
24
|
+
assert_kind_of ActiveForm::Element::SimpleWidget, elem
|
|
25
|
+
assert_kind_of ActiveForm::Element::Base, elem
|
|
26
|
+
expected= %|<h1 class=\"elem_simple_widget\" id=\"easy\">Easy</h1>\n|
|
|
27
|
+
assert_equal expected, elem.to_html
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def test_create_input_element_class
|
|
31
|
+
assert_equal ActiveForm::Element::SpecialWidget, ActiveForm::Element::get(:special_widget)
|
|
32
|
+
elem = ActiveForm::Element::build(:special_widget, :magic)
|
|
33
|
+
assert_kind_of ActiveForm::Element::SpecialWidget, elem
|
|
34
|
+
assert_kind_of ActiveForm::Element::Input, elem
|
|
35
|
+
assert_kind_of ActiveForm::Element::Base, elem
|
|
36
|
+
expected= %|<input class="elem_special_widget" id="magic" name="magic" type="special"/>\n|
|
|
37
|
+
assert_equal expected, elem.to_html
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def test_sample_element_attribute_names
|
|
41
|
+
assert !ActiveForm::Element::Base.element_attribute_names.include?(:foo)
|
|
42
|
+
assert !ActiveForm::Element::Base.element_attribute_names.include?(:bar)
|
|
43
|
+
assert !ActiveForm::Element::Base.element_attribute_names.include?(:baz)
|
|
44
|
+
assert ActiveForm::Element::Sample.element_attribute_names.include?(:foo)
|
|
45
|
+
assert ActiveForm::Element::Sample.element_attribute_names.include?(:bar)
|
|
46
|
+
assert !ActiveForm::Element::Sample.element_attribute_names.include?(:baz)
|
|
47
|
+
assert ActiveForm::Element::ExtendedSample.element_attribute_names.include?(:foo)
|
|
48
|
+
assert ActiveForm::Element::ExtendedSample.element_attribute_names.include?(:bar)
|
|
49
|
+
assert ActiveForm::Element::ExtendedSample.element_attribute_names.include?(:baz)
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def test_sample_attribute_methods
|
|
53
|
+
assert !ActiveForm::Element::Base.new(:test).respond_to?(:foo)
|
|
54
|
+
assert ActiveForm::Element::Sample.new(:test).respond_to?(:foo)
|
|
55
|
+
assert ActiveForm::Element::ExtendedSample.new(:test).respond_to?(:foo)
|
|
56
|
+
assert !ActiveForm::Element::Base.new(:test).respond_to?(:baz)
|
|
57
|
+
assert !ActiveForm::Element::Sample.new(:test).respond_to?(:baz)
|
|
58
|
+
assert ActiveForm::Element::ExtendedSample.new(:test).respond_to?(:baz)
|
|
59
|
+
|
|
60
|
+
assert !ActiveForm::Element::Base.new(:test).respond_to?(:foo=)
|
|
61
|
+
assert ActiveForm::Element::Sample.new(:test).respond_to?(:foo=)
|
|
62
|
+
assert ActiveForm::Element::ExtendedSample.new(:test).respond_to?(:foo=)
|
|
63
|
+
assert !ActiveForm::Element::Base.new(:test).respond_to?(:baz=)
|
|
64
|
+
assert !ActiveForm::Element::Sample.new(:test).respond_to?(:baz=)
|
|
65
|
+
assert ActiveForm::Element::ExtendedSample.new(:test).respond_to?(:baz=)
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
def test_sample_element_html_flag_names
|
|
69
|
+
assert !ActiveForm::Element::Base.element_html_flag_names.include?(:flipped)
|
|
70
|
+
assert !ActiveForm::Element::Base.element_html_flag_names.include?(:flopped)
|
|
71
|
+
assert ActiveForm::Element::Sample.element_html_flag_names.include?(:flipped)
|
|
72
|
+
assert !ActiveForm::Element::Sample.element_html_flag_names.include?(:flopped)
|
|
73
|
+
assert ActiveForm::Element::ExtendedSample.element_html_flag_names.include?(:flipped)
|
|
74
|
+
assert ActiveForm::Element::ExtendedSample.element_html_flag_names.include?(:flopped)
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
def test_sample_html_flag_methods
|
|
78
|
+
assert !ActiveForm::Element::Base.new(:test).respond_to?(:flipped)
|
|
79
|
+
assert !ActiveForm::Element::Base.new(:test).respond_to?(:flopped)
|
|
80
|
+
assert !ActiveForm::Element::Base.new(:test).respond_to?(:flipped=)
|
|
81
|
+
assert !ActiveForm::Element::Base.new(:test).respond_to?(:flopped=)
|
|
82
|
+
assert !ActiveForm::Element::Base.new(:test).respond_to?(:flipped?)
|
|
83
|
+
assert !ActiveForm::Element::Base.new(:test).respond_to?(:flopped?)
|
|
84
|
+
assert ActiveForm::Element::Sample.new(:test).respond_to?(:flipped)
|
|
85
|
+
assert !ActiveForm::Element::Sample.new(:test).respond_to?(:flopped)
|
|
86
|
+
assert ActiveForm::Element::Sample.new(:test).respond_to?(:flipped=)
|
|
87
|
+
assert !ActiveForm::Element::Sample.new(:test).respond_to?(:flopped=)
|
|
88
|
+
assert ActiveForm::Element::Sample.new(:test).respond_to?(:flipped?)
|
|
89
|
+
assert !ActiveForm::Element::Sample.new(:test).respond_to?(:flopped?)
|
|
90
|
+
assert ActiveForm::Element::ExtendedSample.new(:test).respond_to?(:flipped)
|
|
91
|
+
assert ActiveForm::Element::ExtendedSample.new(:test).respond_to?(:flopped)
|
|
92
|
+
assert ActiveForm::Element::ExtendedSample.new(:test).respond_to?(:flipped=)
|
|
93
|
+
assert ActiveForm::Element::ExtendedSample.new(:test).respond_to?(:flopped=)
|
|
94
|
+
assert ActiveForm::Element::ExtendedSample.new(:test).respond_to?(:flipped?)
|
|
95
|
+
assert ActiveForm::Element::ExtendedSample.new(:test).respond_to?(:flopped?)
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
def test_sample_option_flag_methods
|
|
99
|
+
assert !ActiveForm::Element::Base.new(:test).respond_to?(:closed)
|
|
100
|
+
assert ActiveForm::Element::Sample.new(:test).respond_to?(:closed)
|
|
101
|
+
assert ActiveForm::Element::Sample.new(:test).respond_to?(:closed=)
|
|
102
|
+
assert ActiveForm::Element::Sample.new(:test).respond_to?(:closed?)
|
|
103
|
+
assert ActiveForm::Element::ExtendedSample.new(:test).respond_to?(:closed)
|
|
104
|
+
assert ActiveForm::Element::ExtendedSample.new(:test).respond_to?(:closed=)
|
|
105
|
+
assert ActiveForm::Element::ExtendedSample.new(:test).respond_to?(:closed?)
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
def test_attributes
|
|
109
|
+
element = ActiveForm::Element::Sample.new(:test)
|
|
110
|
+
element.foo = 'one'
|
|
111
|
+
element.bar = 'two'
|
|
112
|
+
assert_equal 'one', element.foo
|
|
113
|
+
assert_equal 'two', element.bar
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
def test_element_attributes
|
|
117
|
+
element = ActiveForm::Element::ExtendedSample.new(:test)
|
|
118
|
+
element.attributes[:custom] = 'special' #non-standard
|
|
119
|
+
element.foo = 'one'
|
|
120
|
+
element.flipped = true
|
|
121
|
+
element.closed = true
|
|
122
|
+
assert element.closed?
|
|
123
|
+
expected = { "flipped"=>"flipped", "name"=>"test", "class"=>"elem_extended_sample", "foo"=>"one", "id"=>"test", "custom"=>"special" }
|
|
124
|
+
assert_equal expected, element.element_attributes
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
def test_html_flags
|
|
128
|
+
element = ActiveForm::Element::ExtendedSample.new(:test)
|
|
129
|
+
element.flipped = true
|
|
130
|
+
element.flopped = 'yes'
|
|
131
|
+
assert element.flipped?
|
|
132
|
+
assert element.flopped?
|
|
133
|
+
element.flipped = false
|
|
134
|
+
assert !element.flipped?
|
|
135
|
+
assert !element.rotated?
|
|
136
|
+
element.rotated = 'true'
|
|
137
|
+
assert element.rotated?
|
|
138
|
+
end
|
|
139
|
+
|
|
140
|
+
def test_default_css_class
|
|
141
|
+
assert_equal "active_form", ActiveForm::compose(:test).default_css_class
|
|
142
|
+
assert_equal "elem_base", ActiveForm::Element::Base.new(:test).default_css_class
|
|
143
|
+
assert_equal "active_section", ActiveForm::Element::Section.new(:test).default_css_class
|
|
144
|
+
end
|
|
145
|
+
|
|
146
|
+
def test_css_class_attribute
|
|
147
|
+
element = ActiveForm::Element::ExtendedSample.new(:test)
|
|
148
|
+
element.css_class = 'one two three'
|
|
149
|
+
css_class_full = 'one two three elem_extended_sample'
|
|
150
|
+
assert_equal ['one', 'two', 'three'], element.css_class
|
|
151
|
+
assert_equal css_class_full, element.css
|
|
152
|
+
assert_equal css_class_full, element.element_class
|
|
153
|
+
element.css_class += 'four'
|
|
154
|
+
assert_equal ['one', 'two', 'three', 'four'], element.css_class
|
|
155
|
+
element.css_class -= 'two'
|
|
156
|
+
assert_equal ['one', 'three', 'four'], element.css_class
|
|
157
|
+
element.css_class << 'five six'
|
|
158
|
+
assert_equal 'one three four five six', element.css_class.to_s
|
|
159
|
+
element.css_class = 'seven'
|
|
160
|
+
assert_equal 'seven', element.css_class.to_s
|
|
161
|
+
end
|
|
162
|
+
|
|
163
|
+
def test_css_style_attribute
|
|
164
|
+
element = ActiveForm::Element::ExtendedSample.new(:test)
|
|
165
|
+
element.css_style = 'background: red'
|
|
166
|
+
assert_equal 'background: red', element.css_style.to_s
|
|
167
|
+
assert_equal element.css_style.to_s, element.style
|
|
168
|
+
element.css_style << 'padding: 20px'
|
|
169
|
+
assert_equal 'background: red;padding: 20px', element.css_style.to_s
|
|
170
|
+
element.css_style = nil
|
|
171
|
+
assert_equal '', element.css_style.to_s
|
|
172
|
+
element.css_style = ['color: blue', 'background: black']
|
|
173
|
+
assert_equal 'color: blue;background: black', element.css_style.to_s
|
|
174
|
+
element.css_style -= 'color: blue'
|
|
175
|
+
assert_equal 'background: black', element.css_style.to_s
|
|
176
|
+
assert_equal element.css_style.to_s, element.style
|
|
177
|
+
assert_equal element.css_style.to_s, element.element_style
|
|
178
|
+
expected = {"name"=>"test", "class"=>"elem_extended_sample", "id"=>"test", "style"=>"background: black"}
|
|
179
|
+
assert_equal expected, element.element_attributes
|
|
180
|
+
end
|
|
181
|
+
|
|
182
|
+
def test_skip_css_class
|
|
183
|
+
element = ActiveForm::Element::ExtendedSample.new(:test)
|
|
184
|
+
expected = {"name"=>"test", "class"=>"elem_extended_sample", "id"=>"test"}
|
|
185
|
+
assert_equal expected, element.element_attributes
|
|
186
|
+
element.skip_css_class = true
|
|
187
|
+
expected = {"name"=>"test", "class"=>"elem_extended_sample", "id"=>"test"}
|
|
188
|
+
assert_equal expected, element.element_attributes
|
|
189
|
+
end
|
|
190
|
+
|
|
191
|
+
def test_skip_css_style
|
|
192
|
+
element = ActiveForm::Element::ExtendedSample.new(:test)
|
|
193
|
+
element.css_style = 'background: red'
|
|
194
|
+
expected = {"name"=>"test", "class"=>"elem_extended_sample", "id"=>"test", "style"=>"background: red"}
|
|
195
|
+
assert_equal expected, element.element_attributes
|
|
196
|
+
element.skip_css_style = true
|
|
197
|
+
expected = {"name"=>"test", "class"=>"elem_extended_sample", "id"=>"test"}
|
|
198
|
+
assert_equal expected, element.element_attributes
|
|
199
|
+
end
|
|
200
|
+
|
|
201
|
+
end
|