roda 3.83.0 → 3.84.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.
Files changed (93) hide show
  1. checksums.yaml +4 -4
  2. data/lib/roda/plugins/hsts.rb +35 -0
  3. data/lib/roda/response.rb +1 -1
  4. data/lib/roda/version.rb +1 -1
  5. metadata +4 -179
  6. data/CHANGELOG +0 -691
  7. data/README.rdoc +0 -1136
  8. data/doc/conventions.rdoc +0 -177
  9. data/doc/release_notes/3.0.0.txt +0 -84
  10. data/doc/release_notes/3.1.0.txt +0 -24
  11. data/doc/release_notes/3.10.0.txt +0 -132
  12. data/doc/release_notes/3.11.0.txt +0 -54
  13. data/doc/release_notes/3.12.0.txt +0 -19
  14. data/doc/release_notes/3.13.0.txt +0 -38
  15. data/doc/release_notes/3.14.0.txt +0 -36
  16. data/doc/release_notes/3.14.1.txt +0 -43
  17. data/doc/release_notes/3.15.0.txt +0 -21
  18. data/doc/release_notes/3.16.0.txt +0 -52
  19. data/doc/release_notes/3.17.0.txt +0 -62
  20. data/doc/release_notes/3.18.0.txt +0 -170
  21. data/doc/release_notes/3.19.0.txt +0 -229
  22. data/doc/release_notes/3.2.0.txt +0 -22
  23. data/doc/release_notes/3.20.0.txt +0 -7
  24. data/doc/release_notes/3.21.0.txt +0 -5
  25. data/doc/release_notes/3.22.0.txt +0 -24
  26. data/doc/release_notes/3.23.0.txt +0 -28
  27. data/doc/release_notes/3.24.0.txt +0 -14
  28. data/doc/release_notes/3.25.0.txt +0 -12
  29. data/doc/release_notes/3.26.0.txt +0 -15
  30. data/doc/release_notes/3.27.0.txt +0 -15
  31. data/doc/release_notes/3.28.0.txt +0 -13
  32. data/doc/release_notes/3.29.0.txt +0 -15
  33. data/doc/release_notes/3.3.0.txt +0 -291
  34. data/doc/release_notes/3.30.0.txt +0 -14
  35. data/doc/release_notes/3.31.0.txt +0 -11
  36. data/doc/release_notes/3.32.0.txt +0 -42
  37. data/doc/release_notes/3.33.0.txt +0 -8
  38. data/doc/release_notes/3.34.0.txt +0 -17
  39. data/doc/release_notes/3.35.0.txt +0 -12
  40. data/doc/release_notes/3.36.0.txt +0 -17
  41. data/doc/release_notes/3.37.0.txt +0 -42
  42. data/doc/release_notes/3.38.0.txt +0 -5
  43. data/doc/release_notes/3.39.0.txt +0 -16
  44. data/doc/release_notes/3.4.0.txt +0 -24
  45. data/doc/release_notes/3.40.0.txt +0 -24
  46. data/doc/release_notes/3.41.0.txt +0 -9
  47. data/doc/release_notes/3.42.0.txt +0 -21
  48. data/doc/release_notes/3.43.0.txt +0 -34
  49. data/doc/release_notes/3.44.0.txt +0 -23
  50. data/doc/release_notes/3.45.0.txt +0 -22
  51. data/doc/release_notes/3.46.0.txt +0 -19
  52. data/doc/release_notes/3.47.0.txt +0 -13
  53. data/doc/release_notes/3.48.0.txt +0 -10
  54. data/doc/release_notes/3.49.0.txt +0 -18
  55. data/doc/release_notes/3.5.0.txt +0 -31
  56. data/doc/release_notes/3.50.0.txt +0 -21
  57. data/doc/release_notes/3.51.0.txt +0 -20
  58. data/doc/release_notes/3.52.0.txt +0 -20
  59. data/doc/release_notes/3.53.0.txt +0 -14
  60. data/doc/release_notes/3.54.0.txt +0 -48
  61. data/doc/release_notes/3.55.0.txt +0 -12
  62. data/doc/release_notes/3.56.0.txt +0 -33
  63. data/doc/release_notes/3.57.0.txt +0 -34
  64. data/doc/release_notes/3.58.0.txt +0 -16
  65. data/doc/release_notes/3.59.0.txt +0 -17
  66. data/doc/release_notes/3.6.0.txt +0 -21
  67. data/doc/release_notes/3.60.0.txt +0 -56
  68. data/doc/release_notes/3.61.0.txt +0 -24
  69. data/doc/release_notes/3.62.0.txt +0 -41
  70. data/doc/release_notes/3.63.0.txt +0 -36
  71. data/doc/release_notes/3.64.0.txt +0 -26
  72. data/doc/release_notes/3.65.0.txt +0 -12
  73. data/doc/release_notes/3.66.0.txt +0 -23
  74. data/doc/release_notes/3.67.0.txt +0 -25
  75. data/doc/release_notes/3.68.0.txt +0 -21
  76. data/doc/release_notes/3.69.0.txt +0 -33
  77. data/doc/release_notes/3.7.0.txt +0 -123
  78. data/doc/release_notes/3.70.0.txt +0 -19
  79. data/doc/release_notes/3.71.0.txt +0 -33
  80. data/doc/release_notes/3.72.0.txt +0 -48
  81. data/doc/release_notes/3.73.0.txt +0 -33
  82. data/doc/release_notes/3.74.0.txt +0 -28
  83. data/doc/release_notes/3.75.0.txt +0 -19
  84. data/doc/release_notes/3.76.0.txt +0 -18
  85. data/doc/release_notes/3.77.0.txt +0 -8
  86. data/doc/release_notes/3.78.0.txt +0 -99
  87. data/doc/release_notes/3.79.0.txt +0 -148
  88. data/doc/release_notes/3.8.0.txt +0 -27
  89. data/doc/release_notes/3.80.0.txt +0 -31
  90. data/doc/release_notes/3.81.0.txt +0 -24
  91. data/doc/release_notes/3.82.0.txt +0 -43
  92. data/doc/release_notes/3.83.0.txt +0 -6
  93. data/doc/release_notes/3.9.0.txt +0 -67
@@ -1,19 +0,0 @@
1
- = Improvements
2
-
3
- * The r.on, r.is, r.get and r.post methods (and other verb methods
4
- if using the all_verbs plugin) have now been optimized when using
5
- a single string or regexp matcher, or the String or Integer class
6
- matcher. Since those four matchers are the most common types of
7
- matchers passed to the methods, this can significantly improve
8
- routing performance (about 50% in the r10k benchmark).
9
-
10
- This optimization is automatically applied when freezing
11
- applications, if the related methods have not been modified by
12
- plugins.
13
-
14
- This optimization does come at the expense of a small decrease
15
- in routing performance (3-4%) for unoptimized cases, but the
16
- majority of applications will see a overall performance benefit
17
- from this change.
18
-
19
- * Other minor performance improvements have been made.
@@ -1,13 +0,0 @@
1
- = Improvements
2
-
3
- * The r.on optimization added in 3.46.0 has been extended to optimize
4
- all single argument calls. This results in the following speedups
5
- based on argument type:
6
-
7
- * Hash matching: 10%
8
- * Array/Symbol/Class matching: 15%
9
- * Proc matching: 25%
10
- * true matching: 45%
11
- * false/nil matching: 65%
12
-
13
- * Other minor performance improvements have been made.
@@ -1,10 +0,0 @@
1
- = New Features
2
-
3
- * A named_routes plugin has been added, for defining named route
4
- blocks that you can dispatch to with r.route. This feature was
5
- previously available as part of the multi_route plugin, but there
6
- are cases where the r.route method and support for named routes is
7
- helpful even when the multi_route plugin is not used (such as when
8
- the hash_routes plugin is used instead of the multi_route plugin).
9
- The multi_route plugin now depends on the named_routes plugin, so
10
- this change should not cause any backwards compatibility issues.
@@ -1,18 +0,0 @@
1
- = Improvements
2
-
3
- * The r.is optimization added in 3.46.0 has been extended to optimize
4
- all single argument calls. This results in the following speedups
5
- based on argument type:
6
-
7
- * Hash/Class matching: 20%
8
- * Symbol matching: 25%
9
- * Array matching: 35%
10
- * Proc matching: 50%
11
- * false/nil matching: 65%
12
-
13
- * Roda now uses defined?(yield) instead of block_given? internally
14
- for better performance on CRuby. defined?(yield) is faster as it is
15
- built into the VM, while block_given? is a regular method and has
16
- the overhead of calling a regular method. Note that defined?(yield)
17
- is not implemented correctly on JRuby before 9.0.0.0, so this
18
- release of Roda drops support for JRuby versions before 9.0.0.0.
@@ -1,31 +0,0 @@
1
- = New Features
2
-
3
- * A request_aref plugin has been added for configuring the behavior
4
- of the [] and []= request methods. These methods are deprecated
5
- in the current version of Rack, but Rack will only print a
6
- deprecation warning in verbose mode. With this plugin, you can
7
- choose to never warn, always warn, or raise an exception:
8
-
9
- # Don't emit a warning, allowing for the historical Rack
10
- # behavior
11
- plugin :request_aref, :allow
12
-
13
- # Always emit a warning when the method is called
14
- plugin :request_aref, :warn
15
-
16
- # Raise an exception if the method is called
17
- plugin :request_aref, :raise
18
-
19
- = Other Improvements
20
-
21
- * When using the content_for plugin and calling content_for with a
22
- block, convert the result of the block to a string before passing
23
- the result to Tilt. This can fix issues when the template class
24
- that Tilt uses does not handle non-String input.
25
-
26
- * When using the public plugin with the :gzip option, do not add the
27
- Content-Type or Content-Encoding headers if a 304 response is
28
- returned.
29
-
30
- * Add the spec/views/about directory to the gem, allowing the specs
31
- to run correctly using just the files in the gem.
@@ -1,21 +0,0 @@
1
- = New Features
2
-
3
- * An inject_erb plugin has been added, adding an inject_erb method
4
- that allows for injecting content directly into the template output
5
- for the template currently being rendered. This allows you to more
6
- easily wrap blocks in templates, by calling methods that accept
7
- template blocks and injecting content before and after the block.
8
-
9
- * A capture_erb plugin has been added, adding a capture_erb method
10
- for capturing a template block in an erb template and returning
11
- the content appended during the block as a string, instead of
12
- having the content of the template block be included directly into
13
- the template output. This can be combined with the inject_erb
14
- plugin to inject modified versions of captured blocks into template
15
- output.
16
-
17
- * The hash_routes plugin now allows calling hash_branch and hash_path
18
- without a block in order to remove the existing route handler. This
19
- is designed to be used with code reloading libraries, so that if a
20
- route file is deleted, the related hash branches/paths are also
21
- removed, without having to reload all route files.
@@ -1,20 +0,0 @@
1
- = New Features
2
-
3
- * The named_routes plugin now allows calling route without a block
4
- to remove the existing route handler. The multi_run plugin
5
- now allows calling run without an app to remove an existing handler.
6
- These changes are designed to better support code reloading
7
- libraries, so that if the related file is deleted, the related
8
- handlers are also removed, without having to reload the entire
9
- application.
10
-
11
- = Other Improvements
12
-
13
- * The error_handler plugin now avoids a method redefinition warning
14
- in verbose warning mode.
15
-
16
- = Other
17
-
18
- * Roda's primary discussion forum is now GitHub Discussions. The
19
- ruby-roda Google Group is still available for users who would
20
- prefer to use that instead.
@@ -1,20 +0,0 @@
1
- = New Features
2
-
3
- * The typecast_params plugin now supports a :date_parse_input_handler
4
- option that will be called with all input that will be passed to
5
- the date parsing methods. You can use this option to automatically
6
- truncate input, if that is perferable to raising an error (which is
7
- how recent versions of Ruby handle too-long input).
8
-
9
- = Other Improvements
10
-
11
- * The path helper methods added by the path plugin now support
12
- blocks that use keyword arguments on Ruby 3+.
13
-
14
- * The assets plugin now uses OpenSSL::Digest instead of Digest (if
15
- available) for calculating SRI digests. This is faster on Ruby 3+,
16
- where Digest no longer uses the faster OpenSSL::Digest automatically
17
- if available.
18
-
19
- * Roda.freeze now returns self when the multi_route plugin is used.
20
- This was broken (not returning self) starting in 3.48.0.
@@ -1,14 +0,0 @@
1
- = New Features
2
-
3
- * An additional_view_directories plugin has been added, which allows
4
- you to specify additional directories to look in for templates.
5
- If the template path does not exist when using the default view
6
- directory, then each additional view directory will be checked,
7
- returning the first path that exists:
8
-
9
- plugin :additional_view_directories, ['admin_views', 'public_views']
10
-
11
- = Other Improvements
12
-
13
- * The indifferent_params plugin now avoids a deprecation warning when
14
- using the rack main branch, which will become Rack 3.
@@ -1,48 +0,0 @@
1
- = New Features
2
-
3
- * You can now override the type attribute for script tags produced
4
- by the assets plugin, by providing a :type attribute when calling
5
- the assets method.
6
-
7
- = Other Improvements
8
-
9
- * Reloading the render plugin after the additional_view_directories
10
- plugin no longer removes the additional view directories from
11
- the allowed paths for templates.
12
-
13
- * When using Rack 3, Roda will now use an instance of Rack::Headers
14
- instead of a plain hash for the headers, allowing for compliance
15
- with the Rack 3 SPEC (which will require lowercase header keys).
16
-
17
- * The public, multi_public, and sinatra_helpers plugin now use
18
- Rack::Files instead of Rack::File if available, as Rack::File will
19
- be deprecated in Rack 3.0.
20
-
21
- * The json_parser plugin no longer rewinds the request body before
22
- and after reading it when used with Rack 3.0, as Rack 3.0 has
23
- dropped the requirement for rewindable input.
24
-
25
- * The run_handler plugin now closes bodies for upstream 404 responses
26
- when using the not_found: :pass option.
27
-
28
- * The chunked plugin no longer uses Transfer-Encoding: chunked by
29
- default. Requiring the use of Transfer-Encoding: chunked made the
30
- plugin only work on HTTP 1.1, and not older or newer versions. The
31
- plugin still allows for streaming template bodies as they are being
32
- rendered. To get the previous behavior of forcing the use of
33
- Transfer-Encoding: chunked, you can use the :force_chunked_encoding
34
- plugin option
35
-
36
- * Roda now supports testing with Rack::Lint. This found multiple
37
- violations of the Rack SPEC which are fixed in this version, and
38
- should ensure that Roda stays in compliance with the Rack SPEC going
39
- forward.
40
-
41
- = Backwards Compatibility
42
-
43
- * Roda will no longer set the Content-Length header for 205 responses
44
- when using Rack <2.0.2, as doing so violates the Rack SPEC for those
45
- Rack versions.
46
-
47
- * The drop_body plugin now drops response bodies for all 1xx responses,
48
- not just for 100 and 101 responses, in compliance with the Rack SPEC.
@@ -1,12 +0,0 @@
1
- = New Features
2
-
3
- * A :forward_response_headers option has been added to the middleware
4
- plugin, which uses the response headers added by the middleware
5
- as default response headers even if the middleware does not handle
6
- the response. Response headers set by the underlying application
7
- take precedence over response headers set by the middleware.
8
-
9
- * The render plugin view method now accepts a block and will pass the
10
- block to the underlying render method call. This is useful for
11
- rendering a template that yields inside of an existing layout.
12
- Previously, you had to nest render calls to do that.
@@ -1,33 +0,0 @@
1
- = New Features
2
-
3
- * RodaRequest#http_version has been added for determining the HTTP
4
- version the request was submitted with. This will be a string
5
- such as "HTTP/1.0", "HTTP/1.1", "HTTP/2", etc. This will use the
6
- SERVER_PROTOCOL and HTTP_VERSION entries from the environment to
7
- determine which HTTP version is in use.
8
-
9
- * The status_handler method in the status_handler plugin now supports
10
- a :keep_headers option. The value for this option should be an
11
- array of header names to keep. All other headers are removed. The
12
- default behavior without the option is still to remove all headers.
13
-
14
- * A run_require_slash plugin has been added, which will skip
15
- dispatching to another rack application if the remaining path is not
16
- empty and does not start with a slash.
17
-
18
- = Other Improvements
19
-
20
- * The status_303 plugin will use 303 as the default redirect status
21
- for non-GET requests for HTTP/2 and higher HTTP versions. Previously,
22
- it only used 303 for HTTP/1.1.
23
-
24
- * The not_allowed plugin now overrides the r.root method to return
25
- 405 responses to non-GET requests to the root.
26
-
27
- * The not_allowed plugin no longer sets the body when returning 405
28
- responses using methods such as r.get and r.post. Previously, the
29
- body was unintentionally set to the same value as the Allow header.
30
-
31
- * When using the Rack master branch (what will become Rack 3), Roda
32
- only requires the parts of rack that it uses, instead of requiring
33
- rack and relying on autoload to load the parts of rack in use.
@@ -1,34 +0,0 @@
1
- = New Features
2
-
3
- * hash_branches and hash_paths plugins have been split off from the
4
- hash_routes plugin, allowing you to use only those parts instead
5
- of all of hash_routes.
6
-
7
- The hash_branches plugin supports the hash_branch class method
8
- and r.hash_branches routing method.
9
-
10
- The hash_paths plugin supports the hash_path class method and
11
- r.hash_paths routing method.
12
-
13
- The hash_routes plugin functions as it did previously by
14
- requiring the hash_branches and hash_paths plugins. It adds
15
- the hash_routes DSL and r.hash_routes routing method.
16
-
17
- * A hash_branch_view_subdir has been added. It builds on the
18
- view_options plugin and new hash_branches plugin, automatically
19
- appending a view subdirectory for each successful hash branch.
20
- This can DRY up code that uses a separate view subdirectory for
21
- each branch.
22
-
23
- = Other Improvements
24
-
25
- * Unprintable characters are now hex escaped in the output of the
26
- common_logger plugin. This can protect users who use software
27
- that respects shell escape sequences to view the logs.
28
-
29
- = Backwards Compatibility
30
-
31
- * The static_routing plugin now depends on the hash_paths plugin
32
- instead of the hash_routes plugin, so you will need to update
33
- your application to explicitly load the hash_routes plugin if
34
- you were relying on static_routing to implicitly load it.
@@ -1,16 +0,0 @@
1
- = New Features
2
-
3
- * A filter_common_logger plugin has been added, allowing you to skip
4
- logging of certain requests in the common_logger plugin. This
5
- allows you to only log requests for certain paths, or only log
6
- requests for certain types of responses.
7
-
8
- = Other Improvements
9
-
10
- * The heartbeat plugin is now compatible with recent changes in the
11
- rack master branch (what will be rack 3).
12
-
13
- * The exception_page plugin will now use Exception#detailed_message
14
- on Ruby 3.2+, preserving the did_you_mean and error_highlight
15
- information. Additionally, the display of exception messages
16
- has been improved.
@@ -1,17 +0,0 @@
1
- = New Features
2
-
3
- * An additional_render_engines plugin has been added, for considering
4
- multiple render engines for templates. If the template path does not
5
- exist for the default render engine, then each additional render
6
- engine will be checked, returning the first path that exists:
7
-
8
- plugin :additional_render_engines, ['haml', 'str']
9
-
10
- This is similar to the additional_view_directories plugin added in
11
- 3.53.0. Both plugins can be used if you want to consider multiple
12
- view directories and multiple render engines.
13
-
14
- = Other Improvements
15
-
16
- * A typo in a private method name in the delete_empty_headers plugin
17
- has been fixed.
@@ -1,21 +0,0 @@
1
- = New Features
2
-
3
- * An early_hints plugin has been added for senting 103 Early Hint
4
- responses. This is currently only supported on puma 3.11+, and
5
- can allow for improved performance by letting the requestor know
6
- which related files will be needed by the request.
7
-
8
- * An :early_hints option has been added to the assets plugin. If
9
- given, calling the assets method will also issue an early hint
10
- for the related assets.
11
-
12
- * A :wrap option has been added to the json_parser plugin. If set
13
- to :always, all uploaded json data will be stored using a hash
14
- with a "_json" key. If set to :unless_hash, uploaded json data
15
- will only be wrapped in such a matter if it is not already a hash.
16
-
17
- Using the :wrap option can fix problems when using r.params when
18
- the uploaded JSON data is an array and not a hash. However, it
19
- does change the behavior of r.POST. It is possible to handle
20
- uploaded JSON array data without the :wrap option by using r.GET
21
- and r.POST directly instead of using r.params.
@@ -1,56 +0,0 @@
1
- = New Features
2
-
3
- * A link_to plugin has been added with a link_to method for
4
- creating HTML links.
5
-
6
- The simplest usage of link_to is passing the body and the location
7
- to link to as strings:
8
-
9
- # Instance level
10
- link_to("body", "/path")
11
- # => "<a href=\"/path\">body</a>"
12
-
13
- The link_to plugin depends on the path plugin, and allows you to
14
- pass symbols for named paths:
15
-
16
- # Class level
17
- path :foo, "/path/to/too"
18
-
19
- # Instance level
20
- link_to("body", :foo)
21
- # => "<a href=\"/path/to/foo\">body</a>"
22
-
23
- It also allows you to pass instances of classes that you have
24
- registered with the path plugin:
25
-
26
- # Class level
27
- A = Struct.new(:id)
28
- path A do
29
- "/path/to/a/#{id}"
30
- end
31
-
32
- # Instance level
33
- link_to("body", A.new(1))
34
- # => "<a href=\"/path/to/a/1\">body</a>"
35
-
36
- To set additional HTML attributes on the tag, you can pass them as
37
- an options hash:
38
-
39
- link_to("body", "/path", foo: "bar")
40
- # => "<a href=\"/path\" foo=\"bar\">body</a>"
41
-
42
- If the body is nil, it will be set to the same as the path:
43
-
44
- link_to(nil, "/path")
45
- # => "<a href=\"/path\">/path</a>"
46
-
47
- The plugin will automatically HTML escape the path and any HTML
48
- attribute values, using the h plugin:
49
-
50
- link_to("body", "/path?a=1&b=2", foo: '"bar"')
51
- # => "<a href=\"/path?a=1&amp;b=2\" foo=\"&quot;bar&quot;\">body</a>"
52
-
53
- = Other Improvements
54
-
55
- * Coverage testing has been expanded to multiple rack versions, instead
56
- of just the current rack release.
@@ -1,24 +0,0 @@
1
- = Improvements
2
-
3
- * The typecast_params plugin now limits input bytesize for integer,
4
- float, and date/time typecasts. If the input is over the allowed
5
- bytesize, typecasting will fail. This prevents issues with trying
6
- to typecast arbitrarily large input.
7
-
8
- * The default Integer class matcher now limits integer segments to
9
- 100 characters by default, also to prevent issues with typecasting
10
- arbitrarily large input. Segments larger than 100 characters will
11
- no longer be matched by the Integer class matcher.
12
-
13
- = Backwards Compatibility
14
-
15
- * If the input bytesize limits in the typecast_params plugin cause
16
- issues in your application, you can use the :skip_bytesize_checking
17
- option when loading the plugin to disable the checks.
18
-
19
- * If the default Integer class matcher limit causes problems in your
20
- application, you can use the class_matchers plugin to override the
21
- matcher to not use a limit:
22
-
23
- plugin :class_matchers
24
- class_matcher(Integer, /(\d+)/){|a| [a.to_i]}
@@ -1,41 +0,0 @@
1
- = New Features
2
-
3
- * An Integer_matcher_max plugin has been added for setting the
4
- maximum value matched by the Integer matcher (the minimum is
5
- always 0, since the Integer matcher does not match negative
6
- integers). The default maximum value when using the plugin
7
- is 2**63-1, the maximum value for a signed 64-bit integer.
8
- You can specify a different maximum value by passing an argument
9
- when loading the plugin.
10
-
11
- * A typecast_params_sized_integers plugin has been added for
12
- converting parameters to integers only if the integer is within a
13
- specific size. By default, the plugin supports 8-bit, 16-bit,
14
- 32-bit, and 64-bit signed and unsigned integer types, with the
15
- following typecast_params methods added by the plugin:
16
-
17
- * int8, uint8, pos_int8, pos_uint8, Integer8, Integeru8
18
- * int16, uint16, pos_int16, pos_uint16, Integer16, Integeru16
19
- * int32, uint32, pos_int32, pos_uint32, Integer32, Integeru32
20
- * int64, uint64, pos_int64, pos_uint64, Integer64, Integeru64
21
-
22
- You can override what sizes are added by default by using the
23
- :sizes option. You can also specify a :default_size option,
24
- in which case the default int, pos_int, and Integer conversions
25
- will use the given size. So if you want to change the default
26
- typecast_params integer conversion behavior to only support
27
- integer values that can fit in 64-bit signed integers, you can
28
- use:
29
-
30
- plugin :typecast_params_sized_integers, sizes: [64],
31
- default_size: 64
32
-
33
- = Other Improvements
34
-
35
- * The block passed to the class_matcher method in the class_matchers
36
- plugin can now return nil/false to signal that it should not match.
37
- This is useful when the regexp argument provided matches segments
38
- not valid for the class.
39
-
40
- * RodaRequest#matched_path now works correctly when using the
41
- unescape_path plugin.
@@ -1,36 +0,0 @@
1
- = New Features
2
-
3
- * An autoload_hash_branches plugin has been added for autoloading
4
- route files for each hash branch, instead of requiring the route
5
- files be loaded up front. For example, to automatically load a
6
- route file for a hash branch on the first request to that branch:
7
-
8
- plugin :autoload_hash_branches
9
- autoload_hash_branch('branch_name', '/path/to/file')
10
- autoload_hash_branch('namespace', 'branch_name', '/path/to/file')
11
-
12
- The route file loaded should define the expected hash branch.
13
-
14
- It is common to have route files stored in a directory, with the
15
- file name matching the branch name. In that case, you can set
16
- autoloading for all route files in a given directory:
17
-
18
- plugin :autoload_hash_branches
19
- autoload_hash_branch_dir('/path/to/dir')
20
- autoload_hash_branch_dir('namespace', '/path/to/dir')
21
-
22
- Note that autoloading hash branches does not work if the application
23
- is frozen. This plugin should only be used in development mode for
24
- faster startup, or when running tests on a subset of the application
25
- in order to avoid loading parts of the application unrelated to what
26
- is being tested.
27
-
28
- * The mailer plugin now supports a :terminal plugin option to make
29
- the r.mail method force a terminal match, similar to how r.get
30
- and other HTTP verb methods work in standard Roda. This behavior
31
- will become the default in Roda 4.
32
-
33
- = Other Improvements
34
-
35
- * The mailer plugin now correctly sets the content_type of the body
36
- for emails with attachments when using mail 2.8.0+.
@@ -1,26 +0,0 @@
1
- = New Features
2
-
3
- * An erb_h plugin has been added for faster HTML escaping using
4
- erb/escape. erb 4 added erb/escape and it is included in Ruby 3.2.
5
-
6
- The erb_h plugin is added as a separate plugin because it changes
7
- the behavior of the h method. The h method added by the h plugin
8
- will always return a new string, but the h method added by the
9
- erb_h plugin will return the argument if the argument is a
10
- string that does not need escaping. By avoiding unnecessary
11
- string allocations, use of the erb_h plugin can speed up HTML
12
- escaping.
13
-
14
- = Other Improvements
15
-
16
- * The autoload_hash_branches plugin added in Roda 3.63.0 will now
17
- eagerly load the hash branches when freezing the application,
18
- allowing the application to continue to work after being frozen.
19
- Additionally, file paths for the hash branches will now be
20
- automatically expanded, allowing the use of relative file paths.
21
-
22
- = Backwards Compatibility
23
-
24
- * The expanding of file paths in the autoload_hash_branches plugin
25
- can break applications that were providing relative paths and
26
- expecting them to be looked up using the Ruby load path.
@@ -1,12 +0,0 @@
1
- = New Features
2
-
3
- * An autoload_named_routes plugin has been added for autoloading files
4
- for a named route setup by the named_routes plugin when there is a
5
- request for that route.
6
-
7
- = Other Improvements
8
-
9
- * The path method in the path plugin now supports a :class_name option.
10
- You can set this option to true and use a class name String/Symbol
11
- to register paths for classes without referencing the related class,
12
- useful when autoloading the class.
@@ -1,23 +0,0 @@
1
- = New Features
2
-
3
- * A render_coverage plugin has been added, which will cause compiled
4
- template code to be saved to a folder and loaded using load instead
5
- of eval. This allows for coverage to work for the compiled template
6
- code in Ruby versions before 3.2. It can also allow for verbose
7
- syntax warnings in compiled template code (ignored by eval), and
8
- can also be useful for static analysis of compiled template code.
9
- This plugin requires tilt 2.1+.
10
-
11
- * The exception_page plugin now supports exception_page_{css,js}
12
- instance methods for overriding the CSS and JavaScript on the
13
- generated exception page.
14
-
15
- = Other Improvements
16
-
17
- * Using inline templates (render/view :inline option) no longer keeps
18
- a reference to the Roda instance that caches the template.
19
-
20
- = Backwards Compatibility
21
-
22
- * The Render::TemplateMtimeWrapper API has changed. Any external
23
- use of this class needs to be updated.
@@ -1,25 +0,0 @@
1
- = New Feature
2
-
3
- * A custom_block_results plugin has been added for custom handling
4
- of block results. This allows routing blocks to return
5
- arbitrary objects instead of just String, nil, and false, and
6
- to have custom handling for them. For example, if you want to
7
- be able to have your routing blocks return the status code to use,
8
- you could do:
9
-
10
- plugin :custom_block_results
11
-
12
- handle_block_result Integer do |result|
13
- response.status_code = result
14
- end
15
-
16
- route do |r|
17
- 200
18
- end
19
-
20
- While the expected use of the handle_block_result method is with
21
- class arguments, you can use any argument that implements an
22
- appropriate === method.
23
-
24
- The symbol_views and json plugins, which support additional block
25
- results, now use the custom_block_results plugin internally.
@@ -1,21 +0,0 @@
1
- = New Feature
2
-
3
- * Roda.run in the multi_run plugin now accepts blocks, to allow
4
- autoloading of apps to dispatch to:
5
-
6
- class App < Roda
7
- plugin :multi_run
8
-
9
- run("other_app"){OtherApp}
10
-
11
- route do |r|
12
- r.multi_run
13
- end
14
- end
15
-
16
- With the above example, the block is not evaluated until a
17
- request for the /other_app branch is received. If OtherApp is
18
- autoloaded, this can speed up application startup and partial
19
- testing. When freezing the application (for production use),
20
- the block is eagerly loaded, so that requests to the
21
- /other_app branch do not call the block on every request.