Sha256: f1e64f6fc4ba574394863ea90bda4529dd6269a23abe2b95865357e415e41ea5
Contents?: true
Size: 1.33 KB
Versions: 2
Compression:
Stored size: 1.33 KB
Contents
require "dry/web/settings/file_loader" module Dry module Web class Settings SettingValueError = Class.new(StandardError) def self.schema @schema ||= {} end def self.setting(name, type = nil) settings(name => type) end def self.settings(new_schema) check_schema_duplication(new_schema) @schema = schema.merge(new_schema) self end def self.check_schema_duplication(new_schema) shared_keys = new_schema.keys & schema.keys raise ArgumentError, "Setting :#{shared_keys.first} has already been defined" if shared_keys.any? end private_class_method :check_schema_duplication def self.load_files(root, env) FileLoader.new.(root, env) end private_class_method :load_files def self.load(root, env) env_data = load_files(root, env) schema = self.schema Class.new do extend Dry::Configurable schema.each do |key, type| value = ENV.fetch(key.to_s.upcase) { env_data[key.to_s.upcase] } begin value = type[value] if type rescue => e raise SettingValueError, "error typecasting +#{key}+: #{e}" end setting key, value end end.config end end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
dry-web-0.7.1 | lib/dry/web/settings.rb |
dry-web-0.7.0 | lib/dry/web/settings.rb |