roda 3.83.0 → 3.85.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (104) hide show
  1. checksums.yaml +4 -4
  2. data/lib/roda/plugins/Integer_matcher_max.rb +9 -8
  3. data/lib/roda/plugins/_optimized_matching.rb +2 -2
  4. data/lib/roda/plugins/_symbol_class_matchers.rb +107 -0
  5. data/lib/roda/plugins/capture_erb.rb +6 -5
  6. data/lib/roda/plugins/class_matchers.rb +91 -14
  7. data/lib/roda/plugins/hsts.rb +35 -0
  8. data/lib/roda/plugins/placeholder_string_matchers.rb +4 -0
  9. data/lib/roda/plugins/public.rb +1 -1
  10. data/lib/roda/plugins/render.rb +1 -1
  11. data/lib/roda/plugins/symbol_matchers.rb +70 -15
  12. data/lib/roda/request.rb +16 -13
  13. data/lib/roda/response.rb +1 -1
  14. data/lib/roda/version.rb +1 -1
  15. data/lib/roda.rb +7 -0
  16. metadata +5 -179
  17. data/CHANGELOG +0 -691
  18. data/README.rdoc +0 -1136
  19. data/doc/conventions.rdoc +0 -177
  20. data/doc/release_notes/3.0.0.txt +0 -84
  21. data/doc/release_notes/3.1.0.txt +0 -24
  22. data/doc/release_notes/3.10.0.txt +0 -132
  23. data/doc/release_notes/3.11.0.txt +0 -54
  24. data/doc/release_notes/3.12.0.txt +0 -19
  25. data/doc/release_notes/3.13.0.txt +0 -38
  26. data/doc/release_notes/3.14.0.txt +0 -36
  27. data/doc/release_notes/3.14.1.txt +0 -43
  28. data/doc/release_notes/3.15.0.txt +0 -21
  29. data/doc/release_notes/3.16.0.txt +0 -52
  30. data/doc/release_notes/3.17.0.txt +0 -62
  31. data/doc/release_notes/3.18.0.txt +0 -170
  32. data/doc/release_notes/3.19.0.txt +0 -229
  33. data/doc/release_notes/3.2.0.txt +0 -22
  34. data/doc/release_notes/3.20.0.txt +0 -7
  35. data/doc/release_notes/3.21.0.txt +0 -5
  36. data/doc/release_notes/3.22.0.txt +0 -24
  37. data/doc/release_notes/3.23.0.txt +0 -28
  38. data/doc/release_notes/3.24.0.txt +0 -14
  39. data/doc/release_notes/3.25.0.txt +0 -12
  40. data/doc/release_notes/3.26.0.txt +0 -15
  41. data/doc/release_notes/3.27.0.txt +0 -15
  42. data/doc/release_notes/3.28.0.txt +0 -13
  43. data/doc/release_notes/3.29.0.txt +0 -15
  44. data/doc/release_notes/3.3.0.txt +0 -291
  45. data/doc/release_notes/3.30.0.txt +0 -14
  46. data/doc/release_notes/3.31.0.txt +0 -11
  47. data/doc/release_notes/3.32.0.txt +0 -42
  48. data/doc/release_notes/3.33.0.txt +0 -8
  49. data/doc/release_notes/3.34.0.txt +0 -17
  50. data/doc/release_notes/3.35.0.txt +0 -12
  51. data/doc/release_notes/3.36.0.txt +0 -17
  52. data/doc/release_notes/3.37.0.txt +0 -42
  53. data/doc/release_notes/3.38.0.txt +0 -5
  54. data/doc/release_notes/3.39.0.txt +0 -16
  55. data/doc/release_notes/3.4.0.txt +0 -24
  56. data/doc/release_notes/3.40.0.txt +0 -24
  57. data/doc/release_notes/3.41.0.txt +0 -9
  58. data/doc/release_notes/3.42.0.txt +0 -21
  59. data/doc/release_notes/3.43.0.txt +0 -34
  60. data/doc/release_notes/3.44.0.txt +0 -23
  61. data/doc/release_notes/3.45.0.txt +0 -22
  62. data/doc/release_notes/3.46.0.txt +0 -19
  63. data/doc/release_notes/3.47.0.txt +0 -13
  64. data/doc/release_notes/3.48.0.txt +0 -10
  65. data/doc/release_notes/3.49.0.txt +0 -18
  66. data/doc/release_notes/3.5.0.txt +0 -31
  67. data/doc/release_notes/3.50.0.txt +0 -21
  68. data/doc/release_notes/3.51.0.txt +0 -20
  69. data/doc/release_notes/3.52.0.txt +0 -20
  70. data/doc/release_notes/3.53.0.txt +0 -14
  71. data/doc/release_notes/3.54.0.txt +0 -48
  72. data/doc/release_notes/3.55.0.txt +0 -12
  73. data/doc/release_notes/3.56.0.txt +0 -33
  74. data/doc/release_notes/3.57.0.txt +0 -34
  75. data/doc/release_notes/3.58.0.txt +0 -16
  76. data/doc/release_notes/3.59.0.txt +0 -17
  77. data/doc/release_notes/3.6.0.txt +0 -21
  78. data/doc/release_notes/3.60.0.txt +0 -56
  79. data/doc/release_notes/3.61.0.txt +0 -24
  80. data/doc/release_notes/3.62.0.txt +0 -41
  81. data/doc/release_notes/3.63.0.txt +0 -36
  82. data/doc/release_notes/3.64.0.txt +0 -26
  83. data/doc/release_notes/3.65.0.txt +0 -12
  84. data/doc/release_notes/3.66.0.txt +0 -23
  85. data/doc/release_notes/3.67.0.txt +0 -25
  86. data/doc/release_notes/3.68.0.txt +0 -21
  87. data/doc/release_notes/3.69.0.txt +0 -33
  88. data/doc/release_notes/3.7.0.txt +0 -123
  89. data/doc/release_notes/3.70.0.txt +0 -19
  90. data/doc/release_notes/3.71.0.txt +0 -33
  91. data/doc/release_notes/3.72.0.txt +0 -48
  92. data/doc/release_notes/3.73.0.txt +0 -33
  93. data/doc/release_notes/3.74.0.txt +0 -28
  94. data/doc/release_notes/3.75.0.txt +0 -19
  95. data/doc/release_notes/3.76.0.txt +0 -18
  96. data/doc/release_notes/3.77.0.txt +0 -8
  97. data/doc/release_notes/3.78.0.txt +0 -99
  98. data/doc/release_notes/3.79.0.txt +0 -148
  99. data/doc/release_notes/3.8.0.txt +0 -27
  100. data/doc/release_notes/3.80.0.txt +0 -31
  101. data/doc/release_notes/3.81.0.txt +0 -24
  102. data/doc/release_notes/3.82.0.txt +0 -43
  103. data/doc/release_notes/3.83.0.txt +0 -6
  104. 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.