BadScript 2
Loading...
Searching...
No Matches
BadScript2.Settings.BadSettingsReader Class Reference

Reads a JSON file and returns the resulting BadSettings Object. More...

Public Member Functions

 BadSettingsReader (BadSettings rootSettings, IFileSystem mFileSystem, params string[] sourceFiles)
 Constructs a new BadSettingsReader.
 
BadSettings ReadSettings ()
 Returns a new Instance of BadSettings with all source files loaded.
 

Private Member Functions

JToken ReadJsonFile (string fileName)
 Parses a JSON File and returns the resulting JObject.
 
void ReadDynamicSettings (BadSettings settings)
 Processes Dynamic Include Statements inside a settings object.
 

Static Private Member Functions

static BadSettings CreateSettings (JToken? token, string path)
 Creates a Settings Object from a JToken.
 

Private Attributes

readonly IFileSystem m_FileSystem
 
readonly BadSettings m_RootSettings
 The Root Settings Object that all other Settings are added into.
 
readonly string[] m_SourceFiles
 The Source Files that are used to read the Settings.
 

Detailed Description

Reads a JSON file and returns the resulting BadSettings Object.

Definition at line 11 of file BadSettingsReader.cs.

Constructor & Destructor Documentation

◆ BadSettingsReader()

BadScript2.Settings.BadSettingsReader.BadSettingsReader ( BadSettings  rootSettings,
IFileSystem  mFileSystem,
params string[]  sourceFiles 
)

Constructs a new BadSettingsReader.

Parameters
rootSettingsRoot Settings Object
sourceFilesList of Source Files

Definition at line 30 of file BadSettingsReader.cs.

31 {
32 m_SourceFiles = sourceFiles;
33 m_RootSettings = rootSettings;
34 m_FileSystem = mFileSystem;
35 }
readonly string[] m_SourceFiles
The Source Files that are used to read the Settings.
readonly BadSettings m_RootSettings
The Root Settings Object that all other Settings are added into.

Member Function Documentation

◆ CreateSettings()

static BadSettings BadScript2.Settings.BadSettingsReader.CreateSettings ( JToken?  token,
string  path 
)
staticprivate

Creates a Settings Object from a JToken.

Parameters
tokenJToken to convert
Returns
BadSettings Instance

Definition at line 83 of file BadSettingsReader.cs.

84 {
85 if (token is
86 not { Type: JTokenType.Object })
87 {
88 return new BadSettings(token, path);
89 }
90
91 Dictionary<string, BadSettings> settings = new Dictionary<string, BadSettings>();
92 JObject obj = (JObject)token;
93
94 foreach (KeyValuePair<string, JToken?> keyValuePair in obj)
95 {
96 settings.Add(keyValuePair.Key, CreateSettings(keyValuePair.Value, path));
97 }
98
99 return new BadSettings(settings, path);
100 }
static BadSettings CreateSettings(JToken? token, string path)
Creates a Settings Object from a JToken.

◆ ReadDynamicSettings()

void BadScript2.Settings.BadSettingsReader.ReadDynamicSettings ( BadSettings  settings)
private

Processes Dynamic Include Statements inside a settings object.

Parameters
settingsSettings object to process

Definition at line 107 of file BadSettingsReader.cs.

108 {
109 BadLogger.Log("Processing Dynamic Includes", "SettingsReader");
110 BadSettings? elems = settings.FindProperty("SettingsBuilder.Include");
111 string[]? includes = elems?.GetValue<string[]>();
112
113 if (includes == null)
114 {
115 return;
116 }
117
118 elems?.SetValue(null);
119
120 do
121 {
122 List<BadSettings> setting = new List<BadSettings>();
123
124 foreach (string include in includes)
125 {
126 if (include.Contains('*'))
127 {
128 bool allDirs = include.Contains("**");
129
130 string[] parts = include.Split(new[] { '*' },
131 StringSplitOptions.RemoveEmptyEntries
132 );
133 string path = parts[0];
134 string extension = parts[1];
135
136 IEnumerable<string> files = m_FileSystem.GetFiles(path,
137 extension,
138 allDirs
139 );
140
141 setting.AddRange(files.Select(f =>
142 {
143 BadLogger.Log("Reading settings from file: " + f,
144 "SettingsReader"
145 );
146
147 return CreateSettings(ReadJsonFile(f), f);
148 }
149 )
150 );
151 }
152 else
153 {
154 BadLogger.Log("Reading settings from file: " + include, "SettingsReader");
155 setting.Add(CreateSettings(ReadJsonFile(include), include));
156 }
157 }
158
159 settings.Populate(true, setting.ToArray());
160
161 BadLogger.Log("Resolving environment variables", "SettingsReader");
162 BadSettings.ResolveEnvironmentVariables(settings);
163
164 elems = settings.FindProperty("SettingsBuilder.Include");
165 includes = elems?.GetValue<string[]>();
166 }
167 while (includes != null);
168
169 settings.RemoveProperty("SettingsBuilder");
170 }
Public facing interface for a logger.
Definition BadLogger.cs:7
static void Log(string message)
Writes a Log to the Message Handler.
Definition BadLogger.cs:26
JToken ReadJsonFile(string fileName)
Parses a JSON File and returns the resulting JObject.
IEnumerable< string > GetFiles(string path, string extension, bool recursive)
Returns all files in the given directory that match the specified extension.

◆ ReadJsonFile()

JToken BadScript2.Settings.BadSettingsReader.ReadJsonFile ( string  fileName)
private

Parses a JSON File and returns the resulting JObject.

Parameters
fileNameSource File
Returns

Definition at line 70 of file BadSettingsReader.cs.

71 {
72 string json = m_FileSystem.ReadAllText(fileName);
73 JToken token = JToken.Parse(json);
74
75 return token;
76 }

◆ ReadSettings()

BadSettings BadScript2.Settings.BadSettingsReader.ReadSettings ( )

Returns a new Instance of BadSettings with all source files loaded.

Returns
BadSettings Instance

Definition at line 41 of file BadSettingsReader.cs.

42 {
43 List<BadSettings> settings = new List<BadSettings> { m_RootSettings };
44
45 Queue<string> files = new Queue<string>(m_SourceFiles);
46
47 while (files.Count != 0)
48 {
49 string file = files.Dequeue();
50 BadLogger.Log("Reading settings from file: " + file, "SettingsReader");
51 settings.Add(CreateSettings(ReadJsonFile(file), file));
52 }
53
54 BadSettings s = new BadSettings(string.Empty);
55 s.Populate(true, settings.ToArray());
56
57 BadLogger.Log("Resolving environment variables", "SettingsReader");
58 BadSettings.ResolveEnvironmentVariables(s);
59
61
62 return s;
63 }
void ReadDynamicSettings(BadSettings settings)
Processes Dynamic Include Statements inside a settings object.

Member Data Documentation

◆ m_FileSystem

readonly IFileSystem BadScript2.Settings.BadSettingsReader.m_FileSystem
private

Definition at line 13 of file BadSettingsReader.cs.

◆ m_RootSettings

readonly BadSettings BadScript2.Settings.BadSettingsReader.m_RootSettings
private

The Root Settings Object that all other Settings are added into.

Definition at line 18 of file BadSettingsReader.cs.

◆ m_SourceFiles

readonly string [] BadScript2.Settings.BadSettingsReader.m_SourceFiles
private

The Source Files that are used to read the Settings.

Definition at line 23 of file BadSettingsReader.cs.


The documentation for this class was generated from the following file: