roda 2.29.0 → 3.0.0
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.
- checksums.yaml +4 -4
- data/CHANGELOG +52 -0
- data/MIT-LICENSE +1 -1
- data/README.rdoc +51 -109
- data/Rakefile +7 -14
- data/doc/conventions.rdoc +4 -4
- data/doc/release_notes/1.2.0.txt +1 -1
- data/doc/release_notes/3.0.0.txt +84 -0
- data/lib/roda.rb +25 -79
- data/lib/roda/plugins/assets.rb +25 -58
- data/lib/roda/plugins/assets_preloading.rb +0 -5
- data/lib/roda/plugins/backtracking_array.rb +0 -5
- data/lib/roda/plugins/branch_locals.rb +3 -3
- data/lib/roda/plugins/caching.rb +5 -38
- data/lib/roda/plugins/chunked.rb +7 -25
- data/lib/roda/plugins/class_level_routing.rb +2 -2
- data/lib/roda/plugins/content_for.rb +7 -10
- data/lib/roda/plugins/cookies.rb +3 -3
- data/lib/roda/plugins/csrf.rb +2 -2
- data/lib/roda/plugins/delegate.rb +3 -3
- data/lib/roda/plugins/drop_body.rb +0 -7
- data/lib/roda/plugins/empty_root.rb +0 -3
- data/lib/roda/plugins/error_email.rb +4 -6
- data/lib/roda/plugins/error_handler.rb +1 -2
- data/lib/roda/plugins/error_mail.rb +3 -6
- data/lib/roda/plugins/flash.rb +0 -4
- data/lib/roda/plugins/h.rb +5 -0
- data/lib/roda/plugins/hash_matcher.rb +4 -2
- data/lib/roda/plugins/head.rb +5 -7
- data/lib/roda/plugins/header_matchers.rb +12 -33
- data/lib/roda/plugins/heartbeat.rb +2 -7
- data/lib/roda/plugins/indifferent_params.rb +2 -2
- data/lib/roda/plugins/json.rb +6 -14
- data/lib/roda/plugins/json_parser.rb +2 -13
- data/lib/roda/plugins/mailer.rb +29 -39
- data/lib/roda/plugins/match_affix.rb +0 -5
- data/lib/roda/plugins/middleware.rb +10 -15
- data/lib/roda/plugins/multi_route.rb +8 -5
- data/lib/roda/plugins/multi_run.rb +1 -0
- data/lib/roda/plugins/named_templates.rb +2 -2
- data/lib/roda/plugins/optimized_string_matchers.rb +0 -3
- data/lib/roda/plugins/padrino_render.rb +6 -9
- data/lib/roda/plugins/param_matchers.rb +6 -6
- data/lib/roda/plugins/params_capturing.rb +15 -35
- data/lib/roda/plugins/partials.rb +3 -8
- data/lib/roda/plugins/path.rb +5 -5
- data/lib/roda/plugins/path_matchers.rb +3 -3
- data/lib/roda/plugins/path_rewriter.rb +4 -9
- data/lib/roda/plugins/placeholder_string_matchers.rb +1 -1
- data/lib/roda/plugins/precompile_templates.rb +10 -20
- data/lib/roda/plugins/public.rb +6 -9
- data/lib/roda/plugins/render.rb +50 -171
- data/lib/roda/plugins/render_each.rb +4 -7
- data/lib/roda/plugins/render_locals.rb +6 -20
- data/lib/roda/plugins/request_headers.rb +2 -4
- data/lib/roda/plugins/run_append_slash.rb +1 -4
- data/lib/roda/plugins/run_handler.rb +4 -7
- data/lib/roda/plugins/shared_vars.rb +3 -6
- data/lib/roda/plugins/sinatra_helpers.rb +11 -40
- data/lib/roda/plugins/slash_path_empty.rb +0 -3
- data/lib/roda/plugins/static.rb +2 -2
- data/lib/roda/plugins/static_routing.rb +2 -3
- data/lib/roda/plugins/streaming.rb +15 -108
- data/lib/roda/plugins/strip_path_prefix.rb +1 -1
- data/lib/roda/plugins/symbol_matchers.rb +7 -23
- data/lib/roda/plugins/type_routing.rb +4 -9
- data/lib/roda/plugins/view_options.rb +10 -66
- data/lib/roda/version.rb +2 -2
- data/spec/all.rb +0 -2
- data/spec/composition_spec.rb +1 -1
- data/spec/env_spec.rb +1 -1
- data/spec/freeze_spec.rb +1 -1
- data/spec/integration_spec.rb +1 -1
- data/spec/matchers_spec.rb +26 -70
- data/spec/opts_spec.rb +1 -1
- data/spec/plugin/all_verbs_spec.rb +1 -1
- data/spec/plugin/assets_preloading_spec.rb +1 -1
- data/spec/plugin/assets_spec.rb +43 -27
- data/spec/plugin/backtracking_array_spec.rb +1 -1
- data/spec/plugin/branch_locals_spec.rb +1 -1
- data/spec/plugin/caching_spec.rb +1 -1
- data/spec/plugin/chunked_spec.rb +1 -1
- data/spec/plugin/class_level_routing_spec.rb +1 -1
- data/spec/plugin/class_matchers_spec.rb +1 -1
- data/spec/plugin/content_for_spec.rb +2 -7
- data/spec/plugin/cookies_spec.rb +1 -1
- data/spec/plugin/csrf_spec.rb +1 -1
- data/spec/plugin/default_headers_spec.rb +1 -1
- data/spec/plugin/default_status_spec.rb +1 -1
- data/spec/plugin/delay_build_spec.rb +1 -1
- data/spec/plugin/delegate_spec.rb +1 -1
- data/spec/plugin/delete_empty_headers_spec.rb +1 -1
- data/spec/plugin/disallow_file_uploads_spec.rb +2 -2
- data/spec/plugin/drop_body_spec.rb +1 -1
- data/spec/plugin/empty_root_spec.rb +1 -1
- data/spec/plugin/environments_spec.rb +1 -1
- data/spec/plugin/error_email_spec.rb +1 -1
- data/spec/plugin/error_handler_spec.rb +1 -1
- data/spec/plugin/error_mail_spec.rb +2 -2
- data/spec/plugin/flash_spec.rb +1 -1
- data/spec/plugin/h_spec.rb +1 -1
- data/spec/plugin/halt_spec.rb +2 -2
- data/spec/plugin/hash_matcher_spec.rb +1 -1
- data/spec/plugin/head_spec.rb +1 -1
- data/spec/plugin/header_matchers_spec.rb +4 -47
- data/spec/plugin/heartbeat_spec.rb +1 -1
- data/spec/plugin/hooks_spec.rb +1 -1
- data/spec/plugin/indifferent_params_spec.rb +1 -1
- data/spec/plugin/json_parser_spec.rb +12 -1
- data/spec/plugin/json_spec.rb +8 -1
- data/spec/plugin/mailer_spec.rb +1 -1
- data/spec/plugin/match_affix_spec.rb +1 -1
- data/spec/plugin/middleware_spec.rb +15 -1
- data/spec/plugin/module_include_spec.rb +1 -1
- data/spec/plugin/multi_route_spec.rb +5 -3
- data/spec/plugin/multi_run_spec.rb +1 -1
- data/spec/plugin/multi_view_spec.rb +1 -1
- data/spec/plugin/named_templates_spec.rb +1 -1
- data/spec/plugin/not_allowed_spec.rb +1 -1
- data/spec/plugin/not_found_spec.rb +1 -1
- data/spec/plugin/optimized_string_matchers_spec.rb +1 -1
- data/spec/plugin/padrino_render_spec.rb +1 -1
- data/spec/plugin/param_matchers_spec.rb +1 -1
- data/spec/plugin/params_capturing_spec.rb +6 -22
- data/spec/plugin/partials_spec.rb +1 -1
- data/spec/plugin/pass_spec.rb +1 -1
- data/spec/plugin/path_matchers_spec.rb +1 -1
- data/spec/plugin/path_rewriter_spec.rb +1 -1
- data/spec/plugin/path_spec.rb +1 -1
- data/spec/plugin/placeholder_string_matchers_spec.rb +3 -36
- data/spec/plugin/precompile_templates_spec.rb +1 -17
- data/spec/plugin/public_spec.rb +3 -4
- data/spec/plugin/render_each_spec.rb +1 -1
- data/spec/plugin/render_locals_spec.rb +1 -1
- data/spec/plugin/render_spec.rb +28 -114
- data/spec/plugin/request_headers_spec.rb +1 -1
- data/spec/plugin/response_request_spec.rb +1 -1
- data/spec/plugin/run_append_slash_spec.rb +1 -1
- data/spec/plugin/run_handler_spec.rb +1 -1
- data/spec/plugin/shared_vars_spec.rb +1 -1
- data/spec/plugin/sinatra_helpers_spec.rb +1 -1
- data/spec/plugin/slash_path_empty_spec.rb +1 -1
- data/spec/plugin/static_routing_spec.rb +1 -1
- data/spec/plugin/static_spec.rb +1 -1
- data/spec/plugin/status_303_spec.rb +1 -1
- data/spec/plugin/status_handler_spec.rb +1 -1
- data/spec/plugin/streaming_spec.rb +1 -106
- data/spec/plugin/strip_path_prefix_spec.rb +1 -1
- data/spec/plugin/symbol_matchers_spec.rb +1 -77
- data/spec/plugin/symbol_status_spec.rb +1 -1
- data/spec/plugin/symbol_views_spec.rb +1 -1
- data/spec/plugin/type_routing_spec.rb +1 -1
- data/spec/plugin/unescape_path_spec.rb +1 -1
- data/spec/plugin/view_options_spec.rb +16 -110
- data/spec/plugin_spec.rb +1 -1
- data/spec/redirect_spec.rb +1 -1
- data/spec/request_spec.rb +1 -1
- data/spec/response_spec.rb +1 -1
- data/spec/session_spec.rb +1 -1
- data/spec/spec_helper.rb +1 -3
- data/spec/version_spec.rb +1 -1
- metadata +6 -26
- data/lib/roda/plugins/_erubis_escaping.rb +0 -59
- data/lib/roda/plugins/per_thread_caching.rb +0 -71
- data/lib/roda/plugins/static_path_info.rb +0 -12
- data/lib/roda/plugins/view_subdirs.rb +0 -7
- data/lib/roda/plugins/websockets.rb +0 -107
- data/spec/plugin/_erubis_escaping_spec.rb +0 -97
- data/spec/plugin/per_thread_caching_spec.rb +0 -28
- data/spec/plugin/websockets_spec.rb +0 -84
data/spec/plugin/assets_spec.rb
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
require_relative "../spec_helper"
|
|
2
2
|
require 'fileutils'
|
|
3
3
|
|
|
4
4
|
run_tests = true
|
|
@@ -283,10 +283,10 @@ if run_tests
|
|
|
283
283
|
app.compile_assets
|
|
284
284
|
html = body('/test')
|
|
285
285
|
html.scan(/<link/).length.must_equal 1
|
|
286
|
-
html =~ %r{href="(/assets/app\.[a-f0-9]{
|
|
286
|
+
html =~ %r{href="(/assets/app\.[a-f0-9]{64}\.css)"}
|
|
287
287
|
css = body($1)
|
|
288
288
|
html.scan(/<script/).length.must_equal 1
|
|
289
|
-
html =~ %r{src="(/assets/app\.head\.[a-f0-9]{
|
|
289
|
+
html =~ %r{src="(/assets/app\.head\.[a-f0-9]{64}\.js)"}
|
|
290
290
|
js = body($1)
|
|
291
291
|
css.must_match(/color: ?red/)
|
|
292
292
|
css.must_match(/color: ?blue/)
|
|
@@ -294,7 +294,7 @@ if run_tests
|
|
|
294
294
|
end
|
|
295
295
|
|
|
296
296
|
[[:sha256, 64, 44], [:sha384, 96, 64], [:sha512, 128, 88]].each do |algo, hex_length, base64_length|
|
|
297
|
-
it "should handle :sri option for subresource integrity
|
|
297
|
+
it "should handle :sri option for subresource integrity #{algo} when compiling assets" do
|
|
298
298
|
app.plugin :assets, :sri=>algo
|
|
299
299
|
app.compile_assets
|
|
300
300
|
html = body('/test')
|
|
@@ -318,14 +318,30 @@ if run_tests
|
|
|
318
318
|
end
|
|
319
319
|
end
|
|
320
320
|
|
|
321
|
+
it "should handle :sri=>nil option for to disable subresource integrity when compiling assets" do
|
|
322
|
+
app.plugin :assets, :sri=>nil
|
|
323
|
+
app.compile_assets
|
|
324
|
+
html = body('/test')
|
|
325
|
+
html.scan(/<link/).length.must_equal 1
|
|
326
|
+
html.scan(/<script/).length.must_equal 1
|
|
327
|
+
html.wont_match %r|et" integrity="|
|
|
328
|
+
html =~ %r|href="(/assets/app\.[a-f0-9]{64}\.css)"|
|
|
329
|
+
css = body($1)
|
|
330
|
+
html =~ %r|src="(/assets/app\.head\.[a-f0-9]{64}\.js)"|
|
|
331
|
+
js = body($1)
|
|
332
|
+
css.must_match(/color: ?red/)
|
|
333
|
+
css.must_match(/color: ?blue/)
|
|
334
|
+
js.must_include('console.log')
|
|
335
|
+
end
|
|
336
|
+
|
|
321
337
|
it 'should handle linking to compiled assets when a compiled asset host is used' do
|
|
322
338
|
app.plugin :assets, :compiled_asset_host=>'https://cdn.example.com'
|
|
323
339
|
app.compile_assets
|
|
324
340
|
html = body('/test')
|
|
325
341
|
html.scan(/<link/).length.must_equal 1
|
|
326
|
-
html.must_match %r{href="https://cdn\.example\.com/assets/app\.[a-f0-9]{
|
|
342
|
+
html.must_match %r{href="https://cdn\.example\.com/assets/app\.[a-f0-9]{64}\.css"}
|
|
327
343
|
html.scan(/<script/).length.must_equal 1
|
|
328
|
-
html.must_match %r{src="https://cdn\.example\.com/assets/app\.head\.[a-f0-9]{
|
|
344
|
+
html.must_match %r{src="https://cdn\.example\.com/assets/app\.head\.[a-f0-9]{64}\.js"}
|
|
329
345
|
end
|
|
330
346
|
|
|
331
347
|
it 'should handle compiling assets, linking to them, and accepting requests for them when :gzip is set' do
|
|
@@ -333,10 +349,10 @@ if run_tests
|
|
|
333
349
|
app.compile_assets
|
|
334
350
|
html = body('/test')
|
|
335
351
|
html.scan(/<link/).length.must_equal 1
|
|
336
|
-
html =~ %r{href="(/assets/app\.[a-f0-9]{
|
|
352
|
+
html =~ %r{href="(/assets/app\.[a-f0-9]{64}\.css)"}
|
|
337
353
|
css_path = $1
|
|
338
354
|
html.scan(/<script/).length.must_equal 1
|
|
339
|
-
html =~ %r{src="(/assets/app\.head\.[a-f0-9]{
|
|
355
|
+
html =~ %r{src="(/assets/app\.head\.[a-f0-9]{64}\.js)"}
|
|
340
356
|
js_path = $1
|
|
341
357
|
|
|
342
358
|
css = body(css_path)
|
|
@@ -357,10 +373,10 @@ if run_tests
|
|
|
357
373
|
app.plugin :assets
|
|
358
374
|
app.compile_assets
|
|
359
375
|
html = body('/test', 'SCRIPT_NAME'=>'/foo')
|
|
360
|
-
html =~ %r{href="/foo(/assets/app\.[a-f0-9]{
|
|
376
|
+
html =~ %r{href="/foo(/assets/app\.[a-f0-9]{64}\.css)"}
|
|
361
377
|
css = body($1)
|
|
362
378
|
html.scan(/<script/).length.must_equal 1
|
|
363
|
-
html =~ %r{src="/foo(/assets/app\.head\.[a-f0-9]{
|
|
379
|
+
html =~ %r{src="/foo(/assets/app\.head\.[a-f0-9]{64}\.js)"}
|
|
364
380
|
js = body($1)
|
|
365
381
|
css.must_match(/color: ?red/)
|
|
366
382
|
css.must_match(/color: ?blue/)
|
|
@@ -373,10 +389,10 @@ if run_tests
|
|
|
373
389
|
app.compile_assets
|
|
374
390
|
html = body('/test')
|
|
375
391
|
html.scan(/<link/).length.must_equal 1
|
|
376
|
-
html =~ %r{href="(/a/bar/app\.[a-f0-9]{
|
|
392
|
+
html =~ %r{href="(/a/bar/app\.[a-f0-9]{64}\.css)"}
|
|
377
393
|
css = body($1)
|
|
378
394
|
html.scan(/<script/).length.must_equal 1
|
|
379
|
-
html =~ %r{src="(/a/foo/app\.head\.[a-f0-9]{
|
|
395
|
+
html =~ %r{src="(/a/foo/app\.head\.[a-f0-9]{64}\.js)"}
|
|
380
396
|
js = body($1)
|
|
381
397
|
css.must_match(/color: ?red/)
|
|
382
398
|
css.must_match(/color: ?blue/)
|
|
@@ -395,10 +411,10 @@ if run_tests
|
|
|
395
411
|
end
|
|
396
412
|
html = body('/test')
|
|
397
413
|
html.scan(/<link/).length.must_equal 1
|
|
398
|
-
html =~ %r{href="(/assets/app\.assets\.css\.[a-f0-9]{
|
|
414
|
+
html =~ %r{href="(/assets/app\.assets\.css\.[a-f0-9]{64}\.css)"}
|
|
399
415
|
css = body($1)
|
|
400
416
|
html.scan(/<script/).length.must_equal 1
|
|
401
|
-
html =~ %r{src="(/assets/app\.assets\.js\.head\.[a-f0-9]{
|
|
417
|
+
html =~ %r{src="(/assets/app\.assets\.js\.head\.[a-f0-9]{64}\.js)"}
|
|
402
418
|
js = body($1)
|
|
403
419
|
css.must_match(/color: ?red/)
|
|
404
420
|
css.must_match(/color: ?blue/)
|
|
@@ -418,10 +434,10 @@ if run_tests
|
|
|
418
434
|
end
|
|
419
435
|
html = body('/test', 'SCRIPT_NAME'=>'/foo')
|
|
420
436
|
html.scan(/<link/).length.must_equal 1
|
|
421
|
-
html =~ %r{href="/foo(/assets/app\.assets\.css\.[a-f0-9]{
|
|
437
|
+
html =~ %r{href="/foo(/assets/app\.assets\.css\.[a-f0-9]{64}\.css)"}
|
|
422
438
|
css = body($1)
|
|
423
439
|
html.scan(/<script/).length.must_equal 1
|
|
424
|
-
html =~ %r{src="/foo(/assets/app\.assets\.js\.head\.[a-f0-9]{
|
|
440
|
+
html =~ %r{src="/foo(/assets/app\.assets\.js\.head\.[a-f0-9]{64}\.js)"}
|
|
425
441
|
js = body($1)
|
|
426
442
|
css.must_match(/color: ?red/)
|
|
427
443
|
css.must_match(/color: ?blue/)
|
|
@@ -440,10 +456,10 @@ if run_tests
|
|
|
440
456
|
end
|
|
441
457
|
html = body('/test')
|
|
442
458
|
html.scan(/<link/).length.must_equal 1
|
|
443
|
-
html =~ %r{href="(/assets/app\.assets\.css\.[a-f0-9]{
|
|
459
|
+
html =~ %r{href="(/assets/app\.assets\.css\.[a-f0-9]{64}\.css)"}
|
|
444
460
|
css = body($1)
|
|
445
461
|
html.scan(/<script/).length.must_equal 1
|
|
446
|
-
html =~ %r{src="(/assets/app\.assets\.js\.head\.[a-f0-9]{
|
|
462
|
+
html =~ %r{src="(/assets/app\.assets\.js\.head\.[a-f0-9]{64}\.js)"}
|
|
447
463
|
js = body($1)
|
|
448
464
|
css.must_match(/color: ?red/)
|
|
449
465
|
css.must_match(/color: ?blue/)
|
|
@@ -455,10 +471,10 @@ if run_tests
|
|
|
455
471
|
app.compile_assets
|
|
456
472
|
html = body('/test')
|
|
457
473
|
html.scan(/<link/).length.must_equal 1
|
|
458
|
-
html =~ %r{href="(/assets/app\.[a-f0-9]{
|
|
474
|
+
html =~ %r{href="(/assets/app\.[a-f0-9]{64}\.css)"}
|
|
459
475
|
css = body($1)
|
|
460
476
|
html.scan(/<script/).length.must_equal 1
|
|
461
|
-
html =~ %r{src="(/assets/app\.head\.[a-f0-9]{
|
|
477
|
+
html =~ %r{src="(/assets/app\.head\.[a-f0-9]{64}\.js)"}
|
|
462
478
|
js = body($1)
|
|
463
479
|
css.must_match(/color: ?red/)
|
|
464
480
|
css.must_match(/color: ?blue/)
|
|
@@ -469,7 +485,7 @@ if run_tests
|
|
|
469
485
|
app.compile_assets(:css)
|
|
470
486
|
html = body('/test')
|
|
471
487
|
html.scan(/<link/).length.must_equal 1
|
|
472
|
-
html =~ %r{href="(/assets/app\.[a-f0-9]{
|
|
488
|
+
html =~ %r{href="(/assets/app\.[a-f0-9]{64}\.css)"}
|
|
473
489
|
css = body($1)
|
|
474
490
|
html.scan(/<script/).length.must_equal 0
|
|
475
491
|
css.must_match(/color: ?red/)
|
|
@@ -481,7 +497,7 @@ if run_tests
|
|
|
481
497
|
html = body('/test')
|
|
482
498
|
html.scan(/<link/).length.must_equal 0
|
|
483
499
|
html.scan(/<script/).length.must_equal 1
|
|
484
|
-
html =~ %r{src="(/assets/app\.head\.[a-f0-9]{
|
|
500
|
+
html =~ %r{src="(/assets/app\.head\.[a-f0-9]{64}\.js)"}
|
|
485
501
|
js = body($1)
|
|
486
502
|
js.must_include('console.log')
|
|
487
503
|
end
|
|
@@ -491,7 +507,7 @@ if run_tests
|
|
|
491
507
|
html = body('/test')
|
|
492
508
|
html.scan(/<link/).length.must_equal 0
|
|
493
509
|
html.scan(/<script/).length.must_equal 1
|
|
494
|
-
html =~ %r{src="(/assets/app\.head\.[a-f0-9]{
|
|
510
|
+
html =~ %r{src="(/assets/app\.head\.[a-f0-9]{64}\.js)"}
|
|
495
511
|
js = body($1)
|
|
496
512
|
js.must_include('console.log')
|
|
497
513
|
end
|
|
@@ -502,7 +518,7 @@ if run_tests
|
|
|
502
518
|
html = body('/test')
|
|
503
519
|
html.scan(/<link/).length.must_equal 0
|
|
504
520
|
html.scan(/<script/).length.must_equal 1
|
|
505
|
-
html =~ %r{src="(/assets/app\.head\.[a-f0-9]{
|
|
521
|
+
html =~ %r{src="(/assets/app\.head\.[a-f0-9]{64}\.js)"}
|
|
506
522
|
js = body($1)
|
|
507
523
|
js.must_include('console.log')
|
|
508
524
|
end
|
|
@@ -513,7 +529,7 @@ if run_tests
|
|
|
513
529
|
html = body('/test')
|
|
514
530
|
html.scan(/<link/).length.must_equal 0
|
|
515
531
|
html.scan(/<script/).length.must_equal 1
|
|
516
|
-
html =~ %r{src="(/assets/app\.head\.[a-f0-9]{
|
|
532
|
+
html =~ %r{src="(/assets/app\.head\.[a-f0-9]{64}\.js)"}
|
|
517
533
|
js = body($1)
|
|
518
534
|
js.must_include('console.log')
|
|
519
535
|
end
|
|
@@ -612,13 +628,13 @@ if run_tests
|
|
|
612
628
|
|
|
613
629
|
app.compile_assets
|
|
614
630
|
File.exist?(metadata_file).must_equal true
|
|
615
|
-
app.allocate.assets([:js, :head]).must_match %r{src="(/assets/app\.head\.[a-f0-9]{
|
|
631
|
+
app.allocate.assets([:js, :head]).must_match %r{src="(/assets/app\.head\.[a-f0-9]{64}\.js)"}
|
|
616
632
|
|
|
617
633
|
app.plugin :assets, :compiled=>false, :precompiled=>false
|
|
618
634
|
app.allocate.assets([:js, :head]).must_equal '<script type="text/javascript" src="/assets/js/head/app.js"></script>'
|
|
619
635
|
|
|
620
636
|
app.plugin :assets, :precompiled=>metadata_file
|
|
621
|
-
app.allocate.assets([:js, :head]).must_match %r{src="(/assets/app\.head\.[a-f0-9]{
|
|
637
|
+
app.allocate.assets([:js, :head]).must_match %r{src="(/assets/app\.head\.[a-f0-9]{64}\.js)"}
|
|
622
638
|
end
|
|
623
639
|
|
|
624
640
|
it 'should work correctly with json plugin when r.assets is the last method called' do
|
data/spec/plugin/caching_spec.rb
CHANGED
data/spec/plugin/chunked_spec.rb
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
require_relative "../spec_helper"
|
|
2
2
|
|
|
3
3
|
begin
|
|
4
4
|
require 'tilt/erb'
|
|
@@ -52,18 +52,13 @@ describe "content_for plugin with multiple calls to the same key" do
|
|
|
52
52
|
end
|
|
53
53
|
end
|
|
54
54
|
|
|
55
|
-
deprecated "should replace with multiple calls to the same key by default" do
|
|
56
|
-
body.strip.must_equal "bar baz"
|
|
57
|
-
end
|
|
58
|
-
|
|
59
55
|
it "should replace with multiple calls to the same key if :append=>false plugin option is used" do
|
|
60
56
|
app.plugin :content_for, :append => false
|
|
61
57
|
body.strip.must_equal "bar baz"
|
|
62
58
|
end
|
|
63
59
|
|
|
64
|
-
# RODA3: Make default behavior
|
|
65
60
|
it "should append with multiple calls to the same key if :append=>true plugin option is used" do
|
|
66
|
-
app.plugin :content_for
|
|
61
|
+
app.plugin :content_for
|
|
67
62
|
body.strip.must_equal "bar foobaz"
|
|
68
63
|
end
|
|
69
64
|
end
|
data/spec/plugin/cookies_spec.rb
CHANGED
data/spec/plugin/csrf_spec.rb
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
require_relative "../spec_helper"
|
|
2
2
|
|
|
3
3
|
if Rack.release < '1.6'
|
|
4
4
|
warn "Rack #{Rack.release} used, skipping disallow_file_uploads plugin test"
|
|
@@ -6,7 +6,7 @@ else
|
|
|
6
6
|
describe "disallow_file_uploads plugin" do
|
|
7
7
|
it "disallows the uploading of files" do
|
|
8
8
|
app do |r|
|
|
9
|
-
r['foo'][:tempfile].read
|
|
9
|
+
r.params['foo'][:tempfile].read
|
|
10
10
|
end
|
|
11
11
|
|
|
12
12
|
request_body = StringIO.new("------WebKitFormBoundarymwHIM9XjTTVHn3YP\r\nContent-Disposition: form-data; name=\"foo\"; filename=\"bar.txt\"\r\nContent-Type: text/plain\r\n\r\nfoo\n\r\n------WebKitFormBoundarymwHIM9XjTTVHn3YP--\r\n")
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
require_relative "../spec_helper"
|
|
2
2
|
|
|
3
3
|
begin
|
|
4
4
|
require 'mail'
|
|
@@ -11,7 +11,7 @@ end
|
|
|
11
11
|
|
|
12
12
|
describe "error_mail plugin" do
|
|
13
13
|
def app(opts={})
|
|
14
|
-
@emails =
|
|
14
|
+
@emails = [] unless defined?(@emails)
|
|
15
15
|
@app ||= super(:bare) do
|
|
16
16
|
plugin :error_mail, {:to=>'t', :from=>'f'}.merge(opts)
|
|
17
17
|
|
data/spec/plugin/flash_spec.rb
CHANGED
data/spec/plugin/h_spec.rb
CHANGED
data/spec/plugin/halt_spec.rb
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
require_relative "../spec_helper"
|
|
2
2
|
|
|
3
3
|
describe "halt plugin" do
|
|
4
4
|
it "should still have halt return rack response as argument given it as argument" do
|
|
@@ -109,7 +109,7 @@ describe "halt plugin" do
|
|
|
109
109
|
proc{req}.must_raise(Roda::RodaError)
|
|
110
110
|
end
|
|
111
111
|
|
|
112
|
-
|
|
112
|
+
it "should raise an error for single argument not integer, String, or Array" do
|
|
113
113
|
app(:halt) do |r|
|
|
114
114
|
r.halt('a'=>'b')
|
|
115
115
|
end
|
data/spec/plugin/head_spec.rb
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
require_relative "../spec_helper"
|
|
2
2
|
|
|
3
3
|
describe "accept matcher" do
|
|
4
4
|
it "should accept mimetypes and set response Content-Type" do
|
|
@@ -14,10 +14,9 @@ describe "accept matcher" do
|
|
|
14
14
|
end
|
|
15
15
|
|
|
16
16
|
describe "header matcher" do
|
|
17
|
-
|
|
18
|
-
deprecated "should match if header present" do
|
|
17
|
+
it "should match if header present" do
|
|
19
18
|
app(:header_matchers) do |r|
|
|
20
|
-
r.on :header=>"
|
|
19
|
+
r.on :header=>"accept" do
|
|
21
20
|
"bar"
|
|
22
21
|
end
|
|
23
22
|
end
|
|
@@ -38,22 +37,6 @@ describe "header matcher" do
|
|
|
38
37
|
body("HTTP_ACCEPT" => "application/xml").must_equal "bar-application/xml"
|
|
39
38
|
status.must_equal 404
|
|
40
39
|
end
|
|
41
|
-
|
|
42
|
-
# RODA3: Remove
|
|
43
|
-
it "should automatically use HTTP prefix for headers if :header_matcher_prefix is set" do
|
|
44
|
-
app(:bare) do
|
|
45
|
-
plugin :header_matchers
|
|
46
|
-
opts[:header_matcher_prefix] = true
|
|
47
|
-
route do |r|
|
|
48
|
-
r.on :header=>"accept" do |v|
|
|
49
|
-
"bar-#{v}"
|
|
50
|
-
end
|
|
51
|
-
end
|
|
52
|
-
end
|
|
53
|
-
|
|
54
|
-
body("HTTP_ACCEPT" => "application/xml").must_equal "bar-application/xml"
|
|
55
|
-
status("ACCEPT"=>"application/xml").must_equal 404
|
|
56
|
-
end
|
|
57
40
|
end
|
|
58
41
|
|
|
59
42
|
describe "host matcher" do
|
|
@@ -68,8 +51,7 @@ describe "host matcher" do
|
|
|
68
51
|
status("HTTP_HOST" => "foo.com").must_equal 404
|
|
69
52
|
end
|
|
70
53
|
|
|
71
|
-
|
|
72
|
-
deprecated "should match a host with a regexp" do
|
|
54
|
+
it "should match a host with a regexp" do
|
|
73
55
|
app(:header_matchers) do |r|
|
|
74
56
|
r.on :host=>/example/ do
|
|
75
57
|
"worked"
|
|
@@ -90,17 +72,6 @@ describe "host matcher" do
|
|
|
90
72
|
body("HTTP_HOST" => "example.com").must_equal '0'
|
|
91
73
|
end
|
|
92
74
|
|
|
93
|
-
deprecated "doesn't yield host if passed a regexp" do
|
|
94
|
-
app(:header_matchers) do |r|
|
|
95
|
-
r.on :host=>/\A(.*)\.example\.com\z/ do |*m|
|
|
96
|
-
m.empty? ? '0' : m[0]
|
|
97
|
-
end
|
|
98
|
-
end
|
|
99
|
-
|
|
100
|
-
body("HTTP_HOST" => "foo.example.com").must_equal '0'
|
|
101
|
-
end
|
|
102
|
-
|
|
103
|
-
# RODA3: Remove :host_matcher_captures setting
|
|
104
75
|
it "yields host if passed a regexp and opts[:host_matcher_captures] is set" do
|
|
105
76
|
app(:header_matchers) do |r|
|
|
106
77
|
r.on :host=>/\A(.*)\.example\.com\z/ do |*m|
|
|
@@ -108,22 +79,8 @@ describe "host matcher" do
|
|
|
108
79
|
end
|
|
109
80
|
end
|
|
110
81
|
|
|
111
|
-
app.opts[:host_matcher_captures] = true
|
|
112
82
|
body("HTTP_HOST" => "foo.example.com").must_equal 'foo'
|
|
113
83
|
end
|
|
114
|
-
|
|
115
|
-
# RODA3: Remove
|
|
116
|
-
it "doesn't yields host if passed a string and opts[:host_matcher_captures] is set" do
|
|
117
|
-
app(:header_matchers) do |r|
|
|
118
|
-
r.on :host=>'example.com' do |*m|
|
|
119
|
-
m.empty? ? '0' : m[0]
|
|
120
|
-
end
|
|
121
|
-
end
|
|
122
|
-
|
|
123
|
-
body("HTTP_HOST" => "example.com").must_equal '0'
|
|
124
|
-
app.opts[:host_matcher_captures] = true
|
|
125
|
-
body("HTTP_HOST" => "example.com").must_equal '0'
|
|
126
|
-
end
|
|
127
84
|
end
|
|
128
85
|
|
|
129
86
|
describe "user_agent matcher" do
|