diff --git a/lib/prius/errors.rb b/lib/prius/errors.rb index fd64364..6041ef1 100644 --- a/lib/prius/errors.rb +++ b/lib/prius/errors.rb @@ -4,4 +4,5 @@ module Prius class MissingValueError < StandardError; end class TypeMismatchError < StandardError; end class UndeclaredNameError < StandardError; end + class InvalidLoadError < StandardError; end end diff --git a/lib/prius/registry.rb b/lib/prius/registry.rb index 96ff378..50a51c3 100644 --- a/lib/prius/registry.rb +++ b/lib/prius/registry.rb @@ -15,9 +15,14 @@ def initialize(env) end # See Prius.load for documentation. - def load(name, env_var: nil, type: :string, required: true) + def load(name, env_var: nil, type: :string, required: true, default: nil) env_var = name.to_s.upcase if env_var.nil? - value = load_value(env_var, required) + + if required && !default.nil? + raise InvalidLoadError, "required config value #{env_var} cannot have default value" + end + + value = load_value(env_var, required, default) @registry[name] = case type when :string then value when :int then parse_int(env_var, value) @@ -36,10 +41,10 @@ def get(name) private - def load_value(name, required) + def load_value(name, required, default) @env.fetch(name) rescue KeyError - return nil unless required + return default unless required raise MissingValueError, "config value '#{name}' not present" end