app/models/lato/session.rb



module Lato
  class Session
    def initialize(session)
      @session = parse_session(session)
    end

    # Questions
    ##

    def valid?
      !@session.blank?
    end

    def really_valid?
      !!user
    end

    # Helpers
    ##

    def user
      @user ||= Lato::User.find_by(id: user_id)
    end

    def user_id
      @session&.dig(:user_id)
    end

    def get(key)
      @session&.dig(key)
    end

    # Class
    ##

    def self.generate_session_per_user(user_id, extra_params = {})
      extra_params.merge(user_id: user_id).to_json
    end

    private

    def parse_session(session)
      return nil if session.blank?

      (session.is_a?(String) ? JSON.parse(session) : session).with_indifferent_access
    rescue StandardError => e
      Rails.logger.error "Lato::Session.parse_session: #{e.message}"
      nil
    end
  end
end