Sha256: 120d50bc98733712bdde36c50b2469c13029662f6f40f0898ab104ab51095aae

Contents?: true

Size: 1.02 KB

Versions: 1

Compression:

Stored size: 1.02 KB

Contents

# frozen_string_literal: true

module DemoMode
  class Session < ActiveRecord::Base
    attribute :variant, default: :default

    validates :persona_name, :variant, presence: true
    validates :persona, presence: { message: :required }, on: :create, if: :persona_name?
    belongs_to :signinable, polymorphic: true, optional: true

    before_create :set_password!

    delegate :begin_demo,
             :custom_sign_in?,
             :display_credentials?,
             to: :persona,
             allow_nil: true

    def signinable_username
      signinable.public_send(DemoMode.signinable_username_method)
    end

    # Heads up: finding a persona is not guaranteed (e.g. past sessions)
    def persona
      DemoMode.personas.find { |p| p.name.to_s == persona_name.to_s }
    end

    def save_and_generate_account!
      transaction do
        save!
        AccountGenerationJob.perform_later(self)
      end
    end

    private

    def set_password!
      self.signinable_password ||= DemoMode.current_password
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
demo_mode-1.3.0 app/models/demo_mode/session.rb