module DbSession

Constants

SESSION_KEY
VERSION

Public Class Methods

setup() { |self| ... } click to toggle source
# File lib/db_session.rb, line 12
def self.setup
  yield self
end

Public Instance Methods

add_to_db_session(key, object) click to toggle source
# File lib/db_session.rb, line 53
def add_to_db_session(key, object)
  can_be_stored = can_be_stored?(object)

  if can_be_stored
    db_session_id = session[SESSION_KEY]
    db_session_id ? db_session = DbSessionStore.find_by(id: db_session_id) : db_session = nil

    db_session ? main_data_object = JSON.parse(db_session.serialized_data) : main_data_object = {}
    main_data_object[key] = {class: get_class(object), object: object}

    if db_session
      db_session.serialized_data = main_data_object.to_json
      db_session.save
    else
      db_session = DbSessionStore.create(serialized_data: main_data_object.to_json)
    end

    session[SESSION_KEY] = db_session.id
  end

  clear_expired_sessions

  can_be_stored
end
clear_db_session() click to toggle source
# File lib/db_session.rb, line 78
def clear_db_session
  db_session_id = session[SESSION_KEY]
  if db_session_id
    db_session = DbSessionStore.find_by(id: db_session_id)
    db_session.destroy if db_session
  end
end
get_from_db_session(key=nil) click to toggle source
# File lib/db_session.rb, line 16
def get_from_db_session(key=nil)
  db_session_id = session[SESSION_KEY]
  db_session_id ? db_session = DbSessionStore.find_by(id: db_session_id) : db_session = nil

  if db_session
    main_data_object = JSON.parse(db_session.serialized_data)

    if key
      return rebuild_object(main_data_object[key.to_s])
    else
      main_data_object.each do |k, v|
        main_data_object[k] = rebuild_object(main_data_object[k])
      end
      return main_data_object
    end
  end
end
set_db_session(key, object) click to toggle source
# File lib/db_session.rb, line 34
def set_db_session(key, object)
  clear_db_session

  can_be_stored = can_be_stored?(object)

  if can_be_stored
    main_data_object = {}
    main_data_object[key] = {class: get_class(object), object: object}

    db_session = DbSessionStore.create(serialized_data: main_data_object.to_json)

    session[SESSION_KEY] = db_session.id
  end

  clear_expired_sessions

  can_be_stored
end

Private Instance Methods

can_be_stored?(obj) click to toggle source
# File lib/db_session.rb, line 106
def can_be_stored?(obj)
  begin
    JSON.parse(obj.to_json)
    return true
  rescue
    return false
  end
end
class_from_string(str) click to toggle source
# File lib/db_session.rb, line 115
def class_from_string(str)
  str.split('::').inject(Object) do |mod, class_name|
    mod.const_get(class_name)
  end
end
clear_expired_sessions() click to toggle source
# File lib/db_session.rb, line 121
def clear_expired_sessions
  begin
    ClearSessionStoresWorker.perform_async(session_validity)
  rescue Exception => e
    logger.error e.message.colorize(:color => :red, :background => :black)
    logger.error 'CONSEQUENCE: Old sessions are not been cleared from the database'.colorize(:color => :yellow, :background => :black)
  end
end
get_class(obj) click to toggle source
# File lib/db_session.rb, line 98
def get_class(obj)
  if obj
    if obj.class.ancestors.include?(ActiveRecord::Base) && obj.respond_to?(:assign_attributes)
      obj.class.name
    end
  end
end
rebuild_object(obj) click to toggle source
# File lib/db_session.rb, line 88
def rebuild_object(obj)
  if obj['class']
    new = class_from_string(obj['class']).new
    new.assign_attributes(obj['object'])
    new
  else
    obj['object']
  end
end