Class: SimpleSession::Base

Inherits:
Object
  • Object
show all
Defined in:
lib/simple_session/base.rb

Direct Known Subclasses

Session

Defined Under Namespace

Classes: OptionHash

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(app, options = {}) ⇒ Base



11
12
13
14
15
16
17
# File 'lib/simple_session/base.rb', line 11

def initialize app, options = {}
  @app          = app
  @key          = options.fetch :key, 'rack.session'
  @secret       = options.fetch :secret, get_secret_errors(options)
  @options_key  = options.fetch :options_key, 'rack.session.options'
  @default_opts = DEFAULT_OPTS.merge!(options)
end

Instance Attribute Details

#requestObject (readonly)

Returns the value of attribute request.



9
10
11
# File 'lib/simple_session/base.rb', line 9

def request
  @request
end

#sessionObject (readonly)

Returns the value of attribute session.



9
10
11
# File 'lib/simple_session/base.rb', line 9

def session
  @session
end

Instance Method Details

#call(env) ⇒ Object



47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
# File 'lib/simple_session/base.rb', line 47

def call env
  # Decrypt request session and store it 
  extract_session env

  # Load session into app env
  load_environment env

  # Pass on request
  status, headers, body = @app.call env

  # Check session for changes and update
  update_options if options_changed?
  update_session if session_changed?

  # Encrypt and add session to headers
  add_session headers

  [status, headers, body]
end

#get_secret_errors(options) ⇒ Object

Raises:

  • (ArgumentError)


19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# File 'lib/simple_session/base.rb', line 19

def get_secret_errors options
  secret = options[:secret]
  missing_msg = %[
    SimpleSession requires a secret like this:
    use SimpleSession::Session, secret: 'some secret'
  ]

  short_msg  = %[
    SimpleSession require a secret with a minimum length of 32
    use SimpleSession::Session, secret: SecureRandom.hex(32)
  ]

  raise ArgumentError, missing_msg unless secret
  raise ArgumentError, short_msg   unless secret.length >= 32
end

#new_session_hashObject



43
44
45
# File 'lib/simple_session/base.rb', line 43

def new_session_hash
  { session_id: SecureRandom.hex(32) }
end

#req_optionsObject



39
40
41
# File 'lib/simple_session/base.rb', line 39

def req_options
  session[:options] if session
end

#req_sessionObject



35
36
37
# File 'lib/simple_session/base.rb', line 35

def req_session
  request.cookies[@key] if request
end