class Challah::SimpleCookieStore

A base class for storing session data in a browser cookie.

To use a different storage method for persisting a session, just create a new class that responds to read, save and destroy

Public Class Methods

new(session) click to toggle source
# File lib/challah/simple_cookie_store.rb, line 7
def initialize(session)
  @session = session
end

Public Instance Methods

destroy() click to toggle source
# File lib/challah/simple_cookie_store.rb, line 11
def destroy
  clear
end
inspect() click to toggle source
# File lib/challah/simple_cookie_store.rb, line 15
def inspect
  "#<SimpleCookieStore:0x#{object_id.to_s(16)} valid=#{existing?}>"
end
read() click to toggle source
# File lib/challah/simple_cookie_store.rb, line 19
def read
  existing? ? cookie_values : nil
end
save(token, user_id) click to toggle source
# File lib/challah/simple_cookie_store.rb, line 23
def save(token, user_id)
  @token = token
  @user_id = user_id

  write_cookies!
end

Private Instance Methods

clear() click to toggle source
# File lib/challah/simple_cookie_store.rb, line 32
def clear
  cookies.delete(session_cookie_name, domain: domain)
  cookies.delete(validation_cookie_name, domain: domain)
end
cookies() click to toggle source
# File lib/challah/simple_cookie_store.rb, line 41
def cookies
  request.cookie_jar
end
domain() click to toggle source
# File lib/challah/simple_cookie_store.rb, line 49
def domain
  request.session_options[:domain]
end
existing?() click to toggle source

Do the cookies exist, and are they valid?

# File lib/challah/simple_cookie_store.rb, line 54
def existing?
  exists = false

  if session_cookie and validation_cookie
    session_tmp = session_cookie.to_s
    validation_tmp = validation_cookie.to_s

    if validation_tmp == validation_cookie_value(session_tmp)
      exists = true
    end
  end

  exists
end
expiration() click to toggle source
# File lib/challah/simple_cookie_store.rb, line 69
def expiration
  @expiration ||= 1.month.from_now
end
joiner() click to toggle source
# File lib/challah/simple_cookie_store.rb, line 73
def joiner
  '@'
end
prefix() click to toggle source
# File lib/challah/simple_cookie_store.rb, line 77
def prefix
  @prefix ||= [ default_cookie_prefix, user_model_id ].compact.join('-')
end
request() click to toggle source
# File lib/challah/simple_cookie_store.rb, line 81
def request
  raise "No Request Provided" unless @session and @session.request
  @session.request
end
user_model_id() click to toggle source
# File lib/challah/simple_cookie_store.rb, line 98
def user_model_id
  if @session && @session.user_model && @session.user_model.table_name != 'users'
    Encrypter.md5(@session.user_model.table_name).slice(0..5)
  end
end
write_cookies!() click to toggle source
# File lib/challah/simple_cookie_store.rb, line 117
def write_cookies!
  cookies[session_cookie_name] = {
    value:      session_cookie_value,
    expires:    expiration,
    secure:     false,
    httponly:   true,
    domain:     domain
  }

  cookies[validation_cookie_name] = {
    value:      validation_cookie_value,
    expires:    expiration,
    secure:     false,
    httponly:   true,
    domain:     domain
  }
end