Harbor Documentation

Harbor::Contrib::Session::Redis

This class provides Redis backed in-memory session support. You can use it instead of the builtin Harbor::Session::Cookie by doing:

  Harbor::Session.configure do |session|
    session[:store] = Harbor::Contrib::Session::Redis
  end

 TODO: Currently there is no support for configuring non-default options for the

redis connection. So this is not appropriate for production use at this point (unless you’re running everything from a single server I guess).

Public Class Methods

commit_session(data, request)

This is part of the Session Store API

      # File lib/harbor/contrib/session/redis.rb, line 50
50:         def self.commit_session(data, request)
51:           session_id = data[:session_id]
52:           data[:updated_at] = Time::now
53:           redis.set(session_id, dump(data))
54:           redis.expire(session_id, expire_after)
55:           session_id
56:         end

load_session(delegate, session_id, request = nil)

This is part of the Session Store API

      # File lib/harbor/contrib/session/redis.rb, line 31
31:         def self.load_session(delegate, session_id, request = nil)
32:           if session_id.blank? || !(data = redis.get(session_id))
33:             session_id = generate_uuid
34:             data = { :session_id => session_id, :updated_at => Time::now, :client_name => client_name }
35:             redis.set(session_id, dump(data))
36:             redis.expire(session_id, expire_after)
37: 
38:             remote_ip = request ? request.remote_ip : nil
39:             user_agent_raw = request ? request.env["HTTP_USER_AGENT"] : nil
40: 
41:             delegate.session_created(session_id, remote_ip, user_agent_raw)
42: 
43:             data
44:           else
45:             load(data)
46:           end
47:         end

Private Class Methods

client_name()

      # File lib/harbor/contrib/session/redis.rb, line 79
79:         def self.client_name
80:           @client_name ||= begin
81:             if name = Harbor::Session.options[:name]
82:               name
83:             else
84:               raise ArgumentError.new("You must provide a :name to Harbor::Session::options!")
85:             end
86:           end
87:         end

dump(data)

       # File lib/harbor/contrib/session/redis.rb, line 103
103:         def self.dump(data)
104:           YAML::dump data
105:         end

expire_after()

      # File lib/harbor/contrib/session/redis.rb, line 60
60:         def self.expire_after
61:           @expire_after ||= (Harbor::Session.options[:expire_after] || 3600)
62:         end

generate_uuid()

      # File lib/harbor/contrib/session/redis.rb, line 72
72:           def self.generate_uuid
73:             @uuid_generator ||= UUID.new
74:             @uuid_generator.generate.freeze
75:           end

generate_uuid()

      # File lib/harbor/contrib/session/redis.rb, line 66
66:           def self.generate_uuid
67:             java.util.UUID.randomUUID.to_s.freeze
68:           end

load(data)

       # File lib/harbor/contrib/session/redis.rb, line 107
107:         def self.load(data)
108:           YAML::load data
109:         end

redis()

      # File lib/harbor/contrib/session/redis.rb, line 89
89:         def self.redis
90:           @redis ||= if sock = Harbor::Session.options[:sock]
91:             ::Redis::Directory.new(:path => sock).get("sessions", client_name)
92:           else
93:             host = Harbor::Session.options[:host] || "localhost"
94:             port = Harbor::Session.options[:port] || 6379
95:             ::Redis::Directory.new(:host => host, :port => port).get("sessions", client_name)
96:           end
97:         end

redis=(connection)

       # File lib/harbor/contrib/session/redis.rb, line 99
 99:         def self.redis=(connection)
100:           @redis = connection
101:         end