roda 3.28.0 → 3.29.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 +10 -0
- data/README.rdoc +10 -0
- data/doc/release_notes/3.29.0.txt +15 -0
- data/lib/roda.rb +1 -0
- data/lib/roda/plugins/caching.rb +2 -0
- data/lib/roda/plugins/common_logger.rb +1 -1
- data/lib/roda/plugins/exception_page.rb +7 -1
- data/lib/roda/plugins/indifferent_params.rb +2 -0
- data/lib/roda/version.rb +1 -1
- metadata +4 -214
- data/Rakefile +0 -108
- data/doc/release_notes/1.0.0.txt +0 -329
- data/doc/release_notes/1.1.0.txt +0 -226
- data/doc/release_notes/1.2.0.txt +0 -406
- data/doc/release_notes/1.3.0.txt +0 -109
- data/doc/release_notes/2.0.0.txt +0 -75
- data/doc/release_notes/2.1.0.txt +0 -124
- data/doc/release_notes/2.10.0.txt +0 -27
- data/doc/release_notes/2.11.0.txt +0 -70
- data/doc/release_notes/2.12.0.txt +0 -40
- data/doc/release_notes/2.13.0.txt +0 -10
- data/doc/release_notes/2.14.0.txt +0 -44
- data/doc/release_notes/2.15.0.txt +0 -53
- data/doc/release_notes/2.16.0.txt +0 -48
- data/doc/release_notes/2.17.0.txt +0 -62
- data/doc/release_notes/2.18.0.txt +0 -69
- data/doc/release_notes/2.19.0.txt +0 -30
- data/doc/release_notes/2.2.0.txt +0 -97
- data/doc/release_notes/2.20.0.txt +0 -5
- data/doc/release_notes/2.21.0.txt +0 -17
- data/doc/release_notes/2.22.0.txt +0 -41
- data/doc/release_notes/2.23.0.txt +0 -29
- data/doc/release_notes/2.24.0.txt +0 -65
- data/doc/release_notes/2.25.0.txt +0 -14
- data/doc/release_notes/2.26.0.txt +0 -13
- data/doc/release_notes/2.27.0.txt +0 -56
- data/doc/release_notes/2.28.0.txt +0 -17
- data/doc/release_notes/2.29.0.txt +0 -156
- data/doc/release_notes/2.3.0.txt +0 -109
- data/doc/release_notes/2.4.0.txt +0 -55
- data/doc/release_notes/2.5.0.txt +0 -23
- data/doc/release_notes/2.5.1.txt +0 -4
- data/doc/release_notes/2.6.0.txt +0 -21
- data/doc/release_notes/2.7.0.txt +0 -75
- data/doc/release_notes/2.8.0.txt +0 -44
- data/doc/release_notes/2.9.0.txt +0 -6
- data/spec/all.rb +0 -1
- data/spec/assets/css/app.scss +0 -1
- data/spec/assets/css/no_access.css +0 -1
- data/spec/assets/css/raw.css +0 -1
- data/spec/assets/js/head/app.js +0 -1
- data/spec/composition_spec.rb +0 -31
- data/spec/define_roda_method_spec.rb +0 -274
- data/spec/env_spec.rb +0 -11
- data/spec/freeze_spec.rb +0 -37
- data/spec/integration_spec.rb +0 -209
- data/spec/matchers_spec.rb +0 -832
- data/spec/opts_spec.rb +0 -42
- data/spec/plugin/_after_hook_spec.rb +0 -19
- data/spec/plugin/all_verbs_spec.rb +0 -29
- data/spec/plugin/assets_preloading_spec.rb +0 -98
- data/spec/plugin/assets_spec.rb +0 -745
- data/spec/plugin/backtracking_array_spec.rb +0 -42
- data/spec/plugin/branch_locals_spec.rb +0 -106
- data/spec/plugin/caching_spec.rb +0 -337
- data/spec/plugin/chunked_spec.rb +0 -201
- data/spec/plugin/class_level_routing_spec.rb +0 -164
- data/spec/plugin/class_matchers_spec.rb +0 -40
- data/spec/plugin/common_logger_spec.rb +0 -85
- data/spec/plugin/content_for_spec.rb +0 -162
- data/spec/plugin/content_security_policy_spec.rb +0 -175
- data/spec/plugin/cookies_spec.rb +0 -51
- data/spec/plugin/csrf_spec.rb +0 -111
- data/spec/plugin/default_headers_spec.rb +0 -82
- data/spec/plugin/default_status_spec.rb +0 -95
- data/spec/plugin/delay_build_spec.rb +0 -23
- data/spec/plugin/delegate_spec.rb +0 -23
- data/spec/plugin/delete_empty_headers_spec.rb +0 -27
- data/spec/plugin/direct_call_spec.rb +0 -28
- data/spec/plugin/disallow_file_uploads_spec.rb +0 -25
- data/spec/plugin/drop_body_spec.rb +0 -24
- data/spec/plugin/early_hints_spec.rb +0 -19
- data/spec/plugin/empty_root_spec.rb +0 -14
- data/spec/plugin/environments_spec.rb +0 -42
- data/spec/plugin/error_email_spec.rb +0 -97
- data/spec/plugin/error_handler_spec.rb +0 -216
- data/spec/plugin/error_mail_spec.rb +0 -93
- data/spec/plugin/exception_page_spec.rb +0 -168
- data/spec/plugin/flash_spec.rb +0 -121
- data/spec/plugin/h_spec.rb +0 -11
- data/spec/plugin/halt_spec.rb +0 -119
- data/spec/plugin/hash_matcher_spec.rb +0 -27
- data/spec/plugin/hash_routes_spec.rb +0 -535
- data/spec/plugin/head_spec.rb +0 -52
- data/spec/plugin/header_matchers_spec.rb +0 -98
- data/spec/plugin/heartbeat_spec.rb +0 -74
- data/spec/plugin/hooks_spec.rb +0 -152
- data/spec/plugin/indifferent_params_spec.rb +0 -14
- data/spec/plugin/json_parser_spec.rb +0 -141
- data/spec/plugin/json_spec.rb +0 -83
- data/spec/plugin/mail_processor_spec.rb +0 -451
- data/spec/plugin/mailer_spec.rb +0 -282
- data/spec/plugin/match_affix_spec.rb +0 -43
- data/spec/plugin/match_hook_spec.rb +0 -79
- data/spec/plugin/middleware_spec.rb +0 -237
- data/spec/plugin/middleware_stack_spec.rb +0 -81
- data/spec/plugin/module_include_spec.rb +0 -48
- data/spec/plugin/multi_route_spec.rb +0 -268
- data/spec/plugin/multi_run_spec.rb +0 -87
- data/spec/plugin/multi_view_spec.rb +0 -50
- data/spec/plugin/multibyte_string_matcher_spec.rb +0 -44
- data/spec/plugin/named_templates_spec.rb +0 -96
- data/spec/plugin/not_allowed_spec.rb +0 -69
- data/spec/plugin/not_found_spec.rb +0 -128
- data/spec/plugin/optimized_string_matchers_spec.rb +0 -43
- data/spec/plugin/padrino_render_spec.rb +0 -34
- data/spec/plugin/param_matchers_spec.rb +0 -69
- data/spec/plugin/params_capturing_spec.rb +0 -33
- data/spec/plugin/partials_spec.rb +0 -43
- data/spec/plugin/pass_spec.rb +0 -29
- data/spec/plugin/path_matchers_spec.rb +0 -42
- data/spec/plugin/path_rewriter_spec.rb +0 -45
- data/spec/plugin/path_spec.rb +0 -222
- data/spec/plugin/placeholder_string_matchers_spec.rb +0 -126
- data/spec/plugin/precompile_templates_spec.rb +0 -61
- data/spec/plugin/public_spec.rb +0 -85
- data/spec/plugin/render_each_spec.rb +0 -82
- data/spec/plugin/render_locals_spec.rb +0 -114
- data/spec/plugin/render_spec.rb +0 -912
- data/spec/plugin/request_aref_spec.rb +0 -51
- data/spec/plugin/request_headers_spec.rb +0 -39
- data/spec/plugin/response_request_spec.rb +0 -43
- data/spec/plugin/route_block_args_spec.rb +0 -86
- data/spec/plugin/route_csrf_spec.rb +0 -305
- data/spec/plugin/run_append_slash_spec.rb +0 -77
- data/spec/plugin/run_handler_spec.rb +0 -53
- data/spec/plugin/sessions_spec.rb +0 -452
- data/spec/plugin/shared_vars_spec.rb +0 -45
- data/spec/plugin/sinatra_helpers_spec.rb +0 -537
- data/spec/plugin/slash_path_empty_spec.rb +0 -22
- data/spec/plugin/static_routing_spec.rb +0 -192
- data/spec/plugin/static_spec.rb +0 -30
- data/spec/plugin/status_303_spec.rb +0 -28
- data/spec/plugin/status_handler_spec.rb +0 -158
- data/spec/plugin/streaming_spec.rb +0 -246
- data/spec/plugin/strip_path_prefix_spec.rb +0 -24
- data/spec/plugin/symbol_matchers_spec.rb +0 -51
- data/spec/plugin/symbol_status_spec.rb +0 -25
- data/spec/plugin/symbol_views_spec.rb +0 -32
- data/spec/plugin/timestamp_public_spec.rb +0 -85
- data/spec/plugin/type_routing_spec.rb +0 -348
- data/spec/plugin/typecast_params_spec.rb +0 -1370
- data/spec/plugin/unescape_path_spec.rb +0 -22
- data/spec/plugin/view_options_spec.rb +0 -170
- data/spec/plugin_spec.rb +0 -71
- data/spec/redirect_spec.rb +0 -41
- data/spec/request_spec.rb +0 -97
- data/spec/response_spec.rb +0 -199
- data/spec/route_spec.rb +0 -39
- data/spec/session_middleware_spec.rb +0 -129
- data/spec/session_spec.rb +0 -37
- data/spec/spec_helper.rb +0 -137
- data/spec/version_spec.rb +0 -14
- data/spec/views/_test.erb +0 -1
- data/spec/views/a.erb +0 -1
- data/spec/views/a.rdoc +0 -2
- data/spec/views/about.erb +0 -1
- data/spec/views/about.str +0 -1
- data/spec/views/about/_test.css.gz +0 -0
- data/spec/views/about/_test.erb +0 -1
- data/spec/views/about/_test.erb.gz +0 -0
- data/spec/views/about/comp_test.erb +0 -1
- data/spec/views/b.erb +0 -1
- data/spec/views/c.erb +0 -1
- data/spec/views/comp_layout.erb +0 -1
- data/spec/views/comp_test.erb +0 -1
- data/spec/views/content-yield.erb +0 -1
- data/spec/views/each.str +0 -1
- data/spec/views/home.erb +0 -2
- data/spec/views/home.str +0 -2
- data/spec/views/iv.erb +0 -1
- data/spec/views/layout-alternative.erb +0 -2
- data/spec/views/layout-yield.erb +0 -3
- data/spec/views/layout.erb +0 -2
- data/spec/views/layout.str +0 -2
- data/spec/views/multiple-layout.erb +0 -1
- data/spec/views/multiple.erb +0 -1
@@ -1,48 +0,0 @@
|
|
1
|
-
= New Features
|
2
|
-
|
3
|
-
* A type_routing plugin has been added. This plugin allows routing
|
4
|
-
based on the requested type, which can be submitted either via a
|
5
|
-
file extension or Accept header:
|
6
|
-
|
7
|
-
plugin :type_routing
|
8
|
-
|
9
|
-
route do |r|
|
10
|
-
r.get 'a' do
|
11
|
-
r.html{ "<h1>This is the HTML response</h1>" }
|
12
|
-
r.json{ '{"json": "ok"}' }
|
13
|
-
r.xml{ "<root>This is the XML response</root>" }
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
# /a or /a.html => HTML response
|
18
|
-
# /a.json => JSON response
|
19
|
-
# /a.xml => XML response
|
20
|
-
|
21
|
-
The response content type is set appropriately when the r.html,
|
22
|
-
r.json, or r.xml block is yielded to. Using plugin options, you can
|
23
|
-
add support for custom types, and choose whether to use only file
|
24
|
-
extensions or only Accept headers for type matching.
|
25
|
-
|
26
|
-
* A request_headers plugin has been added. This allows easier access
|
27
|
-
to request headers. For example, to access a header called
|
28
|
-
X-My-Header, by default you would need to use the CGI mangled name:
|
29
|
-
|
30
|
-
r.env['HTTP_X_MY_HEADER']
|
31
|
-
|
32
|
-
The request_headers plugin allows the easier to use:
|
33
|
-
|
34
|
-
r.headers['X-My-Header']
|
35
|
-
|
36
|
-
* An unescape_path plugin has been added. By default, Roda does not
|
37
|
-
unescape a URL-encoded PATH_INFO before routing. This plugin allows
|
38
|
-
URL-encoded PATH_INFO to work, supporting %2f as well as / as path
|
39
|
-
separators, and having captures return unescaped values:
|
40
|
-
|
41
|
-
plugin :unescape_path
|
42
|
-
|
43
|
-
route do |r|
|
44
|
-
# Assume /b/a URL encoded at %2f%62%2f%61
|
45
|
-
r.on :x, /(.)/ do |*x|
|
46
|
-
# x => ['b', 'a']
|
47
|
-
end
|
48
|
-
end
|
@@ -1,62 +0,0 @@
|
|
1
|
-
= New Plugins
|
2
|
-
|
3
|
-
* A run_append_slash plugin has been added, which automatically uses
|
4
|
-
"/" as the path instead of an empty path when calling rack
|
5
|
-
applications with r.run:
|
6
|
-
|
7
|
-
route do |r|
|
8
|
-
r.on "a" do
|
9
|
-
r.run App
|
10
|
-
end
|
11
|
-
end
|
12
|
-
|
13
|
-
# without run_append_slash:
|
14
|
-
# GET /a => App gets "" as PATH_INFO
|
15
|
-
# GET /a/ => App gets "/" as PATH_INFO
|
16
|
-
|
17
|
-
# with run_append_slash:
|
18
|
-
# GET /a => App gets "/" as PATH_INFO
|
19
|
-
# GET /a/ => App gets "/" as PATH_INFO
|
20
|
-
|
21
|
-
By default, the path is modified directly, but if you want to
|
22
|
-
redirect instead, you can pass a :use_redirects option when loading
|
23
|
-
the plugin.
|
24
|
-
|
25
|
-
= New Features
|
26
|
-
|
27
|
-
* The assets plugin now supports an :sri option to enable subresource
|
28
|
-
integrity on the link/script tags generated by the assets helper.
|
29
|
-
This option takes either :sha256, :sha384, or :sha512 values,
|
30
|
-
specifying the hash algorithm to use. Roda 3 will default to using
|
31
|
-
:sri => :sha256.
|
32
|
-
|
33
|
-
* The assets plugin now supports a :postprocessor option, which should
|
34
|
-
be a callable object. If the option is given, it will be called with
|
35
|
-
the filename, type, and rendered asset output of the file (CSS/JS),
|
36
|
-
and should return the postprocessed content to use. This allows any
|
37
|
-
type of custom postprocessing to be done, such as CSS autoprefixing.
|
38
|
-
|
39
|
-
* The render plugin now supports a :layout_opts=>:merge_locals option,
|
40
|
-
which will automatically merge view template locals into layout
|
41
|
-
template locals. This is useful if you want to use the same local
|
42
|
-
variable for both templates.
|
43
|
-
|
44
|
-
* The error_handler plugin now supports a :classes option, allowing
|
45
|
-
you to override which exception classes to handle. This allows it
|
46
|
-
to be used with libraries which use exception classes that
|
47
|
-
subclass from Exception instead of StandardError.
|
48
|
-
|
49
|
-
= Other Improvements
|
50
|
-
|
51
|
-
* The type_routing plugin now works correctly when using r.run.
|
52
|
-
Previously, if the type routing plugin recognized and removed
|
53
|
-
the file extension used in the requested path, it would not
|
54
|
-
add the file extension back to the path when passing the request
|
55
|
-
to another rack app.
|
56
|
-
|
57
|
-
= Backwards Compatibility
|
58
|
-
|
59
|
-
* In the assets plugin, Roda::RodaRequest.assets_matchers now uses
|
60
|
-
symbols instead of strings as the first argument in each entry.
|
61
|
-
This should not affect you unless you were accessing the values
|
62
|
-
directly.
|
@@ -1,69 +0,0 @@
|
|
1
|
-
= New Plugins
|
2
|
-
|
3
|
-
* A static_routing plugin has been added, which can give a 3-4x
|
4
|
-
increase in performance for large number of static routes, and
|
5
|
-
makes routing O(1) for static routes. Static routes are routes
|
6
|
-
that match full paths, with no placeholders, and are checked before
|
7
|
-
using the normal routing tree.
|
8
|
-
|
9
|
-
Static routes are defined via class-level static_* routing methods.
|
10
|
-
There is a static_* routing method for each HTTP verb (e.g.
|
11
|
-
static_get), as well as a static_route method, which will work
|
12
|
-
for any HTTP verb, with the verb-specific method taking priority.
|
13
|
-
By using static_route, you can get significantly faster performance
|
14
|
-
while retaining some of the benefits of Roda's routing tree design
|
15
|
-
(simple shared logic with verb specific behavior). Example:
|
16
|
-
|
17
|
-
plugin :static_routing
|
18
|
-
|
19
|
-
static_route '/foo' do |r|
|
20
|
-
@var = :foo
|
21
|
-
|
22
|
-
r.get do
|
23
|
-
'Not actually reached'
|
24
|
-
end
|
25
|
-
|
26
|
-
r.post{'static POST /#{@var}'}
|
27
|
-
end
|
28
|
-
|
29
|
-
static_get '/foo' do |r|
|
30
|
-
'static GET /foo'
|
31
|
-
end
|
32
|
-
|
33
|
-
route do |r|
|
34
|
-
'Not a static route'
|
35
|
-
end
|
36
|
-
|
37
|
-
Because static routing routes on the full path instead of by
|
38
|
-
path segment, the methods takes the full path as a string,
|
39
|
-
including the leading slash.
|
40
|
-
|
41
|
-
* An assets_preloading plugin has been added, which makes it simple
|
42
|
-
to generate HTML link tags or a Link header value to tell the
|
43
|
-
browser to preload assets for performance reasons.
|
44
|
-
|
45
|
-
# In routes, using the Link header:
|
46
|
-
response.headers['Link'] = preload_assets_link_header(:css)
|
47
|
-
|
48
|
-
# In templates, using a link tag:
|
49
|
-
<%= preload_assets_link_tags(:css) %>
|
50
|
-
|
51
|
-
= New Features
|
52
|
-
|
53
|
-
* RodaRequest#real_remaining_path has been added. This is designed
|
54
|
-
to be overridden by plugins that modify remaining_path for internal
|
55
|
-
routing purposes. RodaRequest#run now uses real_remaining_path
|
56
|
-
when passing requests to other rack applications.
|
57
|
-
|
58
|
-
* An assets_paths method has been added to the assets plugin. This
|
59
|
-
is similar to the assets method, but it returns an array of paths
|
60
|
-
to the assets, instead of a HTML link/script tag.
|
61
|
-
|
62
|
-
= Other Improvements
|
63
|
-
|
64
|
-
* The public plugin now works correctly when used with the
|
65
|
-
type_routing plugin, for paths ending in extensions that
|
66
|
-
type_routing is configured to handle.
|
67
|
-
|
68
|
-
* The head plugin now works with the not_allowed plugin if it is
|
69
|
-
loaded after the not_allowed plugin.
|
@@ -1,30 +0,0 @@
|
|
1
|
-
= Improvements
|
2
|
-
|
3
|
-
* The indifferent_params plugin is now optimized when using Rack 2,
|
4
|
-
using Rack 2's query_parser API, and it no longer needs to do a
|
5
|
-
deep copy of the params.
|
6
|
-
|
7
|
-
* The Content-Type and Content-Length headers are no longer added
|
8
|
-
for 1xx, 204, 205, and 304 responses.
|
9
|
-
|
10
|
-
* The assets_paths method in the assets plugin now works
|
11
|
-
correctly when subresource integrity is enabled.
|
12
|
-
|
13
|
-
* The asset paths are now escaped in tags by the assets and
|
14
|
-
assets_preloading plugins. While it's unlikely a developer
|
15
|
-
would use an asset path that requires escaping, that case is
|
16
|
-
now handled correctly.
|
17
|
-
|
18
|
-
* The h plugin no longer calls Rack::Utils.escape_html, instead
|
19
|
-
implementing it's own html escaping.
|
20
|
-
|
21
|
-
* The assets plugin now uses the h plugin, instead of calling
|
22
|
-
Rack::Utils.escape_html.
|
23
|
-
|
24
|
-
= Backwards Compatibility
|
25
|
-
|
26
|
-
* The h plugin's html escaping no longer escapes "/", which is
|
27
|
-
a behavior change if you are using any recent version of rack.
|
28
|
-
The security arguments made to escape "/" could be applied to
|
29
|
-
many other characters, so if you want to escape "/", you should
|
30
|
-
probably use a separate method that escapes all \W characters.
|
data/doc/release_notes/2.2.0.txt
DELETED
@@ -1,97 +0,0 @@
|
|
1
|
-
= New Plugins
|
2
|
-
|
3
|
-
* A shared_vars plugin has been added, for sharing variables between
|
4
|
-
multiple Roda apps. Example:
|
5
|
-
|
6
|
-
class API < Roda
|
7
|
-
plugin :shared_vars
|
8
|
-
route do |r|
|
9
|
-
user = shared[:user]
|
10
|
-
# ...
|
11
|
-
end
|
12
|
-
end
|
13
|
-
|
14
|
-
class App < Roda
|
15
|
-
plugin :shared_vars
|
16
|
-
|
17
|
-
route do |r|
|
18
|
-
r.on :user_id do |user_id|
|
19
|
-
shared[:user] = User[user_id]
|
20
|
-
r.run API
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
If you pass a hash to shared, it will update the shared
|
26
|
-
variables with the content of the hash:
|
27
|
-
|
28
|
-
route do |r|
|
29
|
-
r.on :user_id do |user_id|
|
30
|
-
shared(:user => User[user_id])
|
31
|
-
r.run API
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
You can also pass a block to shared, which will set the
|
36
|
-
shared variables only for the given block, restoring the
|
37
|
-
previous shared variables afterward:
|
38
|
-
|
39
|
-
route do |r|
|
40
|
-
r.on :user_id do |user_id|
|
41
|
-
shared(:user => User[user_id]) do
|
42
|
-
r.run API
|
43
|
-
end
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
47
|
-
* The partials method added by the padrino_render plugin has been
|
48
|
-
extracted into a partials plugin, for users who want to use the
|
49
|
-
partials method without having render use a layout by default.
|
50
|
-
|
51
|
-
= Other New Features
|
52
|
-
|
53
|
-
* The render plugin when using the :escape option now additionally
|
54
|
-
supports an :escape_safe_classes option, which accepts a class or
|
55
|
-
array of classes that should not be automatically escaped when using
|
56
|
-
<%= %> tags. This makes easier to integrate with helpers or
|
57
|
-
external libraries that return already html escaped strings, without
|
58
|
-
using <%== %> tags.
|
59
|
-
|
60
|
-
For complete control, an :escaper option is also supported, which
|
61
|
-
will be used for escaping <%= %> strings. The value of this option
|
62
|
-
should be an object that responds to escape_xml with a single
|
63
|
-
argument and returns an output string.
|
64
|
-
|
65
|
-
* A Roda#delay method has been added to the chunked plugin, which
|
66
|
-
delays execution of the given block until right before the content
|
67
|
-
template is rendered. This allows you to continue to use the
|
68
|
-
routing tree to DRY up your code even when streaming template
|
69
|
-
rendering. Example:
|
70
|
-
|
71
|
-
r.on 'albums/:d' do |album_id|
|
72
|
-
delay do
|
73
|
-
@album = Album[album_id]
|
74
|
-
end
|
75
|
-
r.get 'info' do
|
76
|
-
chunked(:info)
|
77
|
-
end
|
78
|
-
r.get 'tracks' do
|
79
|
-
chunked(:tracks)
|
80
|
-
end
|
81
|
-
end
|
82
|
-
|
83
|
-
* The path plugin now supports a :by_name option, which makes lookup
|
84
|
-
of the class be by name as opposed to by reference. This is
|
85
|
-
designed for use in development when doing code reloading.
|
86
|
-
|
87
|
-
* Roda.path_block has been added to the path plugin for returning the
|
88
|
-
block associated with the given class.
|
89
|
-
|
90
|
-
= Other Improvements
|
91
|
-
|
92
|
-
* The default_headers plugin now defaults to the same headers that
|
93
|
-
Roda uses by default (just the Content-Type header with text/html
|
94
|
-
value). Previously, it did not set a Content-Type header if you
|
95
|
-
didn't specify one.
|
96
|
-
|
97
|
-
* In the path plugin, Roda#path now works correctly in subclasses.
|
@@ -1,17 +0,0 @@
|
|
1
|
-
= New Features
|
2
|
-
|
3
|
-
* The streaming plugin now supports a handle_stream_error method to
|
4
|
-
handle exceptions when using stream(:loop=>true). This method
|
5
|
-
takes the exception and the stream object, and can be used to log
|
6
|
-
errors, output errors into the stream, close the stream, ignore
|
7
|
-
errors, or any other error handling.
|
8
|
-
|
9
|
-
= Other Improvements
|
10
|
-
|
11
|
-
* A couple of unused variable assignments have been removed, providing
|
12
|
-
a minor speedup.
|
13
|
-
|
14
|
-
* The specs no longer produce deprecation warnings when using Minitest
|
15
|
-
5.10.
|
16
|
-
|
17
|
-
* Some verbose warnings have been removed from the specs.
|
@@ -1,41 +0,0 @@
|
|
1
|
-
= New Features
|
2
|
-
|
3
|
-
* An :unsupported_block_result => :raise option is now supported
|
4
|
-
for Roda applications. This will raise a RodaError if an
|
5
|
-
unsupported value is returned from a match block or the
|
6
|
-
route block. This can make it easier to discover potential
|
7
|
-
problems in the routing tree. This option may become the
|
8
|
-
default behavior in Roda 3.
|
9
|
-
|
10
|
-
* An :unsupported_matcher => :raise option is now supported for
|
11
|
-
Roda applications. This will raise a RodaError if you use an
|
12
|
-
unsupported value as a matcher. This can make it easier to
|
13
|
-
discover potential problems in the routing tree. This option
|
14
|
-
may become the default behavior in Roda 3.
|
15
|
-
|
16
|
-
* A :verbatim_string_matcher option is now supported for Roda
|
17
|
-
applications. This will make all string matchers only match
|
18
|
-
the path verbatim, disallowing the use of a colon for
|
19
|
-
placeholders in the string. It's recommended that users
|
20
|
-
switch to using separate symbol arguments for placeholders.
|
21
|
-
|
22
|
-
If you enable this option, you need to change code such as:
|
23
|
-
|
24
|
-
r.is "foo/:bar" do |bar|
|
25
|
-
end
|
26
|
-
|
27
|
-
to:
|
28
|
-
|
29
|
-
r.is "foo", :bar do |bar|
|
30
|
-
end
|
31
|
-
|
32
|
-
If you are looking to convert an existing routing tree
|
33
|
-
from using placeholders in strings to separate symbol
|
34
|
-
arguments, you can scan your routing tree for potential
|
35
|
-
usage of placeholders in strings:
|
36
|
-
|
37
|
-
grep ' r\..*['\''"].*:.*['\''"]' app.rb
|
38
|
-
|
39
|
-
This option may become the default behavior in Roda 3, with
|
40
|
-
a plugin added to support the current default behavior of
|
41
|
-
allowing placeholders in string matchers.
|
@@ -1,29 +0,0 @@
|
|
1
|
-
= New Features
|
2
|
-
|
3
|
-
* An :explicit_cache option has been added to the render plugin.
|
4
|
-
This is similar to the :cache=>false option, but instead of
|
5
|
-
disabling caching completely, this disables caching by default but
|
6
|
-
allows for explicit caching of templates by providing the :cache
|
7
|
-
option to view/render.
|
8
|
-
|
9
|
-
In development mode, Roda now defaults to :explicit_cache=>true
|
10
|
-
instead of :cache=>false.
|
11
|
-
|
12
|
-
* An :inherit_cache option has been added to the render plugin,
|
13
|
-
making subclasses of that class start with a dup of the template
|
14
|
-
cache, instead of starting with an empty template cache. This can
|
15
|
-
result in less memory used.
|
16
|
-
|
17
|
-
* Roda#error_email in the error_email plugin now accepts non-Exception
|
18
|
-
arguments (such as strings). This can be useful in conditions that
|
19
|
-
are errors you may want to notify about, where an exception hasn't
|
20
|
-
been raised.
|
21
|
-
|
22
|
-
* Roda#error_email_content has been added to the error_email plugin.
|
23
|
-
This can be used to create the email message, which can be delivered
|
24
|
-
via another mechanism, and may make testing easier.
|
25
|
-
|
26
|
-
= Other Improvements
|
27
|
-
|
28
|
-
* Roda.freeze in the static_routing plugin now returns self, fixing
|
29
|
-
code such as Roda.freeze.app.
|
@@ -1,65 +0,0 @@
|
|
1
|
-
= New Features
|
2
|
-
|
3
|
-
* The middleware plugin now accepts a block that can be used to
|
4
|
-
implement configurable middleware. This allows you to load the
|
5
|
-
Roda application as middleware in another application, and provide
|
6
|
-
options/block that are passed to the block you passed when loading
|
7
|
-
the middleware plugin. Example:
|
8
|
-
|
9
|
-
class Mid < Roda
|
10
|
-
plugin :middleware do |middleware, *args, &block|
|
11
|
-
middleware.opts[:middleware_args] = args
|
12
|
-
block.call(middleware)
|
13
|
-
end
|
14
|
-
end
|
15
|
-
|
16
|
-
class App < Roda
|
17
|
-
use Mid, :foo, :bar do |middleware|
|
18
|
-
middleware.opts[:middleware_args] << :baz
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
Note that when passing a block when loading the middleware plugin,
|
23
|
-
using the middleware in another rack application will actually
|
24
|
-
load a subclass of the middleware (Mid in the example above).
|
25
|
-
This allows you to use the Roda middleware multiple times in the
|
26
|
-
same process with different configurations.
|
27
|
-
|
28
|
-
* The cookies plugin now accepts options that are used as the default
|
29
|
-
options when setting and deleting cookies:
|
30
|
-
|
31
|
-
plugin :cookies, :path => '/foo', :domain => 'example.com'
|
32
|
-
|
33
|
-
* A strip_path_prefix plugin has been added, which can be used to
|
34
|
-
strip prefixes from internal paths. Internally Sequel stores
|
35
|
-
most paths as absolute paths, but there are cases where this
|
36
|
-
doesn't work well, such as symlink changes and chroot. This
|
37
|
-
plugin supports those scenarios.
|
38
|
-
|
39
|
-
* A disallow_file_uploads plugin has been added, which raises
|
40
|
-
an exception if the user attempts a multipart file upload.
|
41
|
-
More exactly, it makes the application raise an exception if
|
42
|
-
attempting to parse a request body when the user has submitted
|
43
|
-
a multipart file upload. This is useful if you don't need to
|
44
|
-
support file uploads in your application, or cases where no
|
45
|
-
paths are writable by the application (due to chroot or system call
|
46
|
-
filtering).
|
47
|
-
|
48
|
-
* The :freeze_middleware option has been added, which freezes all
|
49
|
-
middleware instances when building the rack application. This
|
50
|
-
can help find thread safety issues in middleware.
|
51
|
-
|
52
|
-
= Other Improvements
|
53
|
-
|
54
|
-
* The h plugin is now about 6x faster on ruby 2.3+ due to the use
|
55
|
-
of cgi/escape.
|
56
|
-
|
57
|
-
* The static_routing plugin now works with the hooks plugin if the
|
58
|
-
hooks plugin is loaded first.
|
59
|
-
|
60
|
-
* The render plugin's render cache is no longer cleared when loading
|
61
|
-
the plugin multiple times.
|
62
|
-
|
63
|
-
= Backwards Compatibility
|
64
|
-
|
65
|
-
* The h plugin now escapes ' as ' instead of '.
|