Permalink
Browse files

load session data for merge!

ID#prepare_session calls merge! on the newly-created SessionHash, but
this method is not overridden to parse existing data. As such, any
previous session data passed in from an earlier middleware is discarded.

For me, this was breaking Rack::Test while testing a Sinatra app.
  • Loading branch information...
1 parent e4172e7 commit 630c4c3ee8da2692e90d8a74e5c9019acf0f5c9e @jamie jamie committed Jul 19, 2012
Showing with 12 additions and 0 deletions.
  1. +5 −0 lib/rack/session/abstract/id.rb
  2. +7 −0 test/spec_session_cookie.rb
@@ -120,6 +120,11 @@ def empty?
super
end
+ def merge!(hash)
+ load_for_write!
+ super
+ end
+
private
def load_for_read!
@@ -338,4 +338,11 @@ def call(env)
response = response_for(:app => session_id, :request => request)
response.body.should.match(/foo/)
end
+
+ it "allows modifying session data with session data from middleware in front" do
+ request = { 'rack.session' => { :foo => 'bar' }}
+ response = response_for(:app => incrementor, :request => request)
+ response.body.should.match(/counter/)
+ response.body.should.match(/foo/)
+ end
end

0 comments on commit 630c4c3

Please sign in to comment.