active_form 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (184) hide show
  1. data.tar.gz.sig +2 -0
  2. data/History.txt +4 -0
  3. data/License.txt +20 -0
  4. data/MIT-LICENSE +19 -0
  5. data/Manifest.txt +181 -0
  6. data/README.txt +1 -0
  7. data/Rakefile +4 -0
  8. data/config/hoe.rb +71 -0
  9. data/config/requirements.rb +17 -0
  10. data/init.rb +5 -0
  11. data/lib/active_form.rb +86 -0
  12. data/lib/active_form/core_extensions.rb +179 -0
  13. data/lib/active_form/definition.rb +72 -0
  14. data/lib/active_form/element.rb +50 -0
  15. data/lib/active_form/elements/base.rb +67 -0
  16. data/lib/active_form/elements/builder.rb +103 -0
  17. data/lib/active_form/elements/button.rb +15 -0
  18. data/lib/active_form/elements/checkbox.rb +18 -0
  19. data/lib/active_form/elements/file.rb +15 -0
  20. data/lib/active_form/elements/hidden.rb +9 -0
  21. data/lib/active_form/elements/image.rb +7 -0
  22. data/lib/active_form/elements/input.rb +23 -0
  23. data/lib/active_form/elements/password.rb +12 -0
  24. data/lib/active_form/elements/radio.rb +18 -0
  25. data/lib/active_form/elements/reset.rb +15 -0
  26. data/lib/active_form/elements/section.rb +37 -0
  27. data/lib/active_form/elements/select.rb +42 -0
  28. data/lib/active_form/elements/submit.rb +19 -0
  29. data/lib/active_form/elements/text.rb +9 -0
  30. data/lib/active_form/elements/textarea.rb +18 -0
  31. data/lib/active_form/errors.rb +73 -0
  32. data/lib/active_form/facets/checkbox_group.rb +11 -0
  33. data/lib/active_form/facets/collection_input.rb +96 -0
  34. data/lib/active_form/facets/radio_group.rb +11 -0
  35. data/lib/active_form/facets/select_date.rb +10 -0
  36. data/lib/active_form/facets/select_datetime.rb +10 -0
  37. data/lib/active_form/facets/select_day.rb +17 -0
  38. data/lib/active_form/facets/select_from_model.rb +60 -0
  39. data/lib/active_form/facets/select_hour.rb +17 -0
  40. data/lib/active_form/facets/select_minute.rb +17 -0
  41. data/lib/active_form/facets/select_month.rb +46 -0
  42. data/lib/active_form/facets/select_numeric_range.rb +59 -0
  43. data/lib/active_form/facets/select_second.rb +17 -0
  44. data/lib/active_form/facets/select_time.rb +10 -0
  45. data/lib/active_form/facets/select_timebased.rb +145 -0
  46. data/lib/active_form/facets/select_weekday.rb +46 -0
  47. data/lib/active_form/facets/select_year.rb +24 -0
  48. data/lib/active_form/mixins/attribute_methods.rb +33 -0
  49. data/lib/active_form/mixins/casting.rb +152 -0
  50. data/lib/active_form/mixins/collection_element_methods.rb +204 -0
  51. data/lib/active_form/mixins/common_methods.rb +350 -0
  52. data/lib/active_form/mixins/container_methods.rb +417 -0
  53. data/lib/active_form/mixins/css_methods.rb +70 -0
  54. data/lib/active_form/mixins/element_methods.rb +314 -0
  55. data/lib/active_form/mixins/javascript_methods.rb +99 -0
  56. data/lib/active_form/mixins/loader_methods.rb +72 -0
  57. data/lib/active_form/mixins/option_element_methods.rb +61 -0
  58. data/lib/active_form/mixins/validation_methods.rb +253 -0
  59. data/lib/active_form/validator.rb +47 -0
  60. data/lib/active_form/validators/alpha.rb +9 -0
  61. data/lib/active_form/validators/alphanum.rb +9 -0
  62. data/lib/active_form/validators/base.rb +132 -0
  63. data/lib/active_form/validators/digits.rb +9 -0
  64. data/lib/active_form/validators/email.rb +29 -0
  65. data/lib/active_form/validators/format.rb +15 -0
  66. data/lib/active_form/validators/length_range.rb +24 -0
  67. data/lib/active_form/validators/number.rb +9 -0
  68. data/lib/active_form/validators/option_count.rb +24 -0
  69. data/lib/active_form/validators/proc.rb +22 -0
  70. data/lib/active_form/validators/required.rb +9 -0
  71. data/lib/active_form/validators/set.rb +21 -0
  72. data/lib/active_form/validators/time_range.rb +30 -0
  73. data/lib/active_form/validators/uri.rb +54 -0
  74. data/lib/active_form/version.rb +9 -0
  75. data/lib/active_form/views/fieldsets.rb +34 -0
  76. data/lib/active_form/views/plain.rb +32 -0
  77. data/lib/active_form/views/tables.rb +28 -0
  78. data/lib/active_form/widget.rb +43 -0
  79. data/lib/active_form/widgets/base.rb +28 -0
  80. data/lib/loob/uri_validator.rb +140 -0
  81. data/lib/rails/acts_as_dropdown/MIT-LICENSE +20 -0
  82. data/lib/rails/acts_as_dropdown/acts_as_dropdown.rb +119 -0
  83. data/lib/rails/acts_as_dropdown/dropdown.rb +27 -0
  84. data/lib/rails/controller_helper.rb +19 -0
  85. data/lib/rails/model/loader.rb +206 -0
  86. data/lib/rails/view_helper.rb +20 -0
  87. data/samples/html/css/style.css +175 -0
  88. data/samples/html/js/effects.js +958 -0
  89. data/samples/html/js/prototype.js +2006 -0
  90. data/samples/html/js/validation.js +228 -0
  91. data/samples/html/plain_view.html +77 -0
  92. data/samples/html/sample001.html +158 -0
  93. data/samples/html/sample002.html +76 -0
  94. data/samples/html/sample003.html +34 -0
  95. data/samples/layouts/default.rhtml +18 -0
  96. data/samples/layouts/plain.rhtml +21 -0
  97. data/samples/layouts/sample003.rhtml +25 -0
  98. data/samples/plain_view.rb +58 -0
  99. data/samples/sample001.rb +111 -0
  100. data/samples/sample002.rb +92 -0
  101. data/samples/sample003.rb +30 -0
  102. data/script/destroy +14 -0
  103. data/script/generate +14 -0
  104. data/script/txt2html +74 -0
  105. data/setup.rb +1585 -0
  106. data/tasks/deployment.rake +34 -0
  107. data/tasks/environment.rake +7 -0
  108. data/tasks/website.rake +17 -0
  109. data/test/elements/test_base_element.rb +159 -0
  110. data/test/elements/test_builder_element.rb +81 -0
  111. data/test/elements/test_button_element.rb +12 -0
  112. data/test/elements/test_checkbox_element.rb +233 -0
  113. data/test/elements/test_file_element.rb +20 -0
  114. data/test/elements/test_hidden_element.rb +11 -0
  115. data/test/elements/test_image_element.rb +11 -0
  116. data/test/elements/test_input_element.rb +39 -0
  117. data/test/elements/test_password_element.rb +16 -0
  118. data/test/elements/test_radio_element.rb +197 -0
  119. data/test/elements/test_reset_element.rb +12 -0
  120. data/test/elements/test_section_element.rb +162 -0
  121. data/test/elements/test_select_element.rb +364 -0
  122. data/test/elements/test_submit_element.rb +12 -0
  123. data/test/elements/test_text_element.rb +91 -0
  124. data/test/elements/test_textarea_element.rb +23 -0
  125. data/test/facets/test_checkbox_group_element.rb +388 -0
  126. data/test/facets/test_radio_group_element.rb +312 -0
  127. data/test/facets/test_select_date_element.rb +211 -0
  128. data/test/facets/test_select_datetime_element.rb +56 -0
  129. data/test/facets/test_select_day_element.rb +37 -0
  130. data/test/facets/test_select_from_model_element.rb +86 -0
  131. data/test/facets/test_select_hour_element.rb +37 -0
  132. data/test/facets/test_select_minute_element.rb +52 -0
  133. data/test/facets/test_select_month_element.rb +79 -0
  134. data/test/facets/test_select_numeric_range_element.rb +14 -0
  135. data/test/facets/test_select_second_element.rb +48 -0
  136. data/test/facets/test_select_time_element.rb +148 -0
  137. data/test/facets/test_select_weekday_element.rb +71 -0
  138. data/test/facets/test_select_year_element.rb +73 -0
  139. data/test/fixtures/author.rb +11 -0
  140. data/test/fixtures/authors.yml +0 -0
  141. data/test/fixtures/book.rb +14 -0
  142. data/test/fixtures/books.yml +8 -0
  143. data/test/fixtures/categories.yml +0 -0
  144. data/test/fixtures/categorization.rb +2 -0
  145. data/test/fixtures/categorizations.yml +0 -0
  146. data/test/fixtures/category.rb +8 -0
  147. data/test/fixtures/publisher.rb +5 -0
  148. data/test/fixtures/publishers.yml +10 -0
  149. data/test/fixtures/schema.rb +43 -0
  150. data/test/rails/test_model_autodefinition.rb +121 -0
  151. data/test/rails/test_model_loader.rb +61 -0
  152. data/test/resources/elements/chunky.rb +11 -0
  153. data/test/resources/forms/demo.rb +5 -0
  154. data/test/resources/models/book.rb +8 -0
  155. data/test/resources/models/register_publisher.rb +5 -0
  156. data/test/resources/sections/demo.rb +6 -0
  157. data/test/resources/sections/foo.rb +6 -0
  158. data/test/resources/validators/foo.rb +9 -0
  159. data/test/resources/widgets/custom.rb +13 -0
  160. data/test/test_active_form.rb +1050 -0
  161. data/test/test_casting.rb +124 -0
  162. data/test/test_definition.rb +68 -0
  163. data/test/test_definition_class.rb +118 -0
  164. data/test/test_element_class.rb +201 -0
  165. data/test/test_helper.rb +74 -0
  166. data/test/test_javascript.rb +234 -0
  167. data/test/test_load_definition.rb +68 -0
  168. data/test/test_load_element.rb +35 -0
  169. data/test/test_load_section_element.rb +43 -0
  170. data/test/test_load_validator.rb +31 -0
  171. data/test/test_load_widget.rb +93 -0
  172. data/test/test_validation.rb +722 -0
  173. data/test/validators/test_validates_as_alpha.rb +26 -0
  174. data/test/validators/test_validates_as_alphanum.rb +26 -0
  175. data/test/validators/test_validates_as_digits.rb +26 -0
  176. data/test/validators/test_validates_as_email.rb +29 -0
  177. data/test/validators/test_validates_as_number.rb +26 -0
  178. data/test/validators/test_validates_as_uri.rb +128 -0
  179. data/test/validators/test_validates_with_format.rb +26 -0
  180. data/test/validators/test_validates_within_length_range.rb +46 -0
  181. data/test/validators/test_validates_within_set.rb +46 -0
  182. data/test/validators/test_validates_within_time_range.rb +53 -0
  183. metadata +307 -0
  184. metadata.gz.sig +4 -0
@@ -0,0 +1,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