# frozen_string_literal: true module Maquina class ActiveSession < ApplicationRecord belongs_to :user, class_name: "Maquina::User", foreign_key: :maquina_user_id delegate :blocked?, to: :user after_initialize :configure_expiration validates :expires_at, presence: true, comparison: {greater_than: Time.zone.now}, if: ->(session) { (session.new_record? || session.changed.includes?("expires_at")) && Maquina.configuration.session_expiration.present? } validate :non_blocked_user def expired? return false if expires_at.blank? !expires_at.future? end private def non_blocked_user return if user.blank? || !blocked? errors.add(:user, :blocked) end def configure_expiration if new_record? && expires_at.blank? && Maquina.configuration.session_expiration.present? self.expires_at = Time.zone.now.since(Maquina.configuration.session_expiration) end end end end