lib/hanami/configuration.rb in hanami-2.0.0.alpha4 vs lib/hanami/configuration.rb in hanami-2.0.0.alpha5
- old
+ new
@@ -10,10 +10,11 @@
require_relative "application/settings/dotenv_store"
require_relative "configuration/logger"
require_relative "configuration/middleware"
require_relative "configuration/router"
require_relative "configuration/sessions"
+require_relative "configuration/source_dirs"
module Hanami
# Hanami application configuration
#
# @since 2.0.0
@@ -23,27 +24,34 @@
include Dry::Configurable
DEFAULT_ENVIRONMENTS = Concurrent::Hash.new { |h, k| h[k] = Concurrent::Array.new }
private_constant :DEFAULT_ENVIRONMENTS
+ MODULE_DELIMITER = "::"
+ private_constant :MODULE_DELIMITER
+
attr_reader :actions
attr_reader :middleware
attr_reader :router
attr_reader :views, :assets
attr_reader :environments
private :environments
- def initialize(env:)
+ def initialize(application_name:, env:)
+ @namespace = application_name.split(MODULE_DELIMITER)[0..-2].join(MODULE_DELIMITER)
+
@environments = DEFAULT_ENVIRONMENTS.clone
config.env = env
# Some default setting values must be assigned at initialize-time to ensure they
# have appropriate values for the current application
self.root = Dir.pwd
self.settings_store = Application::Settings::DotenvStore.new.with_dotenv_loaded
+ config.logger = Configuration::Logger.new(env: env, application_name: method(:application_name))
+
@assets = begin
require_path = "hanami/assets/application_configuration"
require require_path
Hanami::Assets::ApplicationConfiguration.new
rescue LoadError => e
@@ -99,10 +107,18 @@
router.finalize!
super
end
+ def namespace
+ inflector.constantize(@namespace)
+ end
+
+ def application_name
+ inflector.underscore(@namespace).to_sym
+ end
+
setting :env
def env=(new_env)
config.env = env
apply_env_config(new_env)
@@ -114,18 +130,18 @@
def inflections(&block)
self.inflector = Dry::Inflector.new(&block)
end
- setting :logger, default: Configuration::Logger.new, cloneable: true
+ setting :logger, cloneable: true
def logger=(logger_instance)
@logger_instance = logger_instance
end
def logger_instance
- @logger_instance || logger.logger_class.new(**logger.options)
+ @logger_instance || logger.instance
end
setting :settings_path, default: File.join("config", "settings")
setting :settings_class_name, default: "Settings"
@@ -138,12 +154,10 @@
# TODO: convert into a dedicated object with explicit behaviour around blocks per
# slice, etc.
setting :slices, default: {}, constructor: :dup.to_proc
- # TODO: turn this into a richer "source dirs" setting that can support enabling
- # of container component loading as an opt in behvior
- setting :component_dir_paths, default: %w[actions repositories views]
+ setting :source_dirs, default: Configuration::SourceDirs.new, cloneable: true
def slice(slice_name, &block)
slices[slice_name] = block
end