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