68 lines
1.5 KiB
Ruby
68 lines
1.5 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
require 'logger'
|
|
require 'sequel'
|
|
require 'sqlite3'
|
|
require 'sinatra/base'
|
|
require 'sinatra/json'
|
|
require 'rack/protection'
|
|
|
|
# Load the Sequel timestamps plugin
|
|
Sequel::Model.plugin(:timestamps)
|
|
# Initialize Sequel gem for database actions
|
|
DB = Sequel.connect(adapter: $conf.get('database.adapter'), database: $conf.get('database.database'))
|
|
# Load models
|
|
Dir.glob('./app/models/*.rb').sort().each { |f| require f }
|
|
|
|
# Base Sinatra app
|
|
class StageManager < Sinatra::Base
|
|
@@my_app = {}
|
|
def self.new(*) self < StageManager ? super : Rack::URLMap.new(@@my_app) end
|
|
def self.map(url) @@my_app[url] = self end
|
|
|
|
# Enable and configure sessions
|
|
enable :sessions
|
|
|
|
# Enable rack protection middleware
|
|
use Rack::Protection
|
|
|
|
# Set up static file serving
|
|
enable :static
|
|
set :public_folder, File.join(__dir__, '/public')
|
|
|
|
# Set up our view engine
|
|
set :views, File.join(settings.root, '/views')
|
|
|
|
# Initialize logging
|
|
logger = Logger.new($stdout)
|
|
logger.level = Logger::INFO
|
|
|
|
# Load helper functions
|
|
require_relative 'app/helpers'
|
|
helpers Helpers
|
|
|
|
## Map controllers
|
|
# Top-level routes controller
|
|
class IndexController < StageManager
|
|
map '/'
|
|
end
|
|
|
|
# Channel routes controller
|
|
class ChannelController < StageManager
|
|
map '/channel'
|
|
end
|
|
|
|
# Video routes controller
|
|
class VideoController < StageManager
|
|
map '/video'
|
|
end
|
|
|
|
# API v1 controller
|
|
class ApiV1Controller < StageManager
|
|
map '/api/v1'
|
|
end
|
|
end
|
|
|
|
# Load controllers
|
|
Dir.glob('./app/routes/*.rb').sort().each { |f| require f }
|