Sha256: 06cfa2d772d245f1b9d3b58be3c33d3d89047ad2e8f1f43727379583674d5abb

Contents?: true

Size: 1.91 KB

Versions: 3

Compression:

Stored size: 1.91 KB

Contents

# frozen_string_literal: true

module DemoMode
  class SessionsController < DemoMode::ApplicationController
    skip_before_action :demo_splash!, raise: false

    # Support link based session creation
    skip_forgery_protection only: :create

    def show
      @session = Session.find(params[:id])
      respond_to do |f|
        f.html { begin_demo_if_ready! }
        f.json { render_signinable_json }
      end
    end

    def new
      @session = Session.new
      respond_to do |f|
        f.html { render :new }
        f.json { render_personas_json }
      end
    end

    def create
      @session = Session.new(create_params)
      @session.save!
      session[:demo_session] = { 'id' => @session.id, 'last_request_at' => Time.zone.now }
      respond_to do |f|
        f.html { redirect_to @session }
        f.json { render_signinable_json }
      end
    end

    def update
      @session = Session.find(params[:id])
      begin_demo!
    end

    private

    def begin_demo_if_ready!
      begin_demo! if @session.signinable && !@session.display_credentials?
    end

    def begin_demo!
      instance_eval(&@session.begin_demo)
    end

    def render_signinable_json
      if @session.signinable.blank?
        render json: { id: @session.id, processing: true }
      else
        render json: {
          id: @session.id,
          processing: false,
          username: @session.signinable_username,
          password: @session.signinable_password,
        }
      end
    end

    def render_personas_json
      render(
        json: DemoMode.personas.map do |persona|
          {
            persona_name: persona.name,
            title: persona.name.to_s.titleize,
            features: persona.features,
            variants: persona.variants.map { |name, _| { name: name } },
          }
        end,
      )
    end

    def create_params
      params.require(:session).permit(:persona_name, :variant)
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
demo_mode-1.2.3 app/controllers/demo_mode/sessions_controller.rb
demo_mode-1.2.2 app/controllers/demo_mode/sessions_controller.rb
demo_mode-1.2.1 app/controllers/demo_mode/sessions_controller.rb