class Racket::Utils::Application::RegistryBuilder

Class for easily building a Racket::Registry.

Attributes

registry[R]

Public Class Methods

new(settings = {}) click to toggle source
# File lib/racket/utils/application/registry_builder.rb, line 30
def initialize(settings = {})
  @settings = settings
  @registry = Racket::Registry.singleton_map(service_map)
end
static_server(static_dir, logger) click to toggle source

Sets up a static server with the specified directory and logger.

@param [Pathname|nil] static_dir @param [Logger] logger @return [Proc|nil]

# File lib/racket/utils/application/registry_builder.rb, line 40
def self.static_server(static_dir, logger)
  unless static_dir
    logger.inform_dev('Static server disabled.')
    return nil
  end
  logger.inform_dev("Setting up static server to serve files from #{static_dir}.")
  handler = Rack::File.new(static_dir)
  ->(env) { handler.call(env) }
end

Private Instance Methods

controller_context() click to toggle source
# File lib/racket/utils/application/registry_builder.rb, line 52
def controller_context
  lambda do |reg|
    Module.new do
      define_singleton_method(:application_settings) { reg.application_settings }
      define_singleton_method(:helper_cache) { reg.helper_cache }
      define_singleton_method(:logger) { reg.application_logger }
      define_singleton_method(:get_route) do |klass, action, params|
        reg.router.get_route(klass, action, params)
      end
      define_singleton_method(:utils) { reg.utils }
      define_singleton_method(:view_manager) { reg.view_manager }
    end
  end
end
service_map() click to toggle source
# File lib/racket/utils/application/registry_builder.rb, line 67
def service_map
  {
    application_settings: Racket::Settings::Application.service(@settings),
    controller_context: controller_context,
    static_server: static_server,
    utils: Racket::Utils::ToolBelt.service(root_dir: @settings.fetch(:root_dir, Dir.pwd))
  }.merge!(StatelessServices.services)
end
static_server() click to toggle source
# File lib/racket/utils/application/registry_builder.rb, line 76
def static_server
  klass = self.class
  lambda do |reg|
    klass.static_server(
      Racket::Utils::FileSystem.dir_or_nil(reg.application_settings.public_dir),
      reg.application_logger
    )
  end
end