Class: AnywayAppConfig::Config
- Inherits:
-
Anyway::Config
- Object
- Anyway::Config
- AnywayAppConfig::Config
- Defined in:
- lib/anyway_app_config/config.rb
Constant Summary collapse
- BaseNestedCfgClass =
Class.new(self)
Class Method Summary collapse
- .attr_nested(name, array: false, required: false, &block) ⇒ Object
- .attr_value(name, type:, array: false, default: nil, required: false) ⇒ Object
- .attribute(name, type: nil, array: false, default: nil, required: false, &block) ⇒ Object
- .load! ⇒ Object
- .type_caster ⇒ Object
- .type_registry ⇒ Object
Instance Method Summary collapse
- #deep_freeze_values! ⇒ Object (also: #deep_freeze!)
-
#initialize(overrides = nil, config_path: nil, **kwargs) ⇒ Config
constructor
A new instance of Config.
- #load(overrides = nil) ⇒ Object
- #resolve_config_path(name, env_prefix) ⇒ Object
Constructor Details
#initialize(overrides = nil, config_path: nil, **kwargs) ⇒ Config
Returns a new instance of Config.
98 99 100 101 102 103 104 105 106 107 108 |
# File 'lib/anyway_app_config/config.rb', line 98 def initialize(overrides = nil, config_path: nil, **kwargs) @explicit_config_path = calc_explicit_config_path(config_path) if overrides.nil? && !kwargs.empty? overrides = kwargs elsif !kwargs.empty? raise ArgumentError, "unknown keywords: #{kwargs.keys.join(', ')}" end super(overrides) end |
Class Method Details
.attr_nested(name, array: false, required: false, &block) ⇒ Object
37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 |
# File 'lib/anyway_app_config/config.rb', line 37 def attr_nested(name, array: false, required: false, &block) nested_klass = Class.new(nested_config_class) const_set("#{name.to_s.classify}Cfg", nested_klass) # nested_klass.config_name represents path to config struct in main config file if self < nested_config_class # nested inside another nested config nested_klass.config_name :"#{config_name}.#{name}" else # nested in main config nested_klass.config_name name.to_sym end nested_klass.configuration_sources = [] nested_klass.class_eval(&block) if block if array attr_config(name => []) caster = ->(v) { nested_klass.new(v) } coerce_types(name => { type: caster, array: true }) else attr_config(name => {}) coerce_types(name => { config: nested_klass }) end self.required(name) if required end |
.attr_value(name, type:, array: false, default: nil, required: false) ⇒ Object
30 31 32 33 34 35 |
# File 'lib/anyway_app_config/config.rb', line 30 def attr_value(name, type:, array: false, default: nil, required: false) default_val = default.nil? && array ? [] : default attr_config(name => default_val) coerce_types(name => { type: type, array: array }) self.required(name) if required end |
.attribute(name, type: nil, array: false, default: nil, required: false, &block) ⇒ Object
19 20 21 22 23 24 25 26 27 28 |
# File 'lib/anyway_app_config/config.rb', line 19 def attribute(name, type: nil, array: false, default: nil, required: false, &block) if block raise ArgumentError, "nested attribute #{name} does not support type" unless type.nil? raise ArgumentError, "nested attribute #{name} does not support default" unless default.nil? attr_nested(name, array: array, required: required, &block) else attr_value(name, type: type, array: array, default: default, required: required) end end |
.load! ⇒ Object
63 64 65 |
# File 'lib/anyway_app_config/config.rb', line 63 def load!(*, **) new(*, **).tap(&:deep_freeze_values!) end |
.type_caster ⇒ Object
84 85 86 87 88 89 90 91 92 93 94 95 |
# File 'lib/anyway_app_config/config.rb', line 84 def type_caster @type_caster ||= if coercion_mapping.empty? fallback_type_caster else ::Anyway::TypeCaster.new( coercion_mapping, registry: type_registry, fallback: fallback_type_caster ) end end |
.type_registry ⇒ Object
67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 |
# File 'lib/anyway_app_config/config.rb', line 67 def type_registry return @type_registry if instance_variable_defined?(:@type_registry) @type_registry = if superclass < AnywayAppConfig::Config superclass.type_registry.dup else ::Anyway::TypeRegistry.default.dup.tap do |r| r.accept(:hash) do |v| raise ArgumentError, "expected Hash, got #{v.class}" unless v.is_a?(::Hash) v end end end end |
Instance Method Details
#deep_freeze_values! ⇒ Object Also known as: deep_freeze!
110 111 112 113 |
# File 'lib/anyway_app_config/config.rb', line 110 def deep_freeze_values! deep_freeze_value(values) self end |
#load(overrides = nil) ⇒ Object
117 118 119 120 |
# File 'lib/anyway_app_config/config.rb', line 117 def load(overrides = nil) overrides = overrides.deep_stringify_keys if overrides.is_a?(::Hash) super end |
#resolve_config_path(name, env_prefix) ⇒ Object
122 123 124 |
# File 'lib/anyway_app_config/config.rb', line 122 def resolve_config_path(name, env_prefix) @explicit_config_path || super end |