From aa90e1e237715921ef8e7d16359d4f75baa089c9 Mon Sep 17 00:00:00 2001 From: TOMITA Masahiro Date: Tue, 13 Jun 2017 23:15:03 +0900 Subject: [PATCH 1/3] delete unnecessary file. --- lib/rack/session/sequel_org.rb | 99 ---------------------------------- 1 file changed, 99 deletions(-) delete mode 100644 lib/rack/session/sequel_org.rb diff --git a/lib/rack/session/sequel_org.rb b/lib/rack/session/sequel_org.rb deleted file mode 100644 index e3303d5..0000000 --- a/lib/rack/session/sequel_org.rb +++ /dev/null @@ -1,99 +0,0 @@ -require 'rack/session/abstract/id' -require 'sequel' - -module Rack - module Session - class Sequel < Abstract::ID - attr_reader :mutex, :pool - - DEFAULT_OPTIONS = Abstract::ID::DEFAULT_OPTIONS.merge \ - :table_name => :sessions, :db_uri => 'sqlite:/' - - def initialize(app, options={}) - options = {:db => options } if options.kind_of? ::Sequel::Database - options = {:db_uri => options } if options.is_a? String - super - db = @default_options[:db] || ::Sequel.connect(@default_options[:db_uri]) - db.create_table @default_options[:table_name] do - primary_key :id - String :sid, :unique => true, :null => false - text :session - DateTime :updated_at - end unless db.table_exists?(@default_options[:table_name]) - @pool = db[@default_options[:table_name]] - @mutex = Mutex.new - end - - def generate_sid - loop do - sid = super - break sid unless _exists? sid - end - end - - def get_session(env, sid) - with_lock(env, [nil, {}]) do - unless sid and session = _get(sid) - sid, session = generate_sid, {} - _put sid, session - end - [sid, session] - end - end - - def set_session(env, session_id, new_session, options) - with_lock(env, false) do - _put session_id, new_session - session_id - end - end - - def destroy_session(env, session_id, options) - with_lock(env) do - _delete(session_id) - generate_sid unless options[:drop] - end - end - - def with_lock(env, default=nil) - @mutex.lock if env['rack.multithread'] - yield - rescue - default - ensure - @mutex.unlock if @mutex.locked? - end - - private - - def _put(sid, session) - if _exists?(sid) - _record(sid).update :session => [Marshal.dump(session)].pack('m*'), :updated_at => Time.now.utc - else - @pool.insert :sid => sid, :session => [Marshal.dump(session)].pack('m*'), :updated_at => Time.now.utc - end - end - - def _get(sid) - if _exists?(sid) - Marshal.load(_record(sid).first[:session].unpack('m*').first) - end - end - - def _delete(sid) - if _exists?(sid) - _record(sid).delete - end - end - - def _exists?(sid) - !_record(sid).empty? - end - - def _record(sid) - @pool.filter('sid = ?', sid) - end - end - end -end - From e914f39929287562e3183e02bf3b1839b3b9b153 Mon Sep 17 00:00:00 2001 From: TOMITA Masahiro Date: Tue, 13 Jun 2017 23:36:18 +0900 Subject: [PATCH 2/3] for modern rspec. --- ...ssion_sequel.rb => session_sequel_spec.rb} | 88 +++++++++---------- 1 file changed, 43 insertions(+), 45 deletions(-) rename spec/{spec_session_sequel.rb => session_sequel_spec.rb} (71%) diff --git a/spec/spec_session_sequel.rb b/spec/session_sequel_spec.rb similarity index 71% rename from spec/spec_session_sequel.rb rename to spec/session_sequel_spec.rb index 41ff44f..400afc7 100644 --- a/spec/spec_session_sequel.rb +++ b/spec/session_sequel_spec.rb @@ -39,25 +39,23 @@ it "creates a new cookie" do pool = Rack::Session::Sequel.new(incrementor) res = Rack::MockRequest.new(pool).get("/") - res["Set-Cookie"].should.match session_match - res.body.should.equal '{"counter"=>1}' + expect(res["Set-Cookie"]).to match session_match + expect(res.body).to eq '{"counter"=>1}' end it "determines session from a cookie" do pool = Rack::Session::Sequel.new(incrementor) req = Rack::MockRequest.new(pool) cookie = req.get("/")["Set-Cookie"] - req.get("/", "HTTP_COOKIE" => cookie). - body.should.equal '{"counter"=>2}' - req.get("/", "HTTP_COOKIE" => cookie). - body.should.equal '{"counter"=>3}' + expect(req.get("/", "HTTP_COOKIE" => cookie).body).to eq '{"counter"=>2}' + expect(req.get("/", "HTTP_COOKIE" => cookie).body).to eq '{"counter"=>3}' end it "survives nonexistant cookies" do pool = Rack::Session::Sequel.new(incrementor) res = Rack::MockRequest.new(pool). get("/", "HTTP_COOKIE" => "#{session_key}=blarghfasel") - res.body.should.equal '{"counter"=>1}' + expect(res.body).to eq '{"counter"=>1}' end it "does not send the same session id if it did not change" do @@ -66,18 +64,18 @@ res0 = req.get("/") cookie = res0["Set-Cookie"][session_match] - res0.body.should.equal '{"counter"=>1}' - pool.pool.count.should.equal 1 + expect(res0.body).to eq '{"counter"=>1}' + expect(pool.pool.count).to eq 1 res1 = req.get("/", "HTTP_COOKIE" => cookie) - res1["Set-Cookie"].should.be.nil - res1.body.should.equal '{"counter"=>2}' - pool.pool.count.should.equal 1 + expect(res1["Set-Cookie"]).to be_nil + expect(res1.body).to eq '{"counter"=>2}' + expect(pool.pool.count).to eq 1 res2 = req.get("/", "HTTP_COOKIE" => cookie) - res2["Set-Cookie"].should.be.nil - res2.body.should.equal '{"counter"=>3}' - pool.pool.count.should.equal 1 + expect(res2["Set-Cookie"]).to be_nil + expect(res2.body).to eq '{"counter"=>3}' + expect(pool.pool.count).to eq 1 end it "deletes cookies with :drop option" do @@ -88,18 +86,18 @@ res1 = req.get("/") session = (cookie = res1["Set-Cookie"])[session_match] - res1.body.should.equal '{"counter"=>1}' - pool.pool.count.should.equal 1 + expect(res1.body).to eq '{"counter"=>1}' + expect(pool.pool.count).to eq 1 res2 = dreq.get("/", "HTTP_COOKIE" => cookie) - res2["Set-Cookie"].should.be.nil - res2.body.should.equal '{"counter"=>2}' - pool.pool.count.should.equal 0 + expect(res2["Set-Cookie"]).to be_nil + expect(res2.body).to eq '{"counter"=>2}' + expect(pool.pool.count).to eq 0 res3 = req.get("/", "HTTP_COOKIE" => cookie) - res3["Set-Cookie"][session_match].should.not.equal session - res3.body.should.equal '{"counter"=>1}' - pool.pool.count.should.equal 1 + expect(res3["Set-Cookie"][session_match]).to_not eq session + expect(res3.body).to eq '{"counter"=>1}' + expect(pool.pool.count).to eq 1 end it "provides new session id with :renew option" do @@ -110,23 +108,23 @@ res1 = req.get("/") session = (cookie = res1["Set-Cookie"])[session_match] - res1.body.should.equal '{"counter"=>1}' - pool.pool.count.should.equal 1 + expect(res1.body).to eq '{"counter"=>1}' + expect(pool.pool.count).to eq 1 res2 = rreq.get("/", "HTTP_COOKIE" => cookie) new_cookie = res2["Set-Cookie"] new_session = new_cookie[session_match] - new_session.should.not.equal session - res2.body.should.equal '{"counter"=>2}' - pool.pool.count.should.equal 1 + expect(new_session).to_not eq session + expect(res2.body).to eq '{"counter"=>2}' + expect(pool.pool.count).to eq 1 res3 = req.get("/", "HTTP_COOKIE" => new_cookie) - res3.body.should.equal '{"counter"=>3}' - pool.pool.count.should.equal 1 + expect(res3.body).to eq '{"counter"=>3}' + expect(pool.pool.count).to eq 1 res4 = req.get("/", "HTTP_COOKIE" => cookie) - res4.body.should.equal '{"counter"=>1}' - pool.pool.count.should.equal 2 + expect(res4.body).to eq '{"counter"=>1}' + expect(pool.pool.count).to eq 2 end it "omits cookie with :defer option" do @@ -135,15 +133,15 @@ dreq = Rack::MockRequest.new(defer) res1 = dreq.get("/") - res1["Set-Cookie"].should.equal nil - res1.body.should.equal '{"counter"=>1}' - pool.pool.count.should.equal 1 + expect(res1["Set-Cookie"]).to eq nil + expect(res1.body).to eq '{"counter"=>1}' + expect(pool.pool.count).to eq 1 end # anyone know how to do this better? it "should merge sessions when multithreaded" do unless $DEBUG - 1.should.equal 1 + expect(1).to eq 1 next end @@ -152,7 +150,7 @@ req = Rack::MockRequest.new(pool) res = req.get('/') - res.body.should.equal '{"counter"=>1}' + expect(res.body).to eq '{"counter"=>1}' cookie = res["Set-Cookie"] sess_id = cookie[/#{pool.key}=([^,;]+)/,1] @@ -172,36 +170,36 @@ end end.reverse.map{|t| t.run.join.value } r.each do |resp| - resp['Set-Cookie'].should.equal cookie - resp.body.should.include '"counter"=>2' + expect(resp['Set-Cookie']).to eq cookie + expect(resp.body).to include '"counter"=>2' end session = pool.pool[sess_id] - session.count.should.equal tnum+1 # counter - session['counter'].should.equal 2 # meeeh + expect(session.count).to eq tnum+1 # counter + expect(session['counter']).to eq 2 # meeeh end it "does not return a cookie if cookie was not read/written" do app = Rack::Session::Sequel.new(nothing) res = Rack::MockRequest.new(app).get("/") - res["Set-Cookie"].should.be.nil + expect(res["Set-Cookie"]).to be_nil end it "does not return a cookie if cookie was not written (only read)" do app = Rack::Session::Sequel.new(session_id) res = Rack::MockRequest.new(app).get("/") - res["Set-Cookie"].should.be.nil + expect(res["Set-Cookie"]).to be_nil end it "returns even if not read/written if :expire_after is set" do app = Rack::Session::Sequel.new(nothing, :expire_after => 3600) res = Rack::MockRequest.new(app).get("/", 'rack.session' => {'not' => 'empty'}) - res["Set-Cookie"].should.not.be.nil + expect(res["Set-Cookie"]).to_not be_nil end it "returns no cookie if no data was written and no session was created previously, even if :expire_after is set" do app = Rack::Session::Sequel.new(nothing, :expire_after => 3600) res = Rack::MockRequest.new(app).get("/") - res["Set-Cookie"].should.be.nil + expect(res["Set-Cookie"]).to be_nil end end From 2d8b8a67b8125293ea2c6d0a88b35a0944d0743d Mon Sep 17 00:00:00 2001 From: TOMITA Masahiro Date: Tue, 13 Jun 2017 23:37:08 +0900 Subject: [PATCH 3/3] for modern sequel. --- lib/rack/session/sequel.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/rack/session/sequel.rb b/lib/rack/session/sequel.rb index cf1be34..3dfd8f8 100644 --- a/lib/rack/session/sequel.rb +++ b/lib/rack/session/sequel.rb @@ -96,7 +96,7 @@ def _exists?(sid) end def _record(sid) - @pool.filter('sid = ?', sid) + @pool.where(sid: sid) end end end