module ActionControllerTweaks::Session

Constants

RESERVED_SESSION_KEYS
VALID_OPTION_KEYS

Public Instance Methods

_delete_expired_session_key(key, expire_at_str) click to toggle source
# File lib/action_controller_tweaks/session.rb, line 109
def _delete_expired_session_key(key, expire_at_str)
  if Time.now > Time.parse(expire_at_str.to_s)
    session.delete(key)
    session_keys_to_expire.delete(key)
  end
rescue
  # Parse error
  # Let"s expire it to be safe
  session.delete(key)
  session_keys_to_expire.delete(key)
end
_delete_expired_session_keys() click to toggle source
# File lib/action_controller_tweaks/session.rb, line 102
def _delete_expired_session_keys
  # Remove keys that are expired
  session_keys_to_expire.each do |key, expire_at_str|
    _delete_expired_session_key(key, expire_at_str)
  end
end
_new_session_keys_to_expire(key, options = {}) click to toggle source
# File lib/action_controller_tweaks/session.rb, line 130
def _new_session_keys_to_expire(key, options = {})
  options.symbolize_keys!

  result = session_keys_to_expire
  expires_in = OptionProcessor.extract_expires_in(options)
  expires_at = OptionProcessor.extract_expires_at(options)

  if [expires_in, expires_at].any?
    result[key] = expires_in ? expires_in.seconds.from_now : expires_at
  end

  result
end
session_keys_to_expire() click to toggle source
# File lib/action_controller_tweaks/session.rb, line 121
def session_keys_to_expire
  # Check whether session key is a hash to prevent exception
  unless session[:session_keys_to_expire].is_a?(Hash)
    session[:session_keys_to_expire] = {}
  end

  session[:session_keys_to_expire]
end
set_session(key, value, options = {}) click to toggle source

Set session just like `session = value` but accept some options about expiry

@option expires_in [Integer]

How long from now should the session value be expired

@option expire_in [Integer]

same as `expires_in`

@option expires_at [Integer]

What time should the session value be expired
(using a time in the past would expire at next request)

@option expire_at [Integer]

same as `expires_at`
# File lib/action_controller_tweaks/session.rb, line 74
def set_session(key, value, options = {})
  if RESERVED_SESSION_KEYS.include?(key.to_s)
    fail Errors::ReservedSessionKeyConflict.new,
      "you are trying to set #{value} to #{key}, "\
      "but reserved by ActionControllerTweaks::Session"
  end

  session[key] = value

  session[:session_keys_to_expire] = _new_session_keys_to_expire(key, options)
end
set_session_with_expiry(key, value, options = {}) click to toggle source

set value in session just like `set_session`, but checked option keys

@raise [ActionControllerTweaks::Session::Errors::InvalidOptionKeys]

# File lib/action_controller_tweaks/session.rb, line 89
def set_session_with_expiry(key, value, options = {})
  option_keys = options.symbolize_keys.keys
  required_option_key_present = option_keys.any? do |k|
    VALID_OPTION_KEYS.include?(k)
  end
  invalid_option_key_absent = (option_keys - VALID_OPTION_KEYS.dup).empty?
  unless required_option_key_present && invalid_option_key_absent
    fail ActionControllerTweaks::Session::Errors::InvalidOptionKeys
  end

  set_session(key, value, options)
end