3.17.0.txt

doc/release_notes/3.17.0.txt
Last Update: 2019-02-15 08:10:25 -0800

New Features

  • A route_block_args plugin has been added, allowing you to customize which objects are yielded to the the route block. You call the plugin with a block, which is evaluated in the context of the instance and should return an array of arguments for the instance to yield to the route block.

    To yield both the request and response objects, you can do:

    plugin :route_block_args do |r|
      [r, response]
    end
    
    route do |r, response|
      # ...
    end

    In addition to the main route block, using this plugin also affects the arguments passed to routing blocks in the following plugins:

    • class_level_routing

    • mailer

    • mail_processor

    • multi_route

    • static_routing

Other Improvements

  • The set_layout_opts method in the view_options plugin can now override the layout template even if the render plugin :layout option is given.

  • The mailer and mail_processor plugin now integrate with the hooks plugin to support before/after hooks.

  • Dispatching to the route block and RodaResponse#finish are both slightly faster.

  • Internal before hook handling has been moved from an internal plugin into the core, and modified so that if you are not using the internal before hook in any plugin, there is no runtime cost.

  • The core now recognizes when plugins are using the internal after hook, and automatically loads the internal plugin supporting the after hook.

Backwards Compatibility

  • When using the render plugin with a :layout option, the render_opts :layout option will be set to true if the layout is enabled. Previously, the render_opts :layout option would retain the value given as the plugin option. Options for the layout (including the template) are still available in the render_opts :layout_opts option. This change was made to fix the set_layout_opts bug in the view_options plugin.

  • RodaResponse#initialize no longer sets the response status to nil if it was already set.

  • RodaResponse#finish no longer sets the status on the receiver, it just uses the receiver's status to set the rack response status.