/// <summary> /// Convert the input into a PlaceholderValue and realize any reference to a stored value into /// the actual value at the given time. /// </summary> /// <param name="key"></param> /// <param name="value"></param> /// <param name="storedValues"></param> /// <returns></returns> public static PlaceholderValue ConvertToPlaceholderValue(string key, string value, Dictionary <string, string> storedValues) { PlaceholderValue v = new PlaceholderValue { PlaceholderKey = key, DefinedValue = value, Location = BasicRequestDefinition.LocationForKey(key), Value = BasicRequestDefinition.LocationForKey(value) == PlaceholderLocation.StoredValue ? storedValues[value] : value }; if (BasicRequestDefinition.LocationForKey(v.Value) == PlaceholderLocation.CSharpCode) { v.Value = CSharpEval.Evaluate(v.Value.Substring(1), storedValues); } // Allow the random-filename generator to swap the value with a randomly generated filename. int index = value == null ? -1 : value.IndexOf(RandomFilenameValuePrefix); if (index >= 0) { int endIndex = value.IndexOf("!", index + 1); string placeholder = null; if (endIndex > -1) { placeholder = value.Substring(index, endIndex - index + 1); } else { // Be backwards comaptible with previous behavior. placeholder = value.Substring(index); if (!placeholder.EndsWith("!")) { if (placeholder != RandomFilenameValuePrefix) { value = "/" + value.Replace(placeholder, placeholder + "!"); } else { value = value.Replace(placeholder, placeholder + "!"); } placeholder = placeholder + "!"; } } string randomFilename = GenerateRandomFilename(placeholder); v.Value = value.Replace(placeholder, randomFilename); } Debug.WriteLine("Converting \"{0}: {1}\" into loc={2},value={3}", key, value, v.Location, v.Value); return(v); }
/// <summary> /// Convert the input into a PlaceholderValue and realize any reference to a stored value into /// the actual value at the given time. /// </summary> /// <param name="key"></param> /// <param name="value"></param> /// <param name="storedValues"></param> /// <returns></returns> public static PlaceholderValue ConvertToPlaceholderValue(string key, string value, Dictionary <string, string> storedValues) { string replacementValue = value; switch (BasicRequestDefinition.LocationForKey(value)) { case PlaceholderLocation.StoredValue: if (!storedValues.TryGetValue(value, out replacementValue)) { throw new PlaceholderValueNotFoundException($"Unable to locate the placeholder value {value} in available values: {storedValues.Keys.ComponentsJoinedByString(",")}"); } break; case PlaceholderLocation.CSharpCode: replacementValue = CSharpEval.Evaluate(value.Substring(1), storedValues); break; } PlaceholderValue v = new PlaceholderValue { PlaceholderKey = key, DefinedValue = value, Location = BasicRequestDefinition.LocationForKey(key), Value = replacementValue }; // Allow the random-filename generator to swap the value with a randomly generated filename. int index = value == null ? -1 : value.IndexOf(RandomFilenameValuePrefix); if (index >= 0) { int endIndex = value.IndexOf("!", index + 1); string placeholder = null; if (endIndex > -1) { placeholder = value.Substring(index, endIndex - index + 1); } else { // Be backwards comaptible with previous behavior. placeholder = value.Substring(index); if (!placeholder.EndsWith("!")) { if (placeholder != RandomFilenameValuePrefix) { value = "/" + value.Replace(placeholder, placeholder + "!"); } else { value = value.Replace(placeholder, placeholder + "!"); } placeholder = placeholder + "!"; } } string randomFilename = GenerateRandomFilename(placeholder); v.Value = value.Replace(placeholder, randomFilename); } Debug.WriteLine("Converting \"{0}: {1}\" into loc={2},value={3}", key, value, v.Location, v.Value); return(v); }