Padrino 0.10.4 - Hot Fix Release, YARD Documentation, and more
Following the recent release of 0.10.3, we got a handful of bug reports that we wanted to address in a quick follow up release. This release is primarily composed of several important bug fixes and also improved YARD documentation coverage. Anyone using 0.10.X is recommended to upgrade to this release ASAP. Full details for this release are below.
We have also subsequently released one more minor fix in 0.10.5.
Two important fixes
Recently, Etienne Lemay brought two important bug reports to our attention after the 0.10.3 release. Both of them were issues affecting newcomers and were addressed in this release:
- Fixes issue with new "sinatra-flash" dependency in generated Gemfile: commit
- Fix exception when template rendering is logged in certain cases: commit
Glad these were reported quickly so we could fix them as soon as possible. Regression tests were put in place to ensure these issues cannot happen again.
Documentation
Additional work has been put in to reach 100% documentation coverage for all the Padrino subgems according to YARD’s documentation analysis tools. Commits are listed below:
There is still a lot of documentation work to be done both for the code and for our guides. We would very much appreciate any help with docs.
Miscellaneous
- Ensures that static_cache_control is respected when serving static files: commit
- Improved logger for cache calls: commit
- Added status code to request logs [Thanks udzura] commit
That concludes the changelog for this release. As always if you want to keep up with Padrino updates, be sure to follow us on twitter: @padrinorb, join us on IRC at “#padrinorb” on freenode or open an issue on GitHub.
Contribute
Padrino 0.10.3 - Sinatra 1.3, Documentation, Minitest, Improved Logger, and
This month and the next is a great time for the Sinatra community at large. Sinatra 1.3 has been released with a lot of exciting changes. Alongside the official release, the sinatra-contrib project is also slowly maturing and will be semi-officially supported by the Sinatra team. The sinatra-recipes resource is a great reference to using components with Sinatra. In addition, Kyle Drake has come along and released sinatra-synchrony which allows for evented concurrent Sinatra applications with almost no code changes and no callbacks.
Thankfully, because Padrino is just Sinatra at its core, our framework and our users can benefit from all the great things being introduced recently for Sinatra. Today we have pushed our Padrino 0.10.3 release which contains a lot of major updates. 0.10.3 upgrades our core to Sinatra 1.3, upgrades our entire test suite to minitest, and upgrades our entire source code documentation to YARD. We have also been hard at work fixing bugs, upgrading our logger, and improving compatibility with JRuby and Rubinius wherever possible. There is also a deprecation you should be aware of in regards to rack-flash. Details for this release are below.
Sinatra 1.3 Upgrade
Sinatra 1.3 has been released with a lot of exciting changes. Be sure to checkout the changes in 1.3.0 in the Sinatra Changelog.
In this release, we have happily upgraded our core to Sinatra 1.3.0. Don't worry as there weren't any breaking changes and upgrading your Padrino projects should be painless. Now all of Padrino is Sinatra 1.3 compatible and taking advantage of the updates including the default enabled rack-protection.
One interesting feature of Sinatra 1.3 to note is the new streaming API:
# app.rb
get '/' do
stream do |out|
out << "It's gonna be legen -\n"
sleep 0.5
out << " (wait for it) \n"
sleep 1
out << "- dary!\n"
end
end
As explained by RKH, the cool thing about this is that it abstracts away the differences between all the different Rack servers taking into account their capabilities. Be sure to read the official announcement to see other new features.
Related 1.3 integration commits are here, here, and here.
Rack-Flash Deprecation
The rack-flash gem has been a dependency of Padrino since early versions of our framework. The gem provides the flash
functionality that most of us depend on in our controllers. Unfortunately, this gem is not compatible with the latest versions of Rack or Sinatra. This gem also depends on private APIs and is not actively maintained. For this reason, Sinatra and Padrino developers are advised to replace rack-flash
in their projects before upgrading to 0.10.3.
Fortunately, upgrading your project and replacing rack-flash
is easy thanks to several viable alternatives that provide the same functionality. First and foremost is the new Padrino default for flash, the sinatra-flash gem. This gem is essentially a drop-in replacement that works in nearly the same way while maintaining a cleaner codebase and leveraging only stable Sinatra public APIs. This gem is likely to work consistently with Sinatra going forward.
New projects in Padrino now automatically include this replacement and upgrading to sinatra-flash
is as easy as replacing rack-flash
in your Gemfile:
# Gemfile
gem "sinatra-flash" # Replaces gem "rack-flash"
In addition, daddye has contributed a slimmer and faster flash in padrino-contrib. Usage is described in the file itself but is as easy as register Padrino::Contrib::Helpers::Flash
. Either solution should make upgrading a snap.
For more information about the switch be sure to read the Github Issue on the subject or see the related commit.
Testing and Minitest
We have been using test-unit and shoulda in Padrino as long as the framework has been around. I am a personal fan of test-unit + shoulda and have been using the combination successfully in many projects. However, times change and the fact that Ruby 1.9 seems to recommend minitest over test-unit encouraged us to take a look at the pain of upgrading.
We wanted a faster test suite and less external dependencies. So we decided to bite the bullet and convert our entire test suite over to the minitest
test library. Built into 1.9 but available as a gem for 1.8.X, this library is quite stable and fast. The best part is that it has a lot of the great parts of shoulda built in. Thanks to the magic of a few strategic aliases, we can even keep the same shoulda syntax we know and love. Thanks to Ken Collins for making our path from Test::Unit to MiniTest a painless one. We are excited to have a leaner, faster test suite going forward.
Commits are here, here, here, and here.
Documentation
Since the creation of Padrino, we have always aspired to have good documentation, guides, and release notes that make getting started with our framework that much easier. That said, we had always used RDoc for our inline source docs and we felt the generated APIs and our documentation coverage left something to be desired.
In this release, we are happy to announce that we have converted the entire source code documentation to YARD and in the process did a better job of documenting the public and semipublic interfaces for our framework. We are excited about this release and continuing to improve our documentation. Thanks to postmodern for helping us get the ball rolling.
Converting this documentation was a team effort with lots of commits: 1, 2, 3, 4, 5, 6, 7, 8, 9.
You can checkout the newly generated YARD docs for Padrino at our API Docs page. We would appreciate any patches to help us improve our docs even further! Speaking of which, a few more documentation fixes:
- Fix issue with generator for template runner on https paths (Thanks xavierRiley): commit.
- Removes unnecessary commas in doc example (Thanks ugisozols): commit.
- Document better example of Padrino::Admin::AccessControl (Thanks Benjamin Oakes): commit.
- Fix typos and inaccuracies related to `time_ago_in_words` helpers: commit
Also, be sure to check out our entirely new Getting Started guide geared towards newcomers to the Sinatra / Padrino community. The guide is intended to provide you the necessary basics and resources to become familiar with the Ruby, Rinatra and Padrino ecosystem.
Components
We have also made a few improvements and updates to our components:
- Adds minitest test component to project generator: commits here, and here.
- Remove less dependency for less generation: commit.
- Added content_for? method to test for content (Thanks mlightner): commit.
- Make YAML locale files Psych compliant for JRuby 1.9 support (Thanks skade): commit.
- Improved logger with much nicer colors and formatted output: [commit here, here and here].
- Adds Latvian locale translation (Thanks ugisozols): commit.
Asset Compression
One final bonus feature to this post is a quick discussion about asset compression / pipelines. Since the release of that feature as a default in Rails 3.1, we have been fielding a lot of questions regarding an equivalent module for Sinatra and Padrino. In the spirit of addressing these concerns, a few early options for Sinatra:
- Jammit Sinatra – Excellent sinatra wrapper for Jammit
- padrino-sprockets – Still a young project but looks promising.
- assets_compressor – Padrino-contrib recipe for simple compression of assets.
- Sinatra AssetPack – Great asset compilation for Sinatra
- Middleman – Interesting Padrino-powered alternative for asset handling
These options should get you started if you are interested in bringing asset pipelining to your Sinatra applications. None of these quite match the comprehensive Rails solution just yet but well on their way.
That concludes the changelog for this release. As always if you want to keep up with Padrino updates, be sure to follow us on twitter: @padrinorb, join us on IRC at “#padrino” on freenode or open an issue on GitHub.