module Athena::Config
Overview
Athena's Config component contains common types for configuring a component.
The main types include:
ACF::Baserepresents the structure of Athena's YAML configuration file.ACF::ConfigurationResolverallows resolving the configuration for a given component within a service.ACF::AnnotationConfigurationsstores annotation configurations registered viaAthena::Config.configuration_annotation. Annotations must be read/supplied to.newby owning shard.
See each specific type for more detailed information.
Defined in:
annotation_configurations.crathena-config.cr
Constant Summary
-
CONFIG_PATH_NAME =
"ATHENA_CONFIG_PATH" -
The name of the environment variable that stores the path to the configuration file.
-
DEFAULT_CONFIG_PATH =
"./athena.yml" -
The default path to the configuration file.
Class Method Summary
-
.config : ACF::Base
Returns the
ACF::Baseobject instantiated from the configuration file located at.config_path. -
.config_path : String
Returns the current path that the configuration file is located at.
Macro Summary
-
configuration_annotation(name, *args, &)
Registers a configuration annotation with the provided name.
Class Method Detail
Returns the ACF::Base object instantiated from the configuration file located at .config_path.
The contents of the configuration file are included into the binary at compile time so that the file itself
does not need to be present for the binary to run. The configuration string is not processed until .config is called for the first time
so that in the future it will respect ENV vars for the environment the binary is in.
TODO Handle resolving ENV vars and DI parameters within the configuration file.
Returns the current path that the configuration file is located at.
Falls back on DEFAULT_CONFIG_PATH if a ATHENA_CONFIG_PATH ENV variable is not defined.
Macro Detail
Registers a configuration annotation with the provided name. Defines a configuration record with the provided args, if any, that represents the possible arguments that the annotation accepts. May also be used with a block to add custom methods to the configuration record.
Example
# Defines an annotation without any arguments.
ACF.configuration_annotation Secure
# Defines annotation with a required and optional argument.
# The default value will be used if that key isn't supplied in the annotation.
ACF.configuration_annotation SomeAnn, id : Int32, debug : Bool = true
# A block can be used to define custom methods on the configuration object.
ACF.configuration_annotation CustomAnn, first_name : String, last_name : String do
def name : String
"#{@first_name} #{@last_name}"
end
end
NOTE The logic to actually do the resolution of the annotations must be handled in the owning shard.
Athena::Config only defines the common logic that each implementation can use.
See ACF::AnnotationConfigurations for more information.