Merb 1.0.4

Hey guys!

We just released Merb 1.0.4. Some highlights:

  • Update rake install and rake release:merb to work correctly
  • Modify cache README to accurately reflect the best practice for setting up the cache
  • Set the fatal! warning to print out to STDOUT, assuming STDOUT is the terminal (this was previously causing specs that caused a fatal to silently fail, but print the fatal warning to the log)
  • Fix dependencies to remember the backtrace when they were declared, so that failing to load a dependency prints the backtrace at declaration time, rather than printing a backtrace in Merb's bootloader.
  • A boatload of fixes to begin work to make Merb work on 1.9
  • Fix code reloading in non-forking environments, including correctly loading files that were loaded as the result of requiring the initial file, as well as correctly handling files that were previously required (i.e. don't re-require files at load, but do on reload).
  • Significantly speed up content negotiation (we were previously using an expensive class-based approach when a simple array approach would do). We have a fairly good test-suite for content-negotiation, but please alert us to any new failures in exotic scenarios.
  • In addition, the most expensive part of content-negotiation is now cached, which requires a cache mutex. Given how expensive it was before caching, we felt that adding a mutex was acceptable. If you find that performance under heavy concurrency has degraded, please let us know.
  • Modify Merb.logger.* to take a block, which defers the evaluation of the thing to print until it is determined that, in fact, the printing needed to happen. For instance, Merb.logger.debug params.some_expensive_operation becomes Merb.logger.debug { params.some_expensive_operation }, so that some_expensive_operation is not run in production mode.
  • last_modified and last_modified= were modified to support DateTimes (coming out of an ORM) in addition to pure times.
  • A bug related to JRuby backtraces was only partially resolved in 1.0.3. It is fully resolved in 1.0.4.
  • The backtrace checkboxes no longer display in :show_exception_details is false.
  • We now support socket files containing %s, which will be replaced with the socket number.
  • merb.visit, merb.click_link, and other Webrat helpers are now available in console mode, if webrat is installed. If it is not, we no longer throw an error in any circumstance, but print a warning about unavailable features.
  • multipart_request now preserves the session, but with an API change. If you would like to opt into the new feature, require "merb-core/two-oh" in your init.rb. The new multipart_request takes a path, params, and the rack environment, but does not take a block. It returns the same object that request() returns and therefore can be used with the be_successful, etc. rspec matchers. You should use multipart_post and multipart_put in most cases.
  • The multipart helper tests were updated to reflect the new changes, and require "merb-core/one-oh". The specs in spec10 were not modified, and do not opt-in to the new changes.

Merb 1.0.5 will focus exclusively on improving the dependency situation (which we know sucks) and is expected next Monday.

Have a happy week!