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,74 @@
1
+ basedir = File.expand_path(File.dirname(__FILE__))
2
+
3
+ require 'rubygems'
4
+ gem 'activerecord'
5
+ require 'activerecord'
6
+ require 'test/unit'
7
+ require 'active_record/fixtures'
8
+
9
+ require basedir + '/../lib/active_form'
10
+ require basedir + '/../lib/rails/support'
11
+
12
+ ActiveRecord::Base.configurations['test'] = { :adapter => 'sqlite3', :database => ':memory:' }
13
+ ActiveRecord::Base.establish_connection 'test'
14
+ ActiveRecord::Base.default_timezone = :utc
15
+ load basedir + "/fixtures/schema.rb"
16
+
17
+ Test::Unit::TestCase::fixture_path = basedir + "/fixtures/"
18
+ Test::Unit::TestCase::use_transactional_fixtures = true
19
+ Test::Unit::TestCase::use_instantiated_fixtures = false
20
+ $:.unshift Test::Unit::TestCase::fixture_path
21
+
22
+ class ActiveForm::Element::Sample < ActiveForm::Element::Base
23
+
24
+ define_attributes :foo, :bar
25
+ define_html_flags :flipped
26
+ define_option_flags :closed
27
+
28
+ end
29
+
30
+ class ActiveForm::Element::ExtendedSample < ActiveForm::Element::Sample
31
+
32
+ define_attributes :baz
33
+ define_html_flags :flopped
34
+
35
+ end
36
+
37
+ class ActiveForm::Element::ExtendedSample < ActiveForm::Element::Sample
38
+
39
+ define_html_flags :rotated
40
+
41
+ end
42
+
43
+ class CustomValueObject
44
+
45
+ attr_accessor :value
46
+
47
+ def initialize
48
+ @value = HashWithIndifferentAccess.new
49
+ end
50
+
51
+ def bound_value(*args)
52
+ @value[args[0]] = args[1] if args.length == 2
53
+ @value[args[0]]
54
+ end
55
+
56
+ def bound_value?(key)
57
+ @value.key?(key)
58
+ end
59
+
60
+ end
61
+
62
+ class ActiveForm::Validator::Sample < ActiveForm::Validator::Base
63
+
64
+ default_message "%s: value needs to be identical to 'sample'"
65
+
66
+ javascript_validation("value needs to be identical to 'sample'") do |code|
67
+ code << %`return Validation.get('IsEmpty').test(v) || /^sample$/i.test(v);`
68
+ end
69
+
70
+ def validate
71
+ element.errors << advice[code] unless value =~ /^sample$/i
72
+ end
73
+
74
+ end
@@ -0,0 +1,234 @@
1
+ require 'test_helper'
2
+
3
+ class TestJavascript < Test::Unit::TestCase
4
+
5
+ def test_javascript_attribute_append
6
+ js = JavascriptAttribute.new
7
+ js << 'one' << 'two; three'
8
+ assert_equal ["one", "two", "three"], js
9
+ js << ["four", "five", "six"]
10
+ assert_equal ["one", "two", "three", "four", "five", "six"], js
11
+ end
12
+
13
+ def test_javascript_attribute_write
14
+ js = JavascriptAttribute.new
15
+ js.write do |s|
16
+ s << "window.console.log('first message')"
17
+ s << "window.console.log('second message')"
18
+ end
19
+ assert_equal "window.console.log('first message');window.console.log('second message')", js.to_s
20
+ end
21
+
22
+ def test_javascript_attribute_replace
23
+ js = JavascriptAttribute.new
24
+ js << 'one' << 'two; three'
25
+ assert_equal ["one", "two", "three"], js
26
+ assert_equal 'one;two;three', js.to_s
27
+ assert_equal 'one;two;three', js.join
28
+ js.replace('four;five;six')
29
+ assert_equal ["four", "five", "six"], js
30
+ js.replace(["one", "two", "three"])
31
+ assert_equal ["one", "two", "three"], js
32
+ assert_equal 'one;two;three', js.to_s
33
+ js.replace("four", "five", "six")
34
+ assert_equal ["four", "five", "six"], js
35
+ end
36
+
37
+ def test_javascript_attribute_add_and_remove
38
+ js = JavascriptAttribute.new
39
+ js += 'one'
40
+ assert_equal ["one"], js
41
+ js += 'two; three'
42
+ assert_equal ["one", "two", "three"], js
43
+ js += ['four', 'five', 'six']
44
+ assert_equal ["one", "two", "three", "four", "five", "six"], js
45
+ js -= 'two'
46
+ assert_equal ["one", "three", "four", "five", "six"], js
47
+ js -= 'one; three'
48
+ assert_equal ["four", "five", "six"], js
49
+ js -= ["four", "six"]
50
+ assert_equal ["five"], js
51
+ end
52
+
53
+ def test_javascript_attribute
54
+ element = ActiveForm::Element::ExtendedSample.new(:test)
55
+ element.javascript = "window.console.log('created element')"
56
+ element.javascript << "window.console.info('more info')"
57
+ element.javascript += "return false"
58
+ assert_equal "window.console.log('created element');window.console.info('more info');return false", element.javascript.to_s
59
+ end
60
+
61
+ def test_javascript_handler_methods
62
+ element = ActiveForm::Element::ExtendedSample.new(:test)
63
+ ActiveForm::Mixins::JavascriptMethods::EVENTS.each do |event|
64
+ assert element.respond_to?("#{event}")
65
+ assert element.respond_to?("#{event}=")
66
+ assert element.respond_to?("#{event}_event")
67
+ assert element.respond_to?("#{event}?")
68
+ end
69
+ end
70
+
71
+ def test_javascript_code_for_element
72
+ element = ActiveForm::Element::ExtendedSample.new(:test)
73
+ element.javascript = "window.console.log('created element')"
74
+ assert_equal 1, element.javascript.length
75
+ assert_equal "window.console.log('created element')", element.javascript.to_s
76
+ expected = %|var fextended_sample_test=$('test');if(fextended_sample_test){
77
+ window.console.log('created element');
78
+ }|
79
+ assert_equal expected, element.element_javascript
80
+ end
81
+
82
+ def test_javascript_inline_event_code
83
+ element = ActiveForm::Element::ExtendedSample.new(:test)
84
+ element.onclick = "alert('you clicked me!')"
85
+ element.onfocus_event do |identifier|
86
+ # get RJS-like functionality in here!
87
+ assert_equal element.identifier, identifier
88
+ "window.console.log('created #{identifier}')"
89
+ end
90
+ assert element.javascript?
91
+ assert element.onclick?
92
+ assert element.onfocus?
93
+ assert !element.onchange?
94
+ assert_equal "alert('you clicked me!')", element.onclick
95
+ assert_equal %|onclick="alert('you clicked me!')"|, element.inline_onclick
96
+ assert_equal "window.console.log('created test')", element.onfocus
97
+ assert_equal %|onfocus="window.console.log('created test')"|, element.inline_onfocus
98
+ assert_equal %|onclick="alert('you clicked me!')" onfocus="window.console.log('created test')"|, element.inline_javascript
99
+ end
100
+
101
+ def test_javascript_event_code_for_element
102
+ element = ActiveForm::Element::ExtendedSample.new(:test)
103
+ element.onclick = "alert('you clicked me!')"
104
+ element.onfocus_event do |identifier|
105
+ "window.console.log('created #{identifier}')"
106
+ end
107
+ assert_equal [], element.javascript
108
+ assert_equal nil, element.javascript(true)
109
+ expected = %|var fextended_sample_test=$('test');if(fextended_sample_test){
110
+ Event.observe(fextended_sample_test,'click',function(ev){ alert('you clicked me!'); });
111
+ Event.observe(fextended_sample_test,'focus',function(ev){ window.console.log('created test'); });
112
+ }|
113
+ assert_equal expected, element.element_javascript
114
+ expected = %|<script type="text/javascript" charset="utf-8">//<![CDATA[
115
+ var fextended_sample_test=$('test');if(fextended_sample_test){
116
+ Event.observe(fextended_sample_test,'click',function(ev){ alert('you clicked me!'); });
117
+ Event.observe(fextended_sample_test,'focus',function(ev){ window.console.log('created test'); });
118
+ }
119
+ //]]>
120
+ </script>\n|
121
+ assert_equal expected, element.element_javascript(true)
122
+ end
123
+
124
+ def test_javascript_combined_code_for_element
125
+ element = ActiveForm::Element::ExtendedSample.new(:test)
126
+ element.javascript = "window.console.log('created element')"
127
+ element.onfocus = "window.console.log('focus on test element')"
128
+ assert_equal "window.console.log('created element')", element.javascript.to_s
129
+ expected = %|var fextended_sample_test=$('test');if(fextended_sample_test){
130
+ window.console.log('created element');
131
+ Event.observe(fextended_sample_test,'focus',function(ev){ window.console.log('focus on test element'); });
132
+ }|
133
+ assert_equal expected, element.element_javascript
134
+ expected = %|<script type="text/javascript" charset="utf-8">//<![CDATA[
135
+ var fextended_sample_test=$('test');if(fextended_sample_test){
136
+ window.console.log('created element');
137
+ Event.observe(fextended_sample_test,'focus',function(ev){ window.console.log('focus on test element'); });
138
+ }
139
+ //]]>
140
+ </script>\n|
141
+ assert_equal expected, element.element_javascript(true)
142
+ end
143
+
144
+ def test_javascript_code_for_container
145
+ form = ActiveForm::compose :form do |f|
146
+ f.javascript += "window.console.log('created form')"
147
+ f.javascript += "alert('testing')"
148
+ f.onsubmit = "Var.serialize(this)"
149
+ f.onreset = "window.console.log('reset form')"
150
+ f.text_element :elem_a
151
+ f.text_element :elem_b
152
+ end
153
+ assert_equal "window.console.log('created form');alert('testing')", form.javascript.to_s
154
+ expected = %|var fform_form=$('form');if(fform_form){
155
+ window.console.log('created form');alert('testing');
156
+ Event.observe(fform_form,'reset',function(ev){ window.console.log('reset form'); });
157
+ Event.observe(fform_form,'submit',function(ev){ Var.serialize(this); });
158
+ }|
159
+ assert_equal expected, form.element_javascript
160
+ end
161
+
162
+ def test_javascript_code_for_container_and_elements
163
+ form = ActiveForm::compose :form do |f|
164
+ f.javascript += "window.console.log('created form')"
165
+ f.javascript += "alert('testing')"
166
+ f.onsubmit = "Var.serialize(this)"
167
+ f.onreset = "window.console.log('reset form')"
168
+ f.text_element :elem_a do |e|
169
+ e.onfocus = "window.console.log('focussed on elem_a')"
170
+ end
171
+ f.text_element :elem_b do |e|
172
+ e.onfocus = "window.console.log('focussed on elem_b')"
173
+ end
174
+ end
175
+ assert_equal "window.console.log('created form');alert('testing')", form.javascript.to_s
176
+ expected = %|var fform_form=$('form');if(fform_form){
177
+ window.console.log('created form');alert('testing');
178
+ Event.observe(fform_form,'reset',function(ev){ window.console.log('reset form'); });
179
+ Event.observe(fform_form,'submit',function(ev){ Var.serialize(this); });
180
+ var ftext_form_elem_a=$('form_elem_a');if(ftext_form_elem_a){
181
+ Event.observe(ftext_form_elem_a,'focus',function(ev){ window.console.log('focussed on elem_a'); });
182
+ }
183
+ var ftext_form_elem_b=$('form_elem_b');if(ftext_form_elem_b){
184
+ Event.observe(ftext_form_elem_b,'focus',function(ev){ window.console.log('focussed on elem_b'); });
185
+ }
186
+ }|
187
+ assert_equal expected, form.element_javascript
188
+ end
189
+
190
+ def test_javascript_code_for_nested_elements
191
+ form = ActiveForm::compose :form do |f|
192
+ f.javascript = "loadForm(#{f.javascript_var})"
193
+ f.onsubmit = "window.console.log('form')"
194
+ f.section :section do |s|
195
+ s.onmouseover = "window.console.log('section')"
196
+ s.text_element :element do |e|
197
+ e.onblur = "window.console.log('element')"
198
+ end
199
+ s.section :nested do |n|
200
+ n.javascript = "window.console.log('nested section')"
201
+ n.text_element :nested_element do |ne|
202
+ ne.onfocus = "window.console.log('nested element')"
203
+ end
204
+ end
205
+ end
206
+ end
207
+ expected = %|var fform_form=$('form');if(fform_form){
208
+ loadForm(fform_form);
209
+ Event.observe(fform_form,'submit',function(ev){ window.console.log('form'); });
210
+ var fsection_form_section=$('form_section');if(fsection_form_section){
211
+ Event.observe(fsection_form_section,'mouseover',function(ev){ window.console.log('section'); });
212
+ var ftext_form_section_element=$('form_section_element');if(ftext_form_section_element){
213
+ Event.observe(ftext_form_section_element,'blur',function(ev){ window.console.log('element'); });
214
+ }
215
+ var fsection_form_section_nested=$('form_section_nested');if(fsection_form_section_nested){
216
+ window.console.log('nested section');
217
+ var ftext_form_section_nested_nested_element=$('form_section_nested_nested_element');if(ftext_form_section_nested_nested_element){
218
+ Event.observe(ftext_form_section_nested_nested_element,'focus',function(ev){ window.console.log('nested element'); });
219
+ }
220
+ }
221
+ }
222
+ }|
223
+ assert_equal expected, form.element_javascript
224
+ expected = %|var fsection_form_section_nested=$('form_section_nested');if(fsection_form_section_nested){
225
+ window.console.log('nested section');
226
+ var ftext_form_section_nested_nested_element=$('form_section_nested_nested_element');if(ftext_form_section_nested_nested_element){
227
+ Event.observe(ftext_form_section_nested_nested_element,'focus',function(ev){ window.console.log('nested element'); });
228
+ }
229
+ }|
230
+ assert_equal expected, form[:section][:nested].element_javascript
231
+ assert_equal %|onfocus="window.console.log('nested element')"|, form[:section][:nested][:nested_element].inline_javascript
232
+ end
233
+
234
+ end
@@ -0,0 +1,68 @@
1
+ require 'test_helper'
2
+
3
+ class TestLoadDefinition < Test::Unit::TestCase
4
+
5
+ def setup
6
+ ActiveForm::Definition.load_paths << File.join(File.dirname(__FILE__), 'resources', 'forms')
7
+ end
8
+
9
+ def test_load_paths
10
+ assert_equal 1, ActiveForm::Definition.load_paths.length
11
+ assert File.directory?(ActiveForm::Definition.load_paths.first)
12
+ end
13
+
14
+ def test_load_and_build
15
+ klass = ActiveForm::Definition::get(:demo)
16
+ assert_equal ActiveForm::DemoForm, klass
17
+ form = ActiveForm::Definition::build(:demo)
18
+ assert_kind_of ActiveForm::DemoForm, form
19
+ end
20
+
21
+ def test_load_and_build_shortcuts
22
+ klass = ActiveForm::get(:demo)
23
+ assert_equal ActiveForm::DemoForm, klass
24
+ form = ActiveForm::build(:demo)
25
+ assert_kind_of ActiveForm::DemoForm, form
26
+ end
27
+
28
+ def test_build_to_html
29
+ expected = %|<form action="#myform" class="active_form" id="myform" method="post">
30
+ <input class="elem_text" id="myform_firstname" name="myform[firstname]" size="30" type="text"/>
31
+ <input class="elem_text" id="myform_lastname" name="myform[lastname]" size="30" type="text"/>
32
+ <input class="elem_submit" id="myform_submit" name="myform[submit]" type="submit" value="Submit"/>
33
+ </form>\n|
34
+ assert_equal expected, ActiveForm::Definition::build(:demo, :myform).to_html
35
+ end
36
+
37
+ def test_append_definition_to_form
38
+ form = ActiveForm::compose :form do |f|
39
+ f << '<h3>One</h3>'
40
+ f << ActiveForm::Definition::build(:demo, :one)
41
+ f << '<h3>Two</h3>'
42
+ f << ActiveForm::Definition::build(:demo, :two)
43
+ f << '<hr />'
44
+ f.remove_elements_of_type(:submit)
45
+ f.submit_element
46
+ end
47
+ expected = %|<form action="#form" class="active_form" id="form" method="post">
48
+ <h3>One</h3>
49
+ <input class="elem_text" id="form_one_firstname" name="form[one][firstname]" size="30" type="text"/>
50
+ <input class="elem_text" id="form_one_lastname" name="form[one][lastname]" size="30" type="text"/>
51
+ <h3>Two</h3>
52
+ <input class="elem_text" id="form_two_firstname" name="form[two][firstname]" size="30" type="text"/>
53
+ <input class="elem_text" id="form_two_lastname" name="form[two][lastname]" size="30" type="text"/>
54
+ <hr />
55
+ <input class="elem_submit" id="form_submit" name="form[submit]" type="submit" value="Submit"/>
56
+ </form>\n|
57
+ assert_equal expected, form.to_html
58
+ end
59
+
60
+ def test_that_sections_are_not_loaded
61
+ assert_equal nil, ActiveForm::Element::Section::get(:demo)
62
+ end
63
+
64
+ def teardown
65
+ ActiveForm::Definition.load_paths.clear
66
+ end
67
+
68
+ end
@@ -0,0 +1,35 @@
1
+ require 'test_helper'
2
+
3
+ class TestLoadElement < Test::Unit::TestCase
4
+
5
+ def setup
6
+ ActiveForm::Element.load_paths << File.join(File.dirname(__FILE__), 'resources', 'elements')
7
+ end
8
+
9
+ def test_load_paths
10
+ assert_equal 3, ActiveForm::Element.load_paths.length
11
+ assert File.directory?(ActiveForm::Element.load_paths[0])
12
+ assert File.directory?(ActiveForm::Element.load_paths[1])
13
+ assert File.directory?(ActiveForm::Element.load_paths[2])
14
+ end
15
+
16
+ def test_load_and_build
17
+ assert_equal ActiveForm::Element::Chunky, ActiveForm::Element::get(:chunky)
18
+ elem = ActiveForm::Element::build(:chunky)
19
+ assert_kind_of ActiveForm::Element::Chunky, elem
20
+ end
21
+
22
+ def test_add_form_elements
23
+ form = ActiveForm::compose :form do |f|
24
+ f.text_element :name
25
+ f.chunky_element :why
26
+ end
27
+ assert_equal [:text, :chunky], form.collect(&:element_type)
28
+ assert_equal %|<h1 class="elem_chunky" id="form_why">Chunky Bacon!</h1>\n|, form[:why].to_html
29
+ end
30
+
31
+ def teardown
32
+ ActiveForm::Element.load_paths.delete_at(2)
33
+ end
34
+
35
+ end
@@ -0,0 +1,43 @@
1
+ require 'test_helper'
2
+
3
+ class TestLoadSectionElement < Test::Unit::TestCase
4
+
5
+ def setup
6
+ ActiveForm::Definition.load_paths << File.join(File.dirname(__FILE__), 'resources', 'forms')
7
+ ActiveForm::Definition.load_paths << File.join(File.dirname(__FILE__), 'resources', 'sections')
8
+ end
9
+
10
+ def test_load_paths
11
+ assert_equal 2, ActiveForm::Definition.load_paths.length
12
+ assert File.directory?(ActiveForm::Definition.load_paths.first)
13
+ assert File.directory?(ActiveForm::Definition.load_paths.last)
14
+ end
15
+
16
+ def test_load_and_build
17
+ klass = ActiveForm::Element::Section::get(:demo)
18
+ assert_equal ActiveForm::DemoSection, klass
19
+ section = ActiveForm::Element::Section::build(:demo)
20
+ assert_kind_of ActiveForm::DemoSection, section
21
+ end
22
+
23
+ def test_load_and_add_section_to_form
24
+ form = ActiveForm::compose :form
25
+ form.append_section [:demo, :personal]
26
+ form << :foo
27
+ form << :unknown
28
+ assert_equal [:personal, :foo], form.collect(&:name)
29
+
30
+ assert_kind_of ActiveForm::DemoSection, form[:personal]
31
+ assert_kind_of ActiveForm::Element::Section, form[:personal]
32
+ assert_equal [:firstname, :lastname], form[:personal].collect(&:name)
33
+
34
+ assert_kind_of ActiveForm::FooSection, form[:foo]
35
+ assert_kind_of ActiveForm::Element::Section, form[:foo]
36
+ assert_equal [:title, :body], form[:foo].collect(&:name)
37
+ end
38
+
39
+ def teardown
40
+ ActiveForm::Definition.load_paths.clear
41
+ end
42
+
43
+ end