squareteam/yodatra

View on GitHub
lib/yodatra/boot.rb

Summary

Maintainability
A
25 mins
Test Coverage
require 'sinatra/activerecord'

module Yodatra
  class Base < Sinatra::Base
    set(:booted, false)
    set(:booting, true)
    set(:models_directory, 'app/models')
    set(:controllers_directory, 'app/controllers')
    set(:envs_directory, 'config/environments')
    set(:config_directory, 'config')
  end

  module Boot
    def booting= done
      super
      register Yodatra::Boot
    end

    def self.registered app
      raise "Check it out O'man! You're trying to boot the app [#{app}] which is already booted!" if app.booted
      if app.booting
        # ActiveRecord
        app.register Sinatra::ActiveRecordExtension

        app_file = "#{app.config_directory}/application.rb"
        require File.expand_path(app_file) if File.exist? app_file

        env_file = "#{app.envs_directory}/#{app.environment}.rb"
        require File.expand_path(env_file) if File.exist? env_file

        %w(models_directory controllers_directory).each do |to_load|
          Dir["#{app.send(to_load)}/**/*.rb"].sort.each do |file_path|
            require File.expand_path(file_path)
          end
        end

        app.set :booting, false
        app.set :booted, true
      end
    end
  end
end