The run_handler plugin allows r.run to take a block, which is yielded the rack response array, before it returns it as a response.
Additionally, r.run also takes a options hash, and you can provide a not_found: :pass
option to keep routing normally if the rack app returns a 404 response.
plugin :run_handler route do |r| r.on 'a' do # Keep running code if RackAppFoo doesn't return a result r.run RackAppFoo, not_found: :pass # Change response status codes before returning. r.run(RackAppBar) do |response| response[0] = 200 if response[0] == 201 end end end