= 1.2.0 (2014-12-17) * Don't override explicit nil :default_encoding template option in the render plugin (jeremyevans) * Add remaining_path and matched_path request methods (jeremyevans) * Add slash_path_emty plugin, for considering a path of "/" as empty when doing a terminal match (jeremyevans) * Remove def_verb_method request class method (jeremyevans) * Support :add_script_name, :name, :url, and :url_only options when creating named paths in the path plugin (jeremyevans) * Add match_affix plugin, for overriding default prefix/suffix used in match patterns (jeremyevans) * Add empty_root plugin, for making root matcher also match empty string (jeremyevans) * Add roda_class instance methods to RodaRequest and RodaResponse, to DRY up plugin code (jeremyevans) * Add sinatra_helpers plugin, porting Sinatra::Helpers methods not covered by other plugins (jeremyevans) * Don't set the default headers until the response is finished (jeremyevans) * Add RodaRequest#default_redirect_status, so plugins can override the default status used for redirects (jeremyevans) * Add drop_body plugin, for automatically dropping body and Content-{Length,Type} headers based on response status (jeremyevans) * Add clear_middleware! class method, for clearing the current middleware (jeremyevans) * Add inherit_middleware class accessor, allowing users to turn off middleware inheritance (jeremyevans) * Add multi_run plugin, for dispatching to multiple rack applications based on the request path prefix (jeremyevans) * Add environments plugin, for handling development/test/production environments (jeremyevans) * Do not cache templates by default if RACK_ENV is development (jeremyevans) * Add delay_build plugin, to delay building the rack app until Roda.app is called (jeremyevans) * Add :user_agent hash matcher to the header_matchers plugin (jeremyevans) * Fix caching of templates in the render plugin when :opts or :template_class is used (jeremyevans) * Require loading the render plugin again if you want to change the default layout (jeremyevans) * Pass :css_opts and :js_opts as template options (via :opts) instead of render options when rendering (jeremyevans) * Only pass :opts hash to template class during rendering, instead of all render/view options (jeremyevans) * Support :template_class option in the render plugin for overriding template class to use (jeremyevans) * Automatically dup unfrozen Array/Hash opts values when subclassing (jeremyevans) * Add named_templates plugin, for creating inline templates by name, instead of storing them in the file system (jeremyevans) * Support :template option in for render/view to specify template to use, instead of requiring separate argument (jeremyevans) * Add class_level_routing plugin, for a DSL similar to Sinatra (jeremyevans) * Make RodaRequest.consume_pattern not capture pattern by default (jeremyevans) * Add static_path_info plugin, making Roda not modify PATH_INFO or SCRIPT_NAME during routing (jeremyevans) * Use local/instance variable lookups instead of method calls to improve performance (jeremyevans) * Add RodaRequest#session, and have #session delegate to that (jeremyevans) * Add delegate plugin, for easily creating methods that delegate to request or response (jeremyevans) * Add mailer plugin, allowing use of a routing tree for email instead of web responses (jeremyevans) = 1.1.0 (2014-11-11) * Add assets plugin, for rendering assets on the fly, or compiling them to a single compressed file (cj, jeremyevans) (#5) * Make InstanceMethods in plugins not include constants, as they would pollute the constant namespace (jeremyevans) * Make response.finish add the Content-Length header, not response.write (jeremyevans) * Add response.finish_with_body to override response body used (jeremyevans) * Use allocate instead of new in rack app (jeremyevans) * Add chunked plugin, for easy streaming of template responses using Transfer-Encoding: chunked (jeremyevans) * Add namespace support to the multi_route plugin, to support more complex applications (jeremyevans) * Make r.multi_route use named route return value if not passed a block (jeremyevans) * Make r.multi_route prefer longer route if multiple routes have the same prefix (jeremyevans) * Add caching plugin, for handling http caching (jeremyevans) * Support adding middleware after the route block has been added (jeremyevans) * Allow Roda subclasses to use route block from superclass (jeremyevans) * Have r.multi_route ignore non-String named routes (jeremyevans) * Pick up newly added named routes while running in the multi_route plugin, useful for development (jeremyevans) * Add path plugin, for named path support (jeremyevans) (#4) * Add error_email plugin, for easily emailing an error notification for an exception (jeremyevans) = 1.0.0 (2014-08-19) * Don't have :extension hash matcher force a terminal match (jeremyevans) * Add :content option to view method in render plugin to use given content instead of rendering a template (jeremyevans) * Add :escape option to render plugin for using erb templates where <%= %> escapes and <%== %> does not (jeremyevans) * Make multi_route plugin route("route_name") method a request method instead of an instance method (jeremyevans) * Add r.multi_route method to multi_route plugin, for dispatching to named route based on first segment in path (jeremyevans) * Allow non-GET requests to use r.redirect with no argument, redirecting to current path (jeremyevans) * Add head plugin, for handling HEAD requests like GET requests with an empty body (jeremyevans) * Optimize consuming patterns by using a positive lookahead assertion (jeremyevans) * Add not_allowed plugin, for automatically returning 405 Method Not Allowed responses (jeremyevans) * Optimize match blocks with no arguments (jeremyevans) * Add content_for plugin, for storing content in one template and retrieving it in another (jeremyevans) * Add render_each plugin, for rendering a template for each value in an enumerable (jeremyevans) * Add backtracking_array plugin, allowing array matchers to backtrack if later matchers do not match (jeremyevans) * Add :all hash matcher, allowing array matchers to include conditions where you want to match multiple conditions (jeremyevans) * Add json plugin, allowing match blocks to return arrays/hashes, returning JSON (jeremyevans) * Add view_subdirs plugin, for setting a subdirectory for views on a per-request basis (jeremyevans) * Allow default halt method to take no arguments, and use the current response (jeremyevans) * Add symbol_views plugin, allowing match blocks to return a template name symbol (jeremyevans) * Add per_thread_caching plugin, for using separate caches per thread instead of shared thread-safe caches (jeremyevans) * Add hash_matcher class method, for easily creating hash match methods (jeremyevans) * Add symbol_matchers plugin, for using symbol-specific matching regexps (jeremyevans) * Add csrf plugin for csrf protection using rack_csrf (jeremyevans) * Optimize r.is, r.get, r.post and similar methods by reducing the number of Array objects created (jeremyevans) * Support RequestClassMethods and ResponseClassMethods in plugins (jeremyevans) * Add Roda::RodaCache for a thread safe cache, currently used for match patterns, templates, and plugins (jeremyevans) * Optimize matching by caching consume regexp for strings, regexp, symbol, and :extension matchers (jeremyevans) * Add r.root for GET / requests, for easier to read version of r.get "" (jeremyevans) * Optimize r.is terminal matcher, remove :term hash matcher (jeremyevans) * Make flash plugin no longer depend on sinatra-flash (jeremyevans) * Move version file to roda/version so it can be required separately without loading dependencies (jeremyevans) = 0.9.0 (2014-07-30) * Initial public release