thanks for the tips everyone.
FWIW we ended up adding this:
module Merb::RenderMixin
include Merb::ControllerExceptions
def layout(layout, options)
self._default_render_options ||= {}
if options[:only]
only = (options[:only].is_a?(Symbol) ? [options[:only]] :
options[:only])
self._default_render_options.update(:layout => ((layout &&
only.include?(action_name.to_sym)) ? layout : false))
elsif options[:exclude]
exclude = (options[:exclude].is_a?(Symbol) ?
[options[:exclude]] : options[:exclude])
self._default_render_options.update(:layout => ((layout && !
exclude.include?(action_name.to_sym)) ? layout : false))
else
self._default_render_options.update(:layout => (layout ?
layout : false))
end
end
end
# so now we can do:
class Profiles < Application
before lambda{|c| c.layout choose_layout, :exclude => :play}
its a bit more long-winded than i would like...