# Sinatra 0.9.1 released!

**URL:** <https://www.ruby-forum.com/t/sinatra-0-9-1-released/161848>\
**Category:** Ruby\
**Created:** [March 3, 2009, 1:36am UTC](https://www.ruby-forum.com/t/sinatra-0-9-1-released/161848 "2009-03-03T01:36:29Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![ryantate](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/r/e56c9b/32.png) [@ryantate](https://www.ruby-forum.com/u/ryantate)\
**Post date:** [March 3, 2009, 1:36am UTC](https://www.ruby-forum.com/t/sinatra-0-9-1-released/161848/1 "2009-03-03T01:36:29Z")

</div>

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](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](http://www.sinatrarb.com/extensions.html) 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](http://sinatrarb.com/testing.html) 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](http://sinatra.lighthouseapp.com/projects/9779/tickets/bins/14820)

Commit history:

[Commits · sinatra/sinatra · GitHub](http://github.com/sinatra/sinatra/commits/0.9.1)

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](http://www.sinatrarb.com/documentation.html)

[Sinatra: Configuring Settings](http://www.sinatrarb.com/configuration.html)  
[Testing Sinatra with Rack::Test](http://www.sinatrarb.com/testing.html)  
[Sinatra: Writing Extensions](http://www.sinatrarb.com/extensions.html)

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!

---

<div class="post-metadata">

**Author:** ![ryantate](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/r/e56c9b/32.png) [@ryantate](https://www.ruby-forum.com/u/ryantate)\
**Post date:** [March 3, 2009, 2:19am UTC](https://www.ruby-forum.com/t/sinatra-0-9-1-released/161848/2 "2009-03-03T02:19:10Z")

</div>

On Mon, Mar 2, 2009 at 7:34 PM, Ryan T. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) 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
