From 28686952655c67b869f090ef5cb6f9cb7df513e8 Mon Sep 17 00:00:00 2001 From: "Z. Cliffe Schreuders" Date: Fri, 21 Nov 2025 15:27:54 +0000 Subject: [PATCH] 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 --- app/models/break_escape/demo_user.rb | 18 +++++++++++++ config/initializers/break_escape.rb | 9 +++++++ ...20160000_create_break_escape_demo_users.rb | 12 +++++++++ lib/break_escape.rb | 25 ++++++++++++++++++- 4 files changed, 63 insertions(+), 1 deletion(-) create mode 100644 app/models/break_escape/demo_user.rb create mode 100644 config/initializers/break_escape.rb create mode 100644 db/migrate/20251120160000_create_break_escape_demo_users.rb diff --git a/app/models/break_escape/demo_user.rb b/app/models/break_escape/demo_user.rb new file mode 100644 index 0000000..584c6e2 --- /dev/null +++ b/app/models/break_escape/demo_user.rb @@ -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 diff --git a/config/initializers/break_escape.rb b/config/initializers/break_escape.rb new file mode 100644 index 0000000..46bf629 --- /dev/null +++ b/config/initializers/break_escape.rb @@ -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 diff --git a/db/migrate/20251120160000_create_break_escape_demo_users.rb b/db/migrate/20251120160000_create_break_escape_demo_users.rb new file mode 100644 index 0000000..008c31c --- /dev/null +++ b/db/migrate/20251120160000_create_break_escape_demo_users.rb @@ -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 diff --git a/lib/break_escape.rb b/lib/break_escape.rb index 3e6ead1..f18e026 100644 --- a/lib/break_escape.rb +++ b/lib/break_escape.rb @@ -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 {}