Sinatra 0.9.1 released!

Sinatra 0.9.1 is a feature release. Highlights include support for
running on Ruby 1.9.1, a shiny new API for extensions/plugins, and
better support for building Rack middleware. This release is backward
compatible with 0.9.0 and 0.3.x.

gem install sinatra

For more information, see:

http://www.sinatrarb.com

From the CHANGES file:

  • Sinatra now runs under Ruby 1.9.1 [#61]

  • Route patterns (splats, :named, or Regexp captures) are now passed
    as arguments to the block. [#140]

  • The “helpers” method now takes a variable number of modules along
    with the normal block syntax. [#133]

  • New request-level #forward method for middleware components: passes
    the env to the downstream app and merges the response status, headers,
    and body into the current context. [#126]

  • Requests are now automatically forwarded to the downstream app when
    running as middleware and no matching route is found or all routes
    pass.

  • New simple API for extensions/plugins to add DSL-level and
    request-level methods. Use Sinatra.register(mixin) to extend the DSL
    with all public methods defined in the mixin module; use
    Sinatra.helpers(mixin) to make all public methods defined in the mixin
    module available at the request level. [#138] See
    Sinatra: Writing Extensions for details.

  • Named parameters in routes now capture the “.” character. This
    makes routes like “/:path/:filename” match against requests like
    “/foo/bar.txt”; in this case, “params[:filename]” is “bar.txt”.
    Previously, the route would not match at all.

  • Added request-level “redirect back” to redirect to the referring URL.

  • Added a new “clean_trace” option that causes backtraces dumped to
    rack.errors and displayed on the development error page to omit
    framework and core library backtrace lines. The option is enabled by
    default. [#77]

  • The ERB output buffer is now available to helpers via the @_out_buf
    instance variable.

  • It’s now much easier to test sessions in unit tests by passing a
    “:session” option to any of the mock request methods. e.g.,
    get ‘/’, {}, :session => { ‘foo’ => ‘bar’ }

  • The testing framework specific files (‘sinatra/test/spec’,
    ‘sinatra/test/bacon’, ‘sinatra/test/rspec’, etc.) have been
    deprecated. See Testing Sinatra with Rack::Test for instructions on
    setting up a testing environment with these frameworks.

  • The request-level #send_data method from Sinatra 0.3.3 has been
    added for compatibility but is deprecated.

  • Fix :provides causing crash on any request when request has no
    Accept header [#139]

  • Fix that ERB templates were evaluated twice per “erb” call.

  • Fix app-level middleware not being run when the Sinatra application
    is run as middleware.

  • Fixed some issues with running under Rack’s CGI handler caused by
    writing informational stuff to stdout.

  • Fixed that reloading was sometimes enabled when starting from a
    rackup file [#110]

  • Fixed that “.” in route patterns erroneously matched any character
    instead of a literal “.”. [#124]

All together, a little over 60 tickets were filed away in lighthouse,
making this one of the most active releases to date:

Lighthouse - Beautifully Simple Issue Tracking

Commit history:

Commits · sinatra/sinatra · GitHub

A large amount of energy was spent on documentation. Sinatra’s website
was shuffled around a bit and we’ve begun documenting… everything.
Here’s the first fruits of that labor:

Sinatra: Documentation

Sinatra: Configuring Settings
Testing Sinatra with Rack::Test
Sinatra: Writing Extensions

These people contributed code and/or doc patches to this release: Ryan
Tomayko (133), Simon R. (44), Blake Mizerany (33), Markus P.
(7), Nicolas Sanguinetti (4), Karel Minarik (4), raggi (2), Brandon
Dimcheff (2), Harry Vanberg (2), Neal Lindsay (2), Kevin F.
(2), Jon Maddox (2), Scott Wisely (2), Widi Harsojo (1), Sam R.
(1), S. Brent Faulkner (1), Pat N. (1), Matias Käkelä (1), Julio
Capote (1), Devlin D. (1), Aupajo (1), Andreas Haller (1), zapnap
(1), foca (1), beenimble (1), Victor Igumnov (1), Brian Deterling (1),
and Chris Schneider (1). Thanks!

On Mon, Mar 2, 2009 at 7:34 PM, Ryan T. [email protected] wrote:

(1), S. Brent Faulkner (1), Pat N. (1), Matias Käkelä (1), Julio
Capote (1), Devlin D. (1), Aupajo (1), Andreas Haller (1), zapnap
(1), foca (1), beenimble (1), Victor Igumnov (1), Brian Deterling (1),
and Chris Schneider (1). Thanks!

Thanks to all these folks. Sinatra rocks solid, and is a ton of fun to
use.

-greg