actionpack 2.1.2 → 2.2.2
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of actionpack might be problematic. Click here for more details.
- data/CHANGELOG +223 -7
- data/README +6 -12
- data/Rakefile +11 -11
- data/lib/action_controller.rb +9 -9
- data/lib/action_controller/assertions/response_assertions.rb +29 -78
- data/lib/action_controller/assertions/routing_assertions.rb +33 -33
- data/lib/action_controller/assertions/selector_assertions.rb +9 -5
- data/lib/action_controller/base.rb +227 -161
- data/lib/action_controller/benchmarking.rb +37 -24
- data/lib/action_controller/caching/actions.rb +53 -21
- data/lib/action_controller/caching/fragments.rb +10 -36
- data/lib/action_controller/caching/sweeping.rb +3 -3
- data/lib/action_controller/cgi_ext/session.rb +2 -22
- data/lib/action_controller/cgi_process.rb +8 -46
- data/lib/action_controller/components.rb +4 -1
- data/lib/action_controller/cookies.rb +10 -0
- data/lib/action_controller/dispatcher.rb +49 -15
- data/lib/action_controller/filters.rb +48 -10
- data/lib/action_controller/headers.rb +16 -14
- data/lib/action_controller/helpers.rb +2 -2
- data/lib/action_controller/http_authentication.rb +1 -1
- data/lib/action_controller/integration.rb +57 -60
- data/lib/action_controller/layout.rb +27 -53
- data/lib/action_controller/mime_responds.rb +5 -1
- data/lib/action_controller/mime_type.rb +64 -42
- data/lib/action_controller/mime_types.rb +2 -1
- data/lib/action_controller/performance_test.rb +16 -0
- data/lib/action_controller/polymorphic_routes.rb +16 -9
- data/lib/action_controller/rack_process.rb +303 -0
- data/lib/action_controller/request.rb +205 -97
- data/lib/action_controller/request_forgery_protection.rb +2 -2
- data/lib/action_controller/request_profiler.rb +0 -0
- data/lib/action_controller/rescue.rb +20 -115
- data/lib/action_controller/resources.rb +186 -83
- data/lib/action_controller/response.rb +140 -26
- data/lib/action_controller/routing.rb +28 -30
- data/lib/action_controller/routing/builder.rb +45 -54
- data/lib/action_controller/routing/optimisations.rb +31 -21
- data/lib/action_controller/routing/recognition_optimisation.rb +33 -27
- data/lib/action_controller/routing/route.rb +162 -147
- data/lib/action_controller/routing/route_set.rb +8 -7
- data/lib/action_controller/routing/routing_ext.rb +4 -1
- data/lib/action_controller/routing/segments.rb +50 -21
- data/lib/action_controller/session/cookie_store.rb +3 -2
- data/lib/action_controller/session/drb_server.rb +7 -7
- data/lib/action_controller/session_management.rb +6 -2
- data/lib/action_controller/streaming.rb +15 -8
- data/lib/action_controller/templates/rescues/diagnostics.erb +2 -2
- data/lib/action_controller/templates/rescues/template_error.erb +2 -2
- data/lib/action_controller/test_case.rb +66 -2
- data/lib/action_controller/test_process.rb +71 -66
- data/lib/action_controller/translation.rb +13 -0
- data/lib/action_controller/url_rewriter.rb +90 -13
- data/lib/action_controller/vendor/html-scanner/html/node.rb +9 -2
- data/lib/action_controller/vendor/html-scanner/html/sanitizer.rb +1 -1
- data/lib/action_controller/vendor/html-scanner/html/selector.rb +2 -2
- data/lib/action_controller/verification.rb +2 -2
- data/lib/action_pack/version.rb +1 -1
- data/lib/action_view.rb +19 -11
- data/lib/action_view/base.rb +184 -150
- data/lib/action_view/helpers.rb +38 -0
- data/lib/action_view/helpers/active_record_helper.rb +56 -27
- data/lib/action_view/helpers/asset_tag_helper.rb +356 -153
- data/lib/action_view/helpers/atom_feed_helper.rb +74 -19
- data/lib/action_view/helpers/benchmark_helper.rb +3 -3
- data/lib/action_view/helpers/cache_helper.rb +1 -2
- data/lib/action_view/helpers/capture_helper.rb +19 -44
- data/lib/action_view/helpers/date_helper.rb +486 -296
- data/lib/action_view/helpers/debug_helper.rb +20 -13
- data/lib/action_view/helpers/form_helper.rb +71 -30
- data/lib/action_view/helpers/form_options_helper.rb +15 -85
- data/lib/action_view/helpers/form_tag_helper.rb +61 -38
- data/lib/action_view/helpers/javascript_helper.rb +80 -89
- data/lib/action_view/helpers/number_helper.rb +179 -74
- data/lib/action_view/helpers/prototype_helper.rb +216 -201
- data/lib/action_view/helpers/record_tag_helper.rb +4 -5
- data/lib/action_view/helpers/sanitize_helper.rb +65 -33
- data/lib/action_view/helpers/scriptaculous_helper.rb +2 -2
- data/lib/action_view/helpers/tag_helper.rb +39 -22
- data/lib/action_view/helpers/text_helper.rb +212 -118
- data/lib/action_view/helpers/translation_helper.rb +21 -0
- data/lib/action_view/helpers/url_helper.rb +100 -58
- data/lib/action_view/inline_template.rb +13 -14
- data/lib/action_view/locale/en.yml +91 -0
- data/lib/action_view/partials.rb +100 -55
- data/lib/action_view/paths.rb +125 -0
- data/lib/action_view/renderable.rb +102 -0
- data/lib/action_view/renderable_partial.rb +48 -0
- data/lib/action_view/template.rb +90 -101
- data/lib/action_view/template_error.rb +11 -21
- data/lib/action_view/template_handler.rb +8 -28
- data/lib/action_view/template_handlers.rb +45 -0
- data/lib/action_view/template_handlers/builder.rb +5 -15
- data/lib/action_view/template_handlers/erb.rb +9 -6
- data/lib/action_view/template_handlers/rjs.rb +2 -17
- data/lib/action_view/test_case.rb +7 -4
- data/test/abstract_unit.rb +4 -1
- data/test/active_record_unit.rb +28 -30
- data/test/activerecord/render_partial_with_record_identification_test.rb +25 -12
- data/test/controller/action_pack_assertions_test.rb +8 -37
- data/test/controller/addresses_render_test.rb +0 -3
- data/test/controller/assert_select_test.rb +51 -24
- data/test/controller/base_test.rb +4 -4
- data/test/controller/caching_test.rb +136 -66
- data/test/controller/capture_test.rb +1 -21
- data/test/controller/cgi_test.rb +157 -10
- data/test/controller/components_test.rb +41 -25
- data/test/controller/content_type_test.rb +49 -17
- data/test/controller/cookie_test.rb +1 -1
- data/test/controller/deprecation/deprecated_base_methods_test.rb +0 -3
- data/test/controller/dispatcher_test.rb +9 -1
- data/test/controller/filter_params_test.rb +2 -2
- data/test/controller/filters_test.rb +13 -13
- data/test/controller/html-scanner/cdata_node_test.rb +15 -0
- data/test/controller/html-scanner/node_test.rb +21 -0
- data/test/controller/html-scanner/sanitizer_test.rb +14 -0
- data/test/controller/integration_test.rb +167 -6
- data/test/controller/layout_test.rb +11 -68
- data/test/controller/logging_test.rb +46 -0
- data/test/controller/mime_responds_test.rb +61 -59
- data/test/controller/mime_type_test.rb +6 -6
- data/test/controller/polymorphic_routes_test.rb +37 -2
- data/test/controller/rack_test.rb +323 -0
- data/test/controller/redirect_test.rb +72 -71
- data/test/controller/render_test.rb +1120 -108
- data/test/controller/request_forgery_protection_test.rb +66 -52
- data/test/controller/request_test.rb +103 -146
- data/test/controller/rescue_test.rb +20 -24
- data/test/controller/resources_test.rb +408 -25
- data/test/controller/routing_test.rb +1774 -1774
- data/test/controller/send_file_test.rb +0 -4
- data/test/controller/session/cookie_store_test.rb +53 -1
- data/test/controller/test_test.rb +15 -37
- data/test/controller/translation_test.rb +26 -0
- data/test/controller/url_rewriter_test.rb +27 -28
- data/test/controller/view_paths_test.rb +48 -47
- data/test/fixtures/_top_level_partial.html.erb +1 -0
- data/test/fixtures/_top_level_partial_only.erb +1 -0
- data/test/fixtures/developers/_developer.erb +1 -0
- data/test/fixtures/fun/games/_game.erb +1 -0
- data/test/fixtures/fun/serious/games/_game.erb +1 -0
- data/test/fixtures/functional_caching/formatted_fragment_cached.html.erb +3 -0
- data/test/fixtures/functional_caching/formatted_fragment_cached.js.rjs +6 -0
- data/test/fixtures/functional_caching/formatted_fragment_cached.xml.builder +5 -0
- data/test/fixtures/functional_caching/inline_fragment_cached.html.erb +2 -0
- data/test/fixtures/layouts/_column.html.erb +2 -0
- data/test/fixtures/projects/_project.erb +1 -0
- data/test/fixtures/public/javascripts/subdir/subdir.js +1 -0
- data/test/fixtures/public/stylesheets/subdir/subdir.css +1 -0
- data/test/fixtures/replies/_reply.erb +1 -0
- data/test/fixtures/test/_counter.html.erb +1 -0
- data/test/fixtures/test/_customer.erb +1 -1
- data/test/fixtures/test/_customer_with_var.erb +1 -0
- data/test/fixtures/test/_layout_for_block_with_args.html.erb +3 -0
- data/test/fixtures/test/_local_inspector.html.erb +1 -0
- data/test/fixtures/test/_partial_with_only_html_version.html.erb +1 -0
- data/test/fixtures/test/hello.builder +1 -1
- data/test/fixtures/test/hyphen-ated.erb +1 -0
- data/test/fixtures/test/implicit_content_type.atom.builder +2 -0
- data/test/fixtures/test/nested_layout.erb +3 -0
- data/test/fixtures/test/non_erb_block_content_for.builder +1 -1
- data/test/fixtures/test/sub_template_raise.html.erb +1 -0
- data/test/fixtures/test/template.erb +1 -0
- data/test/fixtures/test/using_layout_around_block_with_args.html.erb +1 -0
- data/test/template/active_record_helper_i18n_test.rb +46 -0
- data/test/template/active_record_helper_test.rb +24 -24
- data/test/template/asset_tag_helper_test.rb +161 -29
- data/test/template/atom_feed_helper_test.rb +114 -5
- data/test/template/compiled_templates_test.rb +59 -0
- data/test/template/date_helper_i18n_test.rb +113 -0
- data/test/template/date_helper_test.rb +403 -109
- data/test/template/form_helper_test.rb +213 -154
- data/test/template/form_options_helper_test.rb +249 -897
- data/test/template/form_tag_helper_test.rb +80 -32
- data/test/template/javascript_helper_test.rb +17 -18
- data/test/template/number_helper_i18n_test.rb +54 -0
- data/test/template/number_helper_test.rb +43 -13
- data/test/template/prototype_helper_test.rb +101 -84
- data/test/template/record_tag_helper_test.rb +24 -20
- data/test/template/render_test.rb +193 -0
- data/test/template/sanitize_helper_test.rb +3 -3
- data/test/template/tag_helper_test.rb +34 -14
- data/test/template/text_helper_test.rb +83 -9
- data/test/template/translation_helper_test.rb +28 -0
- data/test/template/url_helper_test.rb +55 -18
- metadata +57 -18
- data/lib/action_view/helpers/javascripts/controls.js +0 -963
- data/lib/action_view/helpers/javascripts/dragdrop.js +0 -972
- data/lib/action_view/helpers/javascripts/effects.js +0 -1120
- data/lib/action_view/helpers/javascripts/prototype.js +0 -4225
- data/lib/action_view/partial_template.rb +0 -70
- data/lib/action_view/template_finder.rb +0 -177
- data/lib/action_view/template_handlers/compilable.rb +0 -128
- data/test/controller/custom_handler_test.rb +0 -45
- data/test/controller/new_render_test.rb +0 -945
- data/test/fixtures/test/block_content_for.erb +0 -2
- data/test/fixtures/test/erb_content_for.erb +0 -2
- data/test/template/deprecated_erb_variable_test.rb +0 -9
- data/test/template/template_finder_test.rb +0 -73
- data/test/template/template_object_test.rb +0 -95
@@ -6,7 +6,7 @@ silence_warnings do
|
|
6
6
|
alias_method :title_before_type_cast, :title unless respond_to?(:title_before_type_cast)
|
7
7
|
alias_method :body_before_type_cast, :body unless respond_to?(:body_before_type_cast)
|
8
8
|
alias_method :author_name_before_type_cast, :author_name unless respond_to?(:author_name_before_type_cast)
|
9
|
-
alias_method :secret?, :secret
|
9
|
+
alias_method :secret?, :secret
|
10
10
|
|
11
11
|
def new_record=(boolean)
|
12
12
|
@new_record = boolean
|
@@ -22,6 +22,7 @@ silence_warnings do
|
|
22
22
|
attr_reader :post_id
|
23
23
|
def save; @id = 1; @post_id = 1 end
|
24
24
|
def new_record?; @id.nil? end
|
25
|
+
def to_param; @id; end
|
25
26
|
def name
|
26
27
|
@id.nil? ? 'new comment' : "comment ##{@id}"
|
27
28
|
end
|
@@ -30,7 +31,6 @@ end
|
|
30
31
|
|
31
32
|
class Comment::Nested < Comment; end
|
32
33
|
|
33
|
-
|
34
34
|
class FormHelperTest < ActionView::TestCase
|
35
35
|
tests ActionView::Helpers::FormHelper
|
36
36
|
|
@@ -337,14 +337,12 @@ class FormHelperTest < ActionView::TestCase
|
|
337
337
|
end
|
338
338
|
|
339
339
|
def test_form_for
|
340
|
-
_erbout = ''
|
341
|
-
|
342
340
|
form_for(:post, @post, :html => { :id => 'create-post' }) do |f|
|
343
|
-
|
344
|
-
|
345
|
-
|
346
|
-
|
347
|
-
|
341
|
+
concat f.label(:title)
|
342
|
+
concat f.text_field(:title)
|
343
|
+
concat f.text_area(:body)
|
344
|
+
concat f.check_box(:secret)
|
345
|
+
concat f.submit('Create post')
|
348
346
|
end
|
349
347
|
|
350
348
|
expected =
|
@@ -357,16 +355,14 @@ class FormHelperTest < ActionView::TestCase
|
|
357
355
|
"<input name='commit' id='post_submit' type='submit' value='Create post' />" +
|
358
356
|
"</form>"
|
359
357
|
|
360
|
-
assert_dom_equal expected,
|
358
|
+
assert_dom_equal expected, output_buffer
|
361
359
|
end
|
362
360
|
|
363
361
|
def test_form_for_with_method
|
364
|
-
_erbout = ''
|
365
|
-
|
366
362
|
form_for(:post, @post, :html => { :id => 'create-post', :method => :put }) do |f|
|
367
|
-
|
368
|
-
|
369
|
-
|
363
|
+
concat f.text_field(:title)
|
364
|
+
concat f.text_area(:body)
|
365
|
+
concat f.check_box(:secret)
|
370
366
|
end
|
371
367
|
|
372
368
|
expected =
|
@@ -378,16 +374,14 @@ class FormHelperTest < ActionView::TestCase
|
|
378
374
|
"<input name='post[secret]' type='hidden' value='0' />" +
|
379
375
|
"</form>"
|
380
376
|
|
381
|
-
assert_dom_equal expected,
|
377
|
+
assert_dom_equal expected, output_buffer
|
382
378
|
end
|
383
379
|
|
384
380
|
def test_form_for_without_object
|
385
|
-
_erbout = ''
|
386
|
-
|
387
381
|
form_for(:post, :html => { :id => 'create-post' }) do |f|
|
388
|
-
|
389
|
-
|
390
|
-
|
382
|
+
concat f.text_field(:title)
|
383
|
+
concat f.text_area(:body)
|
384
|
+
concat f.check_box(:secret)
|
391
385
|
end
|
392
386
|
|
393
387
|
expected =
|
@@ -398,17 +392,15 @@ class FormHelperTest < ActionView::TestCase
|
|
398
392
|
"<input name='post[secret]' type='hidden' value='0' />" +
|
399
393
|
"</form>"
|
400
394
|
|
401
|
-
assert_dom_equal expected,
|
395
|
+
assert_dom_equal expected, output_buffer
|
402
396
|
end
|
403
397
|
|
404
398
|
def test_form_for_with_index
|
405
|
-
_erbout = ''
|
406
|
-
|
407
399
|
form_for("post[]", @post) do |f|
|
408
|
-
|
409
|
-
|
410
|
-
|
411
|
-
|
400
|
+
concat f.label(:title)
|
401
|
+
concat f.text_field(:title)
|
402
|
+
concat f.text_area(:body)
|
403
|
+
concat f.check_box(:secret)
|
412
404
|
end
|
413
405
|
|
414
406
|
expected =
|
@@ -420,16 +412,14 @@ class FormHelperTest < ActionView::TestCase
|
|
420
412
|
"<input name='post[123][secret]' type='hidden' value='0' />" +
|
421
413
|
"</form>"
|
422
414
|
|
423
|
-
assert_dom_equal expected,
|
415
|
+
assert_dom_equal expected, output_buffer
|
424
416
|
end
|
425
417
|
|
426
418
|
def test_form_for_with_nil_index_option_override
|
427
|
-
_erbout = ''
|
428
|
-
|
429
419
|
form_for("post[]", @post, :index => nil) do |f|
|
430
|
-
|
431
|
-
|
432
|
-
|
420
|
+
concat f.text_field(:title)
|
421
|
+
concat f.text_area(:body)
|
422
|
+
concat f.check_box(:secret)
|
433
423
|
end
|
434
424
|
|
435
425
|
expected =
|
@@ -440,14 +430,13 @@ class FormHelperTest < ActionView::TestCase
|
|
440
430
|
"<input name='post[][secret]' type='hidden' value='0' />" +
|
441
431
|
"</form>"
|
442
432
|
|
443
|
-
assert_dom_equal expected,
|
433
|
+
assert_dom_equal expected, output_buffer
|
444
434
|
end
|
445
435
|
|
446
436
|
def test_nested_fields_for
|
447
|
-
_erbout = ''
|
448
437
|
form_for(:post, @post) do |f|
|
449
438
|
f.fields_for(:comment, @post) do |c|
|
450
|
-
|
439
|
+
concat c.text_field(:title)
|
451
440
|
end
|
452
441
|
end
|
453
442
|
|
@@ -455,16 +444,125 @@ class FormHelperTest < ActionView::TestCase
|
|
455
444
|
"<input name='post[comment][title]' size='30' type='text' id='post_comment_title' value='Hello World' />" +
|
456
445
|
"</form>"
|
457
446
|
|
458
|
-
assert_dom_equal expected,
|
447
|
+
assert_dom_equal expected, output_buffer
|
459
448
|
end
|
460
449
|
|
461
|
-
def
|
462
|
-
|
450
|
+
def test_nested_fields_for_with_nested_collections
|
451
|
+
form_for('post[]', @post) do |f|
|
452
|
+
concat f.text_field(:title)
|
453
|
+
f.fields_for('comment[]', @comment) do |c|
|
454
|
+
concat c.text_field(:name)
|
455
|
+
end
|
456
|
+
end
|
457
|
+
|
458
|
+
expected = "<form action='http://www.example.com' method='post'>" +
|
459
|
+
"<input name='post[123][title]' size='30' type='text' id='post_123_title' value='Hello World' />" +
|
460
|
+
"<input name='post[123][comment][][name]' size='30' type='text' id='post_123_comment__name' value='new comment' />" +
|
461
|
+
"</form>"
|
462
|
+
|
463
|
+
assert_dom_equal expected, output_buffer
|
464
|
+
end
|
465
|
+
|
466
|
+
def test_nested_fields_for_with_index
|
467
|
+
form_for('post', @post, :index => 1) do |c|
|
468
|
+
concat c.text_field(:title)
|
469
|
+
c.fields_for('comment', @comment, :index => 1) do |r|
|
470
|
+
concat r.text_field(:name)
|
471
|
+
end
|
472
|
+
end
|
473
|
+
|
474
|
+
expected = "<form action='http://www.example.com' method='post'>" +
|
475
|
+
"<input name='post[1][title]' size='30' type='text' id='post_1_title' value='Hello World' />" +
|
476
|
+
"<input name='post[1][comment][1][name]' size='30' type='text' id='post_1_comment_1_name' value='new comment' />" +
|
477
|
+
"</form>"
|
478
|
+
|
479
|
+
assert_dom_equal expected, output_buffer
|
480
|
+
end
|
481
|
+
|
482
|
+
def test_nested_fields_for_with_index
|
483
|
+
form_for(:post, @post, :index => 1) do |f|
|
484
|
+
f.fields_for(:comment, @post) do |c|
|
485
|
+
concat c.text_field(:title)
|
486
|
+
end
|
487
|
+
end
|
488
|
+
|
489
|
+
expected = "<form action='http://www.example.com' method='post'>" +
|
490
|
+
"<input name='post[1][comment][title]' size='30' type='text' id='post_1_comment_title' value='Hello World' />" +
|
491
|
+
"</form>"
|
463
492
|
|
493
|
+
assert_dom_equal expected, output_buffer
|
494
|
+
end
|
495
|
+
|
496
|
+
def test_nested_fields_for_with_index_on_both
|
497
|
+
form_for(:post, @post, :index => 1) do |f|
|
498
|
+
f.fields_for(:comment, @post, :index => 5) do |c|
|
499
|
+
concat c.text_field(:title)
|
500
|
+
end
|
501
|
+
end
|
502
|
+
|
503
|
+
expected = "<form action='http://www.example.com' method='post'>" +
|
504
|
+
"<input name='post[1][comment][5][title]' size='30' type='text' id='post_1_comment_5_title' value='Hello World' />" +
|
505
|
+
"</form>"
|
506
|
+
|
507
|
+
assert_dom_equal expected, output_buffer
|
508
|
+
end
|
509
|
+
|
510
|
+
def test_nested_fields_for_with_auto_index
|
511
|
+
form_for("post[]", @post) do |f|
|
512
|
+
f.fields_for(:comment, @post) do |c|
|
513
|
+
concat c.text_field(:title)
|
514
|
+
end
|
515
|
+
end
|
516
|
+
|
517
|
+
expected = "<form action='http://www.example.com' method='post'>" +
|
518
|
+
"<input name='post[123][comment][title]' size='30' type='text' id='post_123_comment_title' value='Hello World' />" +
|
519
|
+
"</form>"
|
520
|
+
|
521
|
+
assert_dom_equal expected, output_buffer
|
522
|
+
end
|
523
|
+
|
524
|
+
def test_nested_fields_for_with_auto_index_on_both
|
525
|
+
form_for("post[]", @post) do |f|
|
526
|
+
f.fields_for("comment[]", @post) do |c|
|
527
|
+
concat c.text_field(:title)
|
528
|
+
end
|
529
|
+
end
|
530
|
+
|
531
|
+
expected = "<form action='http://www.example.com' method='post'>" +
|
532
|
+
"<input name='post[123][comment][123][title]' size='30' type='text' id='post_123_comment_123_title' value='Hello World' />" +
|
533
|
+
"</form>"
|
534
|
+
|
535
|
+
assert_dom_equal expected, output_buffer
|
536
|
+
end
|
537
|
+
|
538
|
+
def test_nested_fields_for_with_index_and_auto_index
|
539
|
+
form_for("post[]", @post) do |f|
|
540
|
+
f.fields_for(:comment, @post, :index => 5) do |c|
|
541
|
+
concat c.text_field(:title)
|
542
|
+
end
|
543
|
+
end
|
544
|
+
|
545
|
+
form_for(:post, @post, :index => 1) do |f|
|
546
|
+
f.fields_for("comment[]", @post) do |c|
|
547
|
+
concat c.text_field(:title)
|
548
|
+
end
|
549
|
+
end
|
550
|
+
|
551
|
+
expected = "<form action='http://www.example.com' method='post'>" +
|
552
|
+
"<input name='post[123][comment][5][title]' size='30' type='text' id='post_123_comment_5_title' value='Hello World' />" +
|
553
|
+
"</form>" +
|
554
|
+
"<form action='http://www.example.com' method='post'>" +
|
555
|
+
"<input name='post[1][comment][123][title]' size='30' type='text' id='post_1_comment_123_title' value='Hello World' />" +
|
556
|
+
"</form>"
|
557
|
+
|
558
|
+
assert_dom_equal expected, output_buffer
|
559
|
+
end
|
560
|
+
|
561
|
+
def test_fields_for
|
464
562
|
fields_for(:post, @post) do |f|
|
465
|
-
|
466
|
-
|
467
|
-
|
563
|
+
concat f.text_field(:title)
|
564
|
+
concat f.text_area(:body)
|
565
|
+
concat f.check_box(:secret)
|
468
566
|
end
|
469
567
|
|
470
568
|
expected =
|
@@ -473,16 +571,14 @@ class FormHelperTest < ActionView::TestCase
|
|
473
571
|
"<input name='post[secret]' checked='checked' type='checkbox' id='post_secret' value='1' />" +
|
474
572
|
"<input name='post[secret]' type='hidden' value='0' />"
|
475
573
|
|
476
|
-
assert_dom_equal expected,
|
574
|
+
assert_dom_equal expected, output_buffer
|
477
575
|
end
|
478
576
|
|
479
577
|
def test_fields_for_with_index
|
480
|
-
_erbout = ''
|
481
|
-
|
482
578
|
fields_for("post[]", @post) do |f|
|
483
|
-
|
484
|
-
|
485
|
-
|
579
|
+
concat f.text_field(:title)
|
580
|
+
concat f.text_area(:body)
|
581
|
+
concat f.check_box(:secret)
|
486
582
|
end
|
487
583
|
|
488
584
|
expected =
|
@@ -491,16 +587,14 @@ class FormHelperTest < ActionView::TestCase
|
|
491
587
|
"<input name='post[123][secret]' checked='checked' type='checkbox' id='post_123_secret' value='1' />" +
|
492
588
|
"<input name='post[123][secret]' type='hidden' value='0' />"
|
493
589
|
|
494
|
-
assert_dom_equal expected,
|
590
|
+
assert_dom_equal expected, output_buffer
|
495
591
|
end
|
496
592
|
|
497
593
|
def test_fields_for_with_nil_index_option_override
|
498
|
-
_erbout = ''
|
499
|
-
|
500
594
|
fields_for("post[]", @post, :index => nil) do |f|
|
501
|
-
|
502
|
-
|
503
|
-
|
595
|
+
concat f.text_field(:title)
|
596
|
+
concat f.text_area(:body)
|
597
|
+
concat f.check_box(:secret)
|
504
598
|
end
|
505
599
|
|
506
600
|
expected =
|
@@ -509,16 +603,14 @@ class FormHelperTest < ActionView::TestCase
|
|
509
603
|
"<input name='post[][secret]' checked='checked' type='checkbox' id='post__secret' value='1' />" +
|
510
604
|
"<input name='post[][secret]' type='hidden' value='0' />"
|
511
605
|
|
512
|
-
assert_dom_equal expected,
|
606
|
+
assert_dom_equal expected, output_buffer
|
513
607
|
end
|
514
608
|
|
515
609
|
def test_fields_for_with_index_option_override
|
516
|
-
_erbout = ''
|
517
|
-
|
518
610
|
fields_for("post[]", @post, :index => "abc") do |f|
|
519
|
-
|
520
|
-
|
521
|
-
|
611
|
+
concat f.text_field(:title)
|
612
|
+
concat f.text_area(:body)
|
613
|
+
concat f.check_box(:secret)
|
522
614
|
end
|
523
615
|
|
524
616
|
expected =
|
@@ -527,15 +619,14 @@ class FormHelperTest < ActionView::TestCase
|
|
527
619
|
"<input name='post[abc][secret]' checked='checked' type='checkbox' id='post_abc_secret' value='1' />" +
|
528
620
|
"<input name='post[abc][secret]' type='hidden' value='0' />"
|
529
621
|
|
530
|
-
assert_dom_equal expected,
|
622
|
+
assert_dom_equal expected, output_buffer
|
531
623
|
end
|
532
624
|
|
533
625
|
def test_fields_for_without_object
|
534
|
-
_erbout = ''
|
535
626
|
fields_for(:post) do |f|
|
536
|
-
|
537
|
-
|
538
|
-
|
627
|
+
concat f.text_field(:title)
|
628
|
+
concat f.text_area(:body)
|
629
|
+
concat f.check_box(:secret)
|
539
630
|
end
|
540
631
|
|
541
632
|
expected =
|
@@ -544,15 +635,14 @@ class FormHelperTest < ActionView::TestCase
|
|
544
635
|
"<input name='post[secret]' checked='checked' type='checkbox' id='post_secret' value='1' />" +
|
545
636
|
"<input name='post[secret]' type='hidden' value='0' />"
|
546
637
|
|
547
|
-
assert_dom_equal expected,
|
638
|
+
assert_dom_equal expected, output_buffer
|
548
639
|
end
|
549
640
|
|
550
641
|
def test_fields_for_with_only_object
|
551
|
-
_erbout = ''
|
552
642
|
fields_for(@post) do |f|
|
553
|
-
|
554
|
-
|
555
|
-
|
643
|
+
concat f.text_field(:title)
|
644
|
+
concat f.text_area(:body)
|
645
|
+
concat f.check_box(:secret)
|
556
646
|
end
|
557
647
|
|
558
648
|
expected =
|
@@ -561,31 +651,29 @@ class FormHelperTest < ActionView::TestCase
|
|
561
651
|
"<input name='post[secret]' checked='checked' type='checkbox' id='post_secret' value='1' />" +
|
562
652
|
"<input name='post[secret]' type='hidden' value='0' />"
|
563
653
|
|
564
|
-
assert_dom_equal expected,
|
654
|
+
assert_dom_equal expected, output_buffer
|
565
655
|
end
|
566
656
|
|
567
657
|
def test_fields_for_object_with_bracketed_name
|
568
|
-
_erbout = ''
|
569
658
|
fields_for("author[post]", @post) do |f|
|
570
|
-
|
571
|
-
|
659
|
+
concat f.label(:title)
|
660
|
+
concat f.text_field(:title)
|
572
661
|
end
|
573
662
|
|
574
663
|
assert_dom_equal "<label for=\"author_post_title\">Title</label>" +
|
575
664
|
"<input name='author[post][title]' size='30' type='text' id='author_post_title' value='Hello World' />",
|
576
|
-
|
665
|
+
output_buffer
|
577
666
|
end
|
578
667
|
|
579
668
|
def test_fields_for_object_with_bracketed_name_and_index
|
580
|
-
_erbout = ''
|
581
669
|
fields_for("author[post]", @post, :index => 1) do |f|
|
582
|
-
|
583
|
-
|
670
|
+
concat f.label(:title)
|
671
|
+
concat f.text_field(:title)
|
584
672
|
end
|
585
673
|
|
586
674
|
assert_dom_equal "<label for=\"author_post_1_title\">Title</label>" +
|
587
675
|
"<input name='author[post][1][title]' size='30' type='text' id='author_post_1_title' value='Hello World' />",
|
588
|
-
|
676
|
+
output_buffer
|
589
677
|
end
|
590
678
|
|
591
679
|
def test_form_builder_does_not_have_form_for_method
|
@@ -593,14 +681,12 @@ class FormHelperTest < ActionView::TestCase
|
|
593
681
|
end
|
594
682
|
|
595
683
|
def test_form_for_and_fields_for
|
596
|
-
_erbout = ''
|
597
|
-
|
598
684
|
form_for(:post, @post, :html => { :id => 'create-post' }) do |post_form|
|
599
|
-
|
600
|
-
|
685
|
+
concat post_form.text_field(:title)
|
686
|
+
concat post_form.text_area(:body)
|
601
687
|
|
602
688
|
fields_for(:parent_post, @post) do |parent_fields|
|
603
|
-
|
689
|
+
concat parent_fields.check_box(:secret)
|
604
690
|
end
|
605
691
|
end
|
606
692
|
|
@@ -612,18 +698,16 @@ class FormHelperTest < ActionView::TestCase
|
|
612
698
|
"<input name='parent_post[secret]' type='hidden' value='0' />" +
|
613
699
|
"</form>"
|
614
700
|
|
615
|
-
assert_dom_equal expected,
|
701
|
+
assert_dom_equal expected, output_buffer
|
616
702
|
end
|
617
703
|
|
618
704
|
def test_form_for_and_fields_for_with_object
|
619
|
-
_erbout = ''
|
620
|
-
|
621
705
|
form_for(:post, @post, :html => { :id => 'create-post' }) do |post_form|
|
622
|
-
|
623
|
-
|
706
|
+
concat post_form.text_field(:title)
|
707
|
+
concat post_form.text_area(:body)
|
624
708
|
|
625
709
|
post_form.fields_for(@comment) do |comment_fields|
|
626
|
-
|
710
|
+
concat comment_fields.text_field(:name)
|
627
711
|
end
|
628
712
|
end
|
629
713
|
|
@@ -634,7 +718,7 @@ class FormHelperTest < ActionView::TestCase
|
|
634
718
|
"<input name='post[comment][name]' type='text' id='post_comment_name' value='new comment' size='30' />" +
|
635
719
|
"</form>"
|
636
720
|
|
637
|
-
assert_dom_equal expected,
|
721
|
+
assert_dom_equal expected, output_buffer
|
638
722
|
end
|
639
723
|
|
640
724
|
class LabelledFormBuilder < ActionView::Helpers::FormBuilder
|
@@ -649,12 +733,10 @@ class FormHelperTest < ActionView::TestCase
|
|
649
733
|
end
|
650
734
|
|
651
735
|
def test_form_for_with_labelled_builder
|
652
|
-
_erbout = ''
|
653
|
-
|
654
736
|
form_for(:post, @post, :builder => LabelledFormBuilder) do |f|
|
655
|
-
|
656
|
-
|
657
|
-
|
737
|
+
concat f.text_field(:title)
|
738
|
+
concat f.text_area(:body)
|
739
|
+
concat f.check_box(:secret)
|
658
740
|
end
|
659
741
|
|
660
742
|
expected =
|
@@ -665,18 +747,17 @@ class FormHelperTest < ActionView::TestCase
|
|
665
747
|
"<input name='post[secret]' type='hidden' value='0' /><br/>" +
|
666
748
|
"</form>"
|
667
749
|
|
668
|
-
assert_dom_equal expected,
|
750
|
+
assert_dom_equal expected, output_buffer
|
669
751
|
end
|
670
752
|
|
671
753
|
def test_default_form_builder
|
672
754
|
old_default_form_builder, ActionView::Base.default_form_builder =
|
673
755
|
ActionView::Base.default_form_builder, LabelledFormBuilder
|
674
756
|
|
675
|
-
_erbout = ''
|
676
757
|
form_for(:post, @post) do |f|
|
677
|
-
|
678
|
-
|
679
|
-
|
758
|
+
concat f.text_field(:title)
|
759
|
+
concat f.text_area(:body)
|
760
|
+
concat f.check_box(:secret)
|
680
761
|
end
|
681
762
|
|
682
763
|
expected =
|
@@ -687,17 +768,15 @@ class FormHelperTest < ActionView::TestCase
|
|
687
768
|
"<input name='post[secret]' type='hidden' value='0' /><br/>" +
|
688
769
|
"</form>"
|
689
770
|
|
690
|
-
assert_dom_equal expected,
|
771
|
+
assert_dom_equal expected, output_buffer
|
691
772
|
ensure
|
692
773
|
ActionView::Base.default_form_builder = old_default_form_builder
|
693
774
|
end
|
694
775
|
|
695
776
|
def test_default_form_builder_with_active_record_helpers
|
696
|
-
|
697
|
-
_erbout = ''
|
698
777
|
form_for(:post, @post) do |f|
|
699
|
-
|
700
|
-
|
778
|
+
concat f.error_message_on('author_name')
|
779
|
+
concat f.error_messages
|
701
780
|
end
|
702
781
|
|
703
782
|
expected = %(<form action='http://www.example.com' method='post'>) +
|
@@ -705,7 +784,7 @@ class FormHelperTest < ActionView::TestCase
|
|
705
784
|
%(<div class="errorExplanation" id="errorExplanation"><h2>1 error prohibited this post from being saved</h2><p>There were problems with the following fields:</p><ul><li>Author name can't be empty</li></ul></div>) +
|
706
785
|
%(</form>)
|
707
786
|
|
708
|
-
assert_dom_equal expected,
|
787
|
+
assert_dom_equal expected, output_buffer
|
709
788
|
|
710
789
|
end
|
711
790
|
|
@@ -713,10 +792,9 @@ class FormHelperTest < ActionView::TestCase
|
|
713
792
|
post = @post
|
714
793
|
@post = nil
|
715
794
|
|
716
|
-
_erbout = ''
|
717
795
|
form_for(:post, post) do |f|
|
718
|
-
|
719
|
-
|
796
|
+
concat f.error_message_on('author_name')
|
797
|
+
concat f.error_messages
|
720
798
|
end
|
721
799
|
|
722
800
|
expected = %(<form action='http://www.example.com' method='post'>) +
|
@@ -724,19 +802,18 @@ class FormHelperTest < ActionView::TestCase
|
|
724
802
|
%(<div class="errorExplanation" id="errorExplanation"><h2>1 error prohibited this post from being saved</h2><p>There were problems with the following fields:</p><ul><li>Author name can't be empty</li></ul></div>) +
|
725
803
|
%(</form>)
|
726
804
|
|
727
|
-
assert_dom_equal expected,
|
805
|
+
assert_dom_equal expected, output_buffer
|
728
806
|
|
729
807
|
end
|
730
808
|
|
731
809
|
# Perhaps this test should be moved to prototype helper tests.
|
732
810
|
def test_remote_form_for_with_labelled_builder
|
733
811
|
self.extend ActionView::Helpers::PrototypeHelper
|
734
|
-
_erbout = ''
|
735
812
|
|
736
813
|
remote_form_for(:post, @post, :builder => LabelledFormBuilder) do |f|
|
737
|
-
|
738
|
-
|
739
|
-
|
814
|
+
concat f.text_field(:title)
|
815
|
+
concat f.text_area(:body)
|
816
|
+
concat f.check_box(:secret)
|
740
817
|
end
|
741
818
|
|
742
819
|
expected =
|
@@ -747,16 +824,14 @@ class FormHelperTest < ActionView::TestCase
|
|
747
824
|
"<input name='post[secret]' type='hidden' value='0' /><br/>" +
|
748
825
|
"</form>"
|
749
826
|
|
750
|
-
assert_dom_equal expected,
|
827
|
+
assert_dom_equal expected, output_buffer
|
751
828
|
end
|
752
829
|
|
753
830
|
def test_fields_for_with_labelled_builder
|
754
|
-
_erbout = ''
|
755
|
-
|
756
831
|
fields_for(:post, @post, :builder => LabelledFormBuilder) do |f|
|
757
|
-
|
758
|
-
|
759
|
-
|
832
|
+
concat f.text_field(:title)
|
833
|
+
concat f.text_area(:body)
|
834
|
+
concat f.check_box(:secret)
|
760
835
|
end
|
761
836
|
|
762
837
|
expected =
|
@@ -765,29 +840,23 @@ class FormHelperTest < ActionView::TestCase
|
|
765
840
|
"<label for='secret'>Secret:</label> <input name='post[secret]' checked='checked' type='checkbox' id='post_secret' value='1' />" +
|
766
841
|
"<input name='post[secret]' type='hidden' value='0' /><br/>"
|
767
842
|
|
768
|
-
assert_dom_equal expected,
|
843
|
+
assert_dom_equal expected, output_buffer
|
769
844
|
end
|
770
845
|
|
771
846
|
def test_form_for_with_html_options_adds_options_to_form_tag
|
772
|
-
_erbout = ''
|
773
|
-
|
774
847
|
form_for(:post, @post, :html => {:id => 'some_form', :class => 'some_class'}) do |f| end
|
775
848
|
expected = "<form action=\"http://www.example.com\" class=\"some_class\" id=\"some_form\" method=\"post\"></form>"
|
776
849
|
|
777
|
-
assert_dom_equal expected,
|
850
|
+
assert_dom_equal expected, output_buffer
|
778
851
|
end
|
779
852
|
|
780
853
|
def test_form_for_with_string_url_option
|
781
|
-
_erbout = ''
|
782
|
-
|
783
854
|
form_for(:post, @post, :url => 'http://www.otherdomain.com') do |f| end
|
784
855
|
|
785
|
-
assert_equal '<form action="http://www.otherdomain.com" method="post"></form>',
|
856
|
+
assert_equal '<form action="http://www.otherdomain.com" method="post"></form>', output_buffer
|
786
857
|
end
|
787
858
|
|
788
859
|
def test_form_for_with_hash_url_option
|
789
|
-
_erbout = ''
|
790
|
-
|
791
860
|
form_for(:post, @post, :url => {:controller => 'controller', :action => 'action'}) do |f| end
|
792
861
|
|
793
862
|
assert_equal 'controller', @controller.url_for_options[:controller]
|
@@ -795,26 +864,20 @@ class FormHelperTest < ActionView::TestCase
|
|
795
864
|
end
|
796
865
|
|
797
866
|
def test_form_for_with_record_url_option
|
798
|
-
_erbout = ''
|
799
|
-
|
800
867
|
form_for(:post, @post, :url => @post) do |f| end
|
801
868
|
|
802
869
|
expected = "<form action=\"/posts/123\" method=\"post\"></form>"
|
803
|
-
assert_equal expected,
|
870
|
+
assert_equal expected, output_buffer
|
804
871
|
end
|
805
872
|
|
806
873
|
def test_form_for_with_existing_object
|
807
|
-
_erbout = ''
|
808
|
-
|
809
874
|
form_for(@post) do |f| end
|
810
875
|
|
811
876
|
expected = "<form action=\"/posts/123\" class=\"edit_post\" id=\"edit_post_123\" method=\"post\"><div style=\"margin:0;padding:0\"><input name=\"_method\" type=\"hidden\" value=\"put\" /></div></form>"
|
812
|
-
assert_equal expected,
|
877
|
+
assert_equal expected, output_buffer
|
813
878
|
end
|
814
879
|
|
815
880
|
def test_form_for_with_new_object
|
816
|
-
_erbout = ''
|
817
|
-
|
818
881
|
post = Post.new
|
819
882
|
post.new_record = true
|
820
883
|
def post.id() nil end
|
@@ -822,67 +885,63 @@ class FormHelperTest < ActionView::TestCase
|
|
822
885
|
form_for(post) do |f| end
|
823
886
|
|
824
887
|
expected = "<form action=\"/posts\" class=\"new_post\" id=\"new_post\" method=\"post\"></form>"
|
825
|
-
assert_equal expected,
|
888
|
+
assert_equal expected, output_buffer
|
826
889
|
end
|
827
890
|
|
828
891
|
def test_form_for_with_existing_object_in_list
|
829
892
|
@post.new_record = false
|
830
893
|
@comment.save
|
831
|
-
|
894
|
+
|
832
895
|
form_for([@post, @comment]) {}
|
833
896
|
|
834
897
|
expected = %(<form action="#{comment_path(@post, @comment)}" class="edit_comment" id="edit_comment_1" method="post"><div style="margin:0;padding:0"><input name="_method" type="hidden" value="put" /></div></form>)
|
835
|
-
assert_dom_equal expected,
|
898
|
+
assert_dom_equal expected, output_buffer
|
836
899
|
end
|
837
900
|
|
838
901
|
def test_form_for_with_new_object_in_list
|
839
902
|
@post.new_record = false
|
840
|
-
|
903
|
+
|
841
904
|
form_for([@post, @comment]) {}
|
842
905
|
|
843
906
|
expected = %(<form action="#{comments_path(@post)}" class="new_comment" id="new_comment" method="post"></form>)
|
844
|
-
assert_dom_equal expected,
|
907
|
+
assert_dom_equal expected, output_buffer
|
845
908
|
end
|
846
909
|
|
847
910
|
def test_form_for_with_existing_object_and_namespace_in_list
|
848
911
|
@post.new_record = false
|
849
912
|
@comment.save
|
850
|
-
|
913
|
+
|
851
914
|
form_for([:admin, @post, @comment]) {}
|
852
915
|
|
853
916
|
expected = %(<form action="#{admin_comment_path(@post, @comment)}" class="edit_comment" id="edit_comment_1" method="post"><div style="margin:0;padding:0"><input name="_method" type="hidden" value="put" /></div></form>)
|
854
|
-
assert_dom_equal expected,
|
917
|
+
assert_dom_equal expected, output_buffer
|
855
918
|
end
|
856
919
|
|
857
920
|
def test_form_for_with_new_object_and_namespace_in_list
|
858
921
|
@post.new_record = false
|
859
|
-
|
922
|
+
|
860
923
|
form_for([:admin, @post, @comment]) {}
|
861
924
|
|
862
925
|
expected = %(<form action="#{admin_comments_path(@post)}" class="new_comment" id="new_comment" method="post"></form>)
|
863
|
-
assert_dom_equal expected,
|
926
|
+
assert_dom_equal expected, output_buffer
|
864
927
|
end
|
865
928
|
|
866
929
|
def test_form_for_with_existing_object_and_custom_url
|
867
|
-
_erbout = ''
|
868
|
-
|
869
930
|
form_for(@post, :url => "/super_posts") do |f| end
|
870
931
|
|
871
932
|
expected = "<form action=\"/super_posts\" class=\"edit_post\" id=\"edit_post_123\" method=\"post\"><div style=\"margin:0;padding:0\"><input name=\"_method\" type=\"hidden\" value=\"put\" /></div></form>"
|
872
|
-
assert_equal expected,
|
933
|
+
assert_equal expected, output_buffer
|
873
934
|
end
|
874
935
|
|
875
936
|
def test_remote_form_for_with_html_options_adds_options_to_form_tag
|
876
937
|
self.extend ActionView::Helpers::PrototypeHelper
|
877
|
-
_erbout = ''
|
878
938
|
|
879
939
|
remote_form_for(:post, @post, :html => {:id => 'some_form', :class => 'some_class'}) do |f| end
|
880
940
|
expected = "<form action=\"http://www.example.com\" class=\"some_class\" id=\"some_form\" method=\"post\" onsubmit=\"new Ajax.Request('http://www.example.com', {asynchronous:true, evalScripts:true, parameters:Form.serialize(this)}); return false;\"></form>"
|
881
941
|
|
882
|
-
assert_dom_equal expected,
|
942
|
+
assert_dom_equal expected, output_buffer
|
883
943
|
end
|
884
944
|
|
885
|
-
|
886
945
|
protected
|
887
946
|
def comments_path(post)
|
888
947
|
"/posts/#{post.id}/comments"
|