active_form 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
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