Padrino 0.13.0 - Mustermann Router, Performance Enhancements, Streaming Support, and Much More
Padrino 0.12.4 was shipped on October 19th 2014. Hard to believe that just about a year has flown by since then as we have been working towards our next major release of Padrino. While there have been betas available for some time, we are excited to announce the final release of Padrino 0.13.0! This version has a huge host of improvements and upgrades, both big and small.
This 0.13.0 release brings several major changes and updates including a completely redesigned router, significant performance enhancements, streaming support, bug fixes and a ton of code cleanup. Full details for this release are below. You should also check out the 0.13.0 upgrade guide as well for a detailed look at moving up from 0.12.X.
Redesigned Mustermann Router
One of the big changes in this release was the retirement of http_router which is no longer being maintained. We have switched to a brand new router written by @namusyaka. The older router had accrued significant technical debt with many hacks and workarounds introduced along with thread-safety issues. We’ve been working on this redesigned router for quite sometime, running router benchmarks and making sure we took our time to ensure a smooth replacement. We are proud to unveil the new router with this release and you can read more details in this PR.
Project-wide Configuration
With 0.13.0 comes project-wide global configuration options with environment support. This is inspired by the Sinatra configuration system but is project-wide rather than app-specific. Configuration can be done anywhere in your project including config/apps.rb
:
Padrino.config.value1 = 42
Padrino.configure :development do |config|
config.value2 = "only development"
end
Padrino.configure :development, :production do |config|
config.value2 = "both development and production"
end
Padrino.configure do |config|
config.value2 = "any environment"
end
and then these values can be accessed with:
Padrino.config.value1 # => 42
Padrino.config.value2 # => 'any environment'
Thanks to @ujifgc for implementing this. More details can be found in the PR.
Sinatra Upgrades
In this release, we have upgraded Sinatra to the latest 1.4.6 release which allowed us to clean up several previous workarounds. The result is an even cleaner integration with Sinatra. This includes the following Sinatra compatibility improvements:
- FIX Remove temporary
show_exceptions
code - FIX #1867 Update ShowExceptions to suit latest rack master (@namusyaka)
- FIX #1950 Padrino now follows Sinatra’s charset policy (@ujifgc)
- FIX Sinatra async streaming callbacks
- FIX #1880 rendering issue by accepting string content types (@ujifgc)
- FIX #1942 maintain Sinatra params indifference (@ujifgc)
We are committed to compatibility with our Sinatra core and this release marks a solid step forward in that regard.
Component Updates
There are several component updates and tweaks in this release including but not limited to:
- NEW #1133 switch default renderer to none (@ujifgc)
- FIX Update rack-test to 0.6.3 and remove old patch (@ujifgc)
- NEW #1908 Adds test-unit as a test component (@namusyaka)
- FIX #1932 Replace ConnectionManagement with ConnectionPoolManagement (@namusyaka)
- NEW #1940 Add IdentityMap middleware to datamapper (@namusyaka)
- FIX #1895 Use compass-blueprint gem for improved compass generator (@myokoym)
Performance Improvements
We are committed to making Padrino as lightweight and comparable to raw Sinatra speed as possible. In that vein, we have made the following improvements:
- NEW #1857 Precompile routes when loading Padrino (@namusyaka)
- FIX #1792 Faster code using reverse_each to iterate gems (@glaucocustodio)
- FIX #1793 Faster codeusing #sub instead of #gsub (@glaucocustodio)
- FIX #1959 simplify the mounter class (@dnesteryuk)
- FIX #1891 Refactorings for more reliable dependency loading (@hcatlin, @namusyaka)
We’ve also introduced a benchmark test suite to test speed for padrino core and router:
This should help us in making continued improvements going forward.
Bug Fixes and Misc Improvements
A full list of other changes can be found on Github but an abridged version has been appended below:
- FIX #1614 Do not search for caller in bundler lib (@ujifgc)
- FIX #1796 Save and restore layout setting on render (@ujifgc)
- FIX #1965 Fail properly on wrong mailer name or message (@ujifgc)
- FIX #1916 Check key existence on caching (@namusyaka)
- NEW #1919 allow configuring log file path
- FIX #1931 render partials in mail if padrino-helpers is available (@ujifgc)
- FIX #1829 add absoluteurl to app methods, add :baseurl setting (@ujifgc)
- NEW #1898 Adds missing helpers for the input html element (@namusyaka)
- FIX AWS namespace in Dynamoid component (@namusyaka)
- FIX Root index route incorrectly matches single-character URLs (@namusyaka)
- NEW #1929 Alias db:migrate:down and db:migrate:up when using datamapper (@postmodern)
- FIX Restore AbstractFormBuilder#fieldhumanname (@namusyaka)
- FIX #1936 Don’t echo password input (@namusyaka)
- FIX Cache test for moneta (@ujifgc)
- FIX #1943 Issue with format provides in controller with wildcard accepts header (@ujifgc)
- FIX properly reload classes without instances (@ujifgc)
- FIX #1922 consider methodless constants not external (@ujifgc)
- NEW #1853 Adds wrapper for application which allows better extensibility (@namusyaka)
- NEW Remove deprecated cache functionality (@minad)
- FIX #1772 add button content tag to button_to block (@ujifgc)
- FIX #1795 load missing models for sq:seed (@ujifgc)
- NEW Use mustermann19 in all cases now (@namusyaka)
- FIX #1803 Use relative paths for sqlite and sequel (@ujifgc)
- FIX #1821 Don’t load dependency files unless app’s root is within Padrino root (@namusyaka)
- FIX #1835 Switch admin to sequel fixtures rather than datamapper (@namusyaka)
- FIX Widen the range of
default_dependency_paths
(@namusyaka) - NEW #1831 Implement the
mi:translate
task (@namusyaka) - FIX #1852 ApplicationWrapper Prerequisite Issue (@hcatlin)
- FIX #1856 Skips loading models for the activerecord rake tasks (@namusyaka)
- NEW #1818 Implement
source_location
option for logger (@namusyaka) - FIX #1859 Correct issues with the admin seeds generator (@Quintasan)
- FIX #1879 Improve access to Active Record Database Configuration (@scudelletti)
- DELETE remove deprecations (String#undent, #linkto with :fragment, old caching, old form builder, rendering #fetchtemplatefile, #cachetemplatefile!, #resolvedlayout, Application#loadpaths, Padrino.setloadpaths, Padrino.loadpaths)
- FIX #1860 Padrino —environment switch now takes precedence over RACK_ENV environment variable
- FIX #1849 return proper exit codes in CLI
Want to give a special thanks to the key contributors for this release, working tirelessly to make this Padrino release happen: @ujifgc, @namusyaka. Thanks so much!