feat: Add standalone mode support

- Create DemoUser migration for standalone development
- Add DemoUser model with polymorphic games association
- Add configuration system (standalone vs mounted)
- Use ENV variables for configuration
- current_player method supports both modes (ApplicationController)
- Can run without Hacktivity for development
This commit is contained in:
Z. Cliffe Schreuders
2025-11-21 15:27:54 +00:00
parent 8b71cf5f2f
commit 2868695265
4 changed files with 63 additions and 1 deletions

View File

@@ -0,0 +1,18 @@
module BreakEscape
class DemoUser < ApplicationRecord
self.table_name = 'break_escape_demo_users'
has_many :games, as: :player, class_name: 'BreakEscape::Game'
validates :handle, presence: true, uniqueness: true
# Mimic User role methods
def admin?
role == 'admin'
end
def account_manager?
role == 'account_manager'
end
end
end

View File

@@ -0,0 +1,9 @@
# BreakEscape Engine Configuration
BreakEscape.configure do |config|
# Set to true for standalone mode (development)
# Set to false when mounted in Hacktivity (production)
config.standalone_mode = ENV['BREAK_ESCAPE_STANDALONE'] == 'true'
# Demo user handle for standalone mode
config.demo_user_handle = ENV['BREAK_ESCAPE_DEMO_USER'] || 'demo_player'
end

View File

@@ -0,0 +1,12 @@
class CreateBreakEscapeDemoUsers < ActiveRecord::Migration[7.0]
def change
create_table :break_escape_demo_users do |t|
t.string :handle, null: false
t.string :role, default: 'user', null: false
t.timestamps
end
add_index :break_escape_demo_users, :handle, unique: true
end
end

View File

@@ -2,5 +2,28 @@ require "break_escape/version"
require "break_escape/engine"
module BreakEscape
# Your code goes here...
class << self
attr_accessor :configuration
end
def self.configure
self.configuration ||= Configuration.new
yield(configuration) if block_given?
end
def self.standalone_mode?
configuration&.standalone_mode || false
end
class Configuration
attr_accessor :standalone_mode, :demo_user_handle
def initialize
@standalone_mode = false
@demo_user_handle = 'demo_player'
end
end
end
# Initialize with defaults
BreakEscape.configure {}