-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathConfiguration.cs
More file actions
36 lines (31 loc) · 1.32 KB
/
Configuration.cs
File metadata and controls
36 lines (31 loc) · 1.32 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
using System;
using System.Collections.Generic;
using System.Linq;
namespace NpgsqlAnalyzers
{
public class Configuration
{
private const string ConfigAssignChar = "=";
private const string ConfigCommentChar = "#";
private const string ConfigConnectionStringKey = "CONNECTION_STRING";
public Configuration(IDictionary<string, string> args)
{
ConnectionString = args.ContainsKey(ConfigConnectionStringKey)
? args[ConfigConnectionStringKey]
: throw new InvalidOperationException($"Missing key '{ConfigConnectionStringKey}' from configuration.");
}
public string ConnectionString { get; }
public static Configuration FromFile(IEnumerable<string> lines)
{
var args = lines
.Select((line) => line.ToString())
.Where((line) => !string.IsNullOrWhiteSpace(line))
.Where((line) => !line.StartsWith(ConfigCommentChar))
.Where((line) => line.Contains(ConfigAssignChar))
.ToDictionary(
keySelector: (line) => line.Split(ConfigAssignChar[0])[0].Trim(),
elementSelector: (line) => line.Split(ConfigAssignChar.ToArray(), 2)[1].Trim());
return new Configuration(args);
}
}
}