active_form 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data.tar.gz.sig +2 -0
- data/History.txt +4 -0
- data/License.txt +20 -0
- data/MIT-LICENSE +19 -0
- data/Manifest.txt +181 -0
- data/README.txt +1 -0
- data/Rakefile +4 -0
- data/config/hoe.rb +71 -0
- data/config/requirements.rb +17 -0
- data/init.rb +5 -0
- data/lib/active_form.rb +86 -0
- data/lib/active_form/core_extensions.rb +179 -0
- data/lib/active_form/definition.rb +72 -0
- data/lib/active_form/element.rb +50 -0
- data/lib/active_form/elements/base.rb +67 -0
- data/lib/active_form/elements/builder.rb +103 -0
- data/lib/active_form/elements/button.rb +15 -0
- data/lib/active_form/elements/checkbox.rb +18 -0
- data/lib/active_form/elements/file.rb +15 -0
- data/lib/active_form/elements/hidden.rb +9 -0
- data/lib/active_form/elements/image.rb +7 -0
- data/lib/active_form/elements/input.rb +23 -0
- data/lib/active_form/elements/password.rb +12 -0
- data/lib/active_form/elements/radio.rb +18 -0
- data/lib/active_form/elements/reset.rb +15 -0
- data/lib/active_form/elements/section.rb +37 -0
- data/lib/active_form/elements/select.rb +42 -0
- data/lib/active_form/elements/submit.rb +19 -0
- data/lib/active_form/elements/text.rb +9 -0
- data/lib/active_form/elements/textarea.rb +18 -0
- data/lib/active_form/errors.rb +73 -0
- data/lib/active_form/facets/checkbox_group.rb +11 -0
- data/lib/active_form/facets/collection_input.rb +96 -0
- data/lib/active_form/facets/radio_group.rb +11 -0
- data/lib/active_form/facets/select_date.rb +10 -0
- data/lib/active_form/facets/select_datetime.rb +10 -0
- data/lib/active_form/facets/select_day.rb +17 -0
- data/lib/active_form/facets/select_from_model.rb +60 -0
- data/lib/active_form/facets/select_hour.rb +17 -0
- data/lib/active_form/facets/select_minute.rb +17 -0
- data/lib/active_form/facets/select_month.rb +46 -0
- data/lib/active_form/facets/select_numeric_range.rb +59 -0
- data/lib/active_form/facets/select_second.rb +17 -0
- data/lib/active_form/facets/select_time.rb +10 -0
- data/lib/active_form/facets/select_timebased.rb +145 -0
- data/lib/active_form/facets/select_weekday.rb +46 -0
- data/lib/active_form/facets/select_year.rb +24 -0
- data/lib/active_form/mixins/attribute_methods.rb +33 -0
- data/lib/active_form/mixins/casting.rb +152 -0
- data/lib/active_form/mixins/collection_element_methods.rb +204 -0
- data/lib/active_form/mixins/common_methods.rb +350 -0
- data/lib/active_form/mixins/container_methods.rb +417 -0
- data/lib/active_form/mixins/css_methods.rb +70 -0
- data/lib/active_form/mixins/element_methods.rb +314 -0
- data/lib/active_form/mixins/javascript_methods.rb +99 -0
- data/lib/active_form/mixins/loader_methods.rb +72 -0
- data/lib/active_form/mixins/option_element_methods.rb +61 -0
- data/lib/active_form/mixins/validation_methods.rb +253 -0
- data/lib/active_form/validator.rb +47 -0
- data/lib/active_form/validators/alpha.rb +9 -0
- data/lib/active_form/validators/alphanum.rb +9 -0
- data/lib/active_form/validators/base.rb +132 -0
- data/lib/active_form/validators/digits.rb +9 -0
- data/lib/active_form/validators/email.rb +29 -0
- data/lib/active_form/validators/format.rb +15 -0
- data/lib/active_form/validators/length_range.rb +24 -0
- data/lib/active_form/validators/number.rb +9 -0
- data/lib/active_form/validators/option_count.rb +24 -0
- data/lib/active_form/validators/proc.rb +22 -0
- data/lib/active_form/validators/required.rb +9 -0
- data/lib/active_form/validators/set.rb +21 -0
- data/lib/active_form/validators/time_range.rb +30 -0
- data/lib/active_form/validators/uri.rb +54 -0
- data/lib/active_form/version.rb +9 -0
- data/lib/active_form/views/fieldsets.rb +34 -0
- data/lib/active_form/views/plain.rb +32 -0
- data/lib/active_form/views/tables.rb +28 -0
- data/lib/active_form/widget.rb +43 -0
- data/lib/active_form/widgets/base.rb +28 -0
- data/lib/loob/uri_validator.rb +140 -0
- data/lib/rails/acts_as_dropdown/MIT-LICENSE +20 -0
- data/lib/rails/acts_as_dropdown/acts_as_dropdown.rb +119 -0
- data/lib/rails/acts_as_dropdown/dropdown.rb +27 -0
- data/lib/rails/controller_helper.rb +19 -0
- data/lib/rails/model/loader.rb +206 -0
- data/lib/rails/view_helper.rb +20 -0
- data/samples/html/css/style.css +175 -0
- data/samples/html/js/effects.js +958 -0
- data/samples/html/js/prototype.js +2006 -0
- data/samples/html/js/validation.js +228 -0
- data/samples/html/plain_view.html +77 -0
- data/samples/html/sample001.html +158 -0
- data/samples/html/sample002.html +76 -0
- data/samples/html/sample003.html +34 -0
- data/samples/layouts/default.rhtml +18 -0
- data/samples/layouts/plain.rhtml +21 -0
- data/samples/layouts/sample003.rhtml +25 -0
- data/samples/plain_view.rb +58 -0
- data/samples/sample001.rb +111 -0
- data/samples/sample002.rb +92 -0
- data/samples/sample003.rb +30 -0
- data/script/destroy +14 -0
- data/script/generate +14 -0
- data/script/txt2html +74 -0
- data/setup.rb +1585 -0
- data/tasks/deployment.rake +34 -0
- data/tasks/environment.rake +7 -0
- data/tasks/website.rake +17 -0
- data/test/elements/test_base_element.rb +159 -0
- data/test/elements/test_builder_element.rb +81 -0
- data/test/elements/test_button_element.rb +12 -0
- data/test/elements/test_checkbox_element.rb +233 -0
- data/test/elements/test_file_element.rb +20 -0
- data/test/elements/test_hidden_element.rb +11 -0
- data/test/elements/test_image_element.rb +11 -0
- data/test/elements/test_input_element.rb +39 -0
- data/test/elements/test_password_element.rb +16 -0
- data/test/elements/test_radio_element.rb +197 -0
- data/test/elements/test_reset_element.rb +12 -0
- data/test/elements/test_section_element.rb +162 -0
- data/test/elements/test_select_element.rb +364 -0
- data/test/elements/test_submit_element.rb +12 -0
- data/test/elements/test_text_element.rb +91 -0
- data/test/elements/test_textarea_element.rb +23 -0
- data/test/facets/test_checkbox_group_element.rb +388 -0
- data/test/facets/test_radio_group_element.rb +312 -0
- data/test/facets/test_select_date_element.rb +211 -0
- data/test/facets/test_select_datetime_element.rb +56 -0
- data/test/facets/test_select_day_element.rb +37 -0
- data/test/facets/test_select_from_model_element.rb +86 -0
- data/test/facets/test_select_hour_element.rb +37 -0
- data/test/facets/test_select_minute_element.rb +52 -0
- data/test/facets/test_select_month_element.rb +79 -0
- data/test/facets/test_select_numeric_range_element.rb +14 -0
- data/test/facets/test_select_second_element.rb +48 -0
- data/test/facets/test_select_time_element.rb +148 -0
- data/test/facets/test_select_weekday_element.rb +71 -0
- data/test/facets/test_select_year_element.rb +73 -0
- data/test/fixtures/author.rb +11 -0
- data/test/fixtures/authors.yml +0 -0
- data/test/fixtures/book.rb +14 -0
- data/test/fixtures/books.yml +8 -0
- data/test/fixtures/categories.yml +0 -0
- data/test/fixtures/categorization.rb +2 -0
- data/test/fixtures/categorizations.yml +0 -0
- data/test/fixtures/category.rb +8 -0
- data/test/fixtures/publisher.rb +5 -0
- data/test/fixtures/publishers.yml +10 -0
- data/test/fixtures/schema.rb +43 -0
- data/test/rails/test_model_autodefinition.rb +121 -0
- data/test/rails/test_model_loader.rb +61 -0
- data/test/resources/elements/chunky.rb +11 -0
- data/test/resources/forms/demo.rb +5 -0
- data/test/resources/models/book.rb +8 -0
- data/test/resources/models/register_publisher.rb +5 -0
- data/test/resources/sections/demo.rb +6 -0
- data/test/resources/sections/foo.rb +6 -0
- data/test/resources/validators/foo.rb +9 -0
- data/test/resources/widgets/custom.rb +13 -0
- data/test/test_active_form.rb +1050 -0
- data/test/test_casting.rb +124 -0
- data/test/test_definition.rb +68 -0
- data/test/test_definition_class.rb +118 -0
- data/test/test_element_class.rb +201 -0
- data/test/test_helper.rb +74 -0
- data/test/test_javascript.rb +234 -0
- data/test/test_load_definition.rb +68 -0
- data/test/test_load_element.rb +35 -0
- data/test/test_load_section_element.rb +43 -0
- data/test/test_load_validator.rb +31 -0
- data/test/test_load_widget.rb +93 -0
- data/test/test_validation.rb +722 -0
- data/test/validators/test_validates_as_alpha.rb +26 -0
- data/test/validators/test_validates_as_alphanum.rb +26 -0
- data/test/validators/test_validates_as_digits.rb +26 -0
- data/test/validators/test_validates_as_email.rb +29 -0
- data/test/validators/test_validates_as_number.rb +26 -0
- data/test/validators/test_validates_as_uri.rb +128 -0
- data/test/validators/test_validates_with_format.rb +26 -0
- data/test/validators/test_validates_within_length_range.rb +46 -0
- data/test/validators/test_validates_within_set.rb +46 -0
- data/test/validators/test_validates_within_time_range.rb +53 -0
- metadata +307 -0
- metadata.gz.sig +4 -0
data/test/test_helper.rb
ADDED
|
@@ -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
|