class ComplexConfig::Provider
def config(pathname, name = nil)
def config(pathname, name = nil) datas = [] path_exist = File.exist?(pathname) if path_exist datas << IO.binread(pathname) end decrypted, reason, enc_pathname = decrypt_config_case(pathname) case reason when :ok datas << decrypted when :key_missing datas.empty? and raise ComplexConfig::EncryptionKeyMissing, "encryption key for #{enc_pathname.to_s.inspect} is missing" when :file_missing datas.empty? and raise ComplexConfig::ConfigurationFileMissing, "configuration file #{pathname.to_s.inspect} is missing" end results = datas.map { |d| evaluate(pathname, d) } hashes = if ::Psych::VERSION < "4" results.map { |r| ::YAML.load(r, pathname) } else results.map { |r| ::YAML.unsafe_load(r, filename: pathname) } end settings = ComplexConfig::Settings.build(name, hashes.shift) hashes.each { |h| settings.attributes_update(h) } if shared = settings.shared? shared = shared.to_h settings.each do |key, value| if value.is_a? ComplexConfig::Settings value.attributes_update_if_nil(shared) elsif value.nil? settings[key] = ComplexConfig::Settings.build(nil, shared.dup) end end end deep_freeze? and settings.deep_freeze settings rescue ::Psych::SyntaxError => e raise ComplexConfig::ComplexConfigError.wrap(:ConfigurationSyntaxError, e) end