Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: roidrage/redis-session-store
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: master
Choose a base ref
...
head repository: stipple/redis-session-store
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: master
Choose a head ref
Can’t automatically merge. Don’t worry, you can still create the pull request.
  • 2 commits
  • 2 files changed
  • 1 contributor

Commits on Feb 7, 2012

  1. update for Rails 3.2, allow for already-initialized redis to be used …

    …as the connection. backwards compatability not considered
    mpd committed Feb 7, 2012
    Copy the full SHA
    b865d8d View commit details
  2. Copy the full SHA
    f0432b9 View commit details
Showing with 34 additions and 9 deletions.
  1. +16 −9 lib/redis-session-store.rb
  2. +18 −0 redis-session-store.gemspec
25 changes: 16 additions & 9 deletions lib/redis-session-store.rb
Original file line number Diff line number Diff line change
@@ -12,7 +12,7 @@
# :key_prefix => Prefix for keys used in Redis, e.g. myapp-. Useful to separate session storage keys visibly from others
# :expire_after => A number in seconds to set the timeout interval for the session. Will map directly to expiry in Redis

class RedisSessionStore < ActionController::Session::AbstractStore
class RedisSessionStore < ActionDispatch::Session::AbstractStore

def initialize(app, options = {})
# Support old :expires option
@@ -28,12 +28,12 @@ def initialize(app, options = {})
:key_prefix => ""
}.update(options)

@redis = Redis.new(@default_options)
@redis = options[:redis] || Redis.new(@default_options)
end

private
def prefixed(sid)
"#{@default_options[:key_prefix]}#{sid}"
"#{@default_options[:key_prefix]}:#{sid}"
end

def get_session(env, sid)
@@ -47,18 +47,25 @@ def get_session(env, sid)
[sid, session]
end

def set_session(env, sid, session_data)
options = env['rack.session.options']
def set_session(env, sid, session_data, options)
options ||= env['rack.session.options']
expiry = options[:expire_after] || nil

@redis.pipelined do
if expiry
@redis.setex(prefixed(sid), expiry, Marshal.dump(session_data))
else
@redis.set(prefixed(sid), Marshal.dump(session_data))
@redis.expire(prefixed(sid), expiry) if expiry
end

return true
sid
rescue Errno::ECONNREFUSED
return false
false
end


def destroy(env)
if sid = current_session_id(env)
@redis.del(prefixed(sid))
end
end
end
18 changes: 18 additions & 0 deletions redis-session-store.gemspec
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# -*- encoding: utf-8 -*-
$:.push File.expand_path("../lib", __FILE__)

Gem::Specification.new do |s|
s.name = "redis-session-store"
s.version = '0.1.0'
s.platform = Gem::Platform::RUBY
s.authors = ["Mathias Meyer", "Michael Dungan"]
#s.email = [""]
#s.homepage = ""
s.summary = %q{redis-backed sessions for Rails 3+}
s.description = %q{redis-backed sessions for Rails 3+}

s.files = `git ls-files`.split("\n")
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
s.require_paths = ["lib"]
end