Sha256: 6cb76b954c90b1e31227aa07263f8aa3edc3c857d09250eaa6254f272f5ff560

Contents?: true

Size: 878 Bytes

Versions: 3

Compression:

Stored size: 878 Bytes

Contents

# frozen_string_literal: true

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

    validates :persona_name, :variant, presence: true
    belongs_to :signinable, polymorphic: true, optional: true

    before_create :set_password!
    after_create -> { AccountGenerationJob.perform_later(self) }

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

    def signinable_username
      signinable.public_send(DemoMode.signinable_username_method)
    end

    private

    def set_password!
      self.signinable_password ||= DemoMode.current_password
    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
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
demo_mode-1.2.3 app/models/demo_mode/session.rb
demo_mode-1.2.2 app/models/demo_mode/session.rb
demo_mode-1.2.1 app/models/demo_mode/session.rb