Module: GlobalSession::Session

Defined in:
lib/global_session/session.rb,
lib/global_session/session.rb,
lib/global_session/session/v1.rb,
lib/global_session/session/v2.rb,
lib/global_session/session/v3.rb,
lib/global_session/session/abstract.rb

Overview

Ladies and gentlemen: the one and only, star of the show, GLOBAL SESSION!

Session is designed to act as much like a Hash as possible. You can use most of the methods you would use with Hash: [], has_key?, each, etc. It has a few additional methods that are specific to itself, mostly involving whether it's expired, valid, supports a certain key, etc.

Global sessions are versioned, and each version may have its own encoding strategy. This module acts as a namespace for the different versions, each of which is represented by a class in the module. They all inherit from the abstract base class in order to ensure that they are internally compatible with other components of this gem.

This module also acts as a façade for reading global session cookies generated by the different versions; it is responsible for detecting the version of a given cookie, then instantiating a suitable session object.

Defined Under Namespace

Classes: Abstract, V1, V2, V3

Class Method Summary collapse

Class Method Details

Decode a global session cookie without



29
30
31
# File 'lib/global_session/session.rb', line 29

def self.decode_cookie(cookie)
  guess_version(cookie).decode_cookie(cookie)
end

.guess_version(cookie) ⇒ Object



37
38
39
40
41
42
43
44
45
46
47
48
# File 'lib/global_session/session.rb', line 37

def self.guess_version(cookie)
  case cookie
  when /^WzM/ # == "[3"
    V3
  when /^l9/  # == binary msgpack symbol for "beginning of array"
    V2
  when /^eN/  # == zlib-compressed form of "{"
    V1
  else
    V1        # due to zlib compression, there might be corner cases with the eN prefix
  end
end

.new(directory, cookie = nil, valid_signature_digest = nil) ⇒ Object



33
34
35
# File 'lib/global_session/session.rb', line 33

def self.new(directory, cookie=nil, valid_signature_digest=nil)
  guess_version(cookie).new(directory, cookie)
end