class Ramverk::Configuration

Project configuration.

Constants

LOGGER_DEFAULT_FORMATTER

@private

Attributes

apps[R]

Mounted applications.

@return [Hash]

autoload_eager_load[RW]

Eager loads all files in the root of the autoload_paths directories, recursively.

Disabled by default in `development` and `test` environments.

@return [Boolean]

autoload_loader[R]

Autoloader object.

@return [Zeitwerk::Loader]

autoload_paths[RW]

Paths to (re)load constants from. All paths should be relative to project root path.

@return [Array]

autoload_reload[RW]

Reload constants automatically. This is only enabled in `development` by default.

Enabled by default in `development` environment.

@return [Boolean]

logger[RW]

Project logger.

@return [Logger]

logger_filter_params[RW]

Params to be [FILTERED] out from logs.

@return [Array<String>]

logger_formatter[RW]

Logger formatter.

@return [Proc]

logger_level[RW]

Logger severity level.

@return [Symbol]

middleware[R]

Middleware manager.

@return [Ramverk::Middleware]

@see Ramverk::Middleware

public_directory[RW]

Public directory folder.

@return [String]

root[R]

Project root path.

@return [Pathname]

serve_static_files[RW]

Serve static files.

@return [Boolean]

Public Class Methods

new(env: Ramverk.env) click to toggle source

@private rubocop:disable Metrics/AbcSize

# File lib/ramverk/configuration.rb, line 93
def initialize(env: Ramverk.env)
  @env = env
  @root = Pathname.new(Dir.pwd)
  @apps = {}
  @public_directory = "public"
  @serve_static_files = env == :development

  # Middleware
  @middleware = Middleware.new

  # Logging
  @logger = ::Logger.new(env == :test ? IO::NULL : $stdout)
  @logger_level = env == :production ? :info : :debug
  @logger_formatter = LOGGER_DEFAULT_FORMATTER
  @logger_filter_params = %w[password password_confirmation password_hash]

  # Autoloading
  @autoload_loader = Zeitwerk::Loader.new
  @autoload_paths = %w[]
  @autoload_eager_load = env != :development
  @autoload_reload = env == :development
end

Public Instance Methods

boot() click to toggle source

@private

# File lib/ramverk/configuration.rb, line 154
def boot
  boot_logger
  boot_autoload
  boot_apps
  boot_static_file_server

  freeze
end
environment(env) { |self| ... } click to toggle source

Yield the block if the given environment matches the current.

@param env [Symbol] @yieldparam config [Ramverk::Configuration]

@example

Ramverk.configure do |config|
  config.environment :development do
  end
end
# File lib/ramverk/configuration.rb, line 140
def environment(env)
  yield self if env == @env
end
freeze() click to toggle source

@private

# File lib/ramverk/configuration.rb, line 164
def freeze
  apps.freeze
  middleware.freeze

  super
end
mount(app, at:, as:, host: nil) click to toggle source

Mount a Rack compatible at the given path prefix.

@param app [#call]

Application to mount.

@param at [String]

Path prefix to match.

@param as [Symbol]

App identifier.

@param host [Regexp]

Match the given host pattern.
# File lib/ramverk/configuration.rb, line 126
def mount(app, at:, as:, host: nil)
  @apps[as] = [app, Mustermann.new(at), host].freeze
end
root=(value) click to toggle source

Set project root path.

@param value [String, Pathname]

@raise [Errno::ENOENT]

# File lib/ramverk/configuration.rb, line 149
def root=(value)
  @root = Pathname.new(value).realpath
end

Private Instance Methods

boot_apps() click to toggle source

@private

# File lib/ramverk/configuration.rb, line 207
def boot_apps
  apps.each_value do |(app, _pattern, _host)|
    app.boot if app.respond_to?(:boot)
  end
end
boot_autoload() click to toggle source

@private rubocop:disable Metrics/AbcSize

# File lib/ramverk/configuration.rb, line 189
def boot_autoload
  return if !autoload_paths || autoload_paths.empty?

  autoload_paths.each { |path| autoload_loader.push_dir(root.join(path)) }

  if autoload_reload
    autoload_loader.enable_reloading

    require_relative "middleware/reloader"
    middleware.prepend Ramverk::Middleware::Reloader, autoload_loader
  end

  autoload_loader.setup
  Zeitwerk::Loader.eager_load_all if autoload_eager_load
end
boot_logger() click to toggle source

@private

# File lib/ramverk/configuration.rb, line 174
def boot_logger
  return unless logger

  logger.level = logger_level
  logger.formatter = logger_formatter
  logger.freeze

  require_relative "middleware/request_logger"
  middleware.prepend Ramverk::Middleware::RequestLogger,
                     logger,
                     logger_filter_params
end
boot_static_file_server() click to toggle source

@private

# File lib/ramverk/configuration.rb, line 214
def boot_static_file_server
  return unless serve_static_files

  require_relative "middleware/static"
  middleware.prepend Ramverk::Middleware::Static, public_directory
end