private static ReadMeTranslationEntry GetTranslationEntry(MyFirstTarget consoleTarget, MethodBase methodInfo, Type type) { var tAttr = methodInfo.GetCustomAttribute <TranslationReadMeAttribute>(); if (tAttr == null) { return(null); } var test = Activator.CreateInstance(type); methodInfo.Invoke(test, new object[0]); var record = consoleTarget.Records.OfType <Tuple <Expression, string> >().Single(); consoleTarget.Records.Clear(); var expression = record.Item1; var sql = record.Item2; var expStr = expression.ToReadableString(); expStr = QueryableNameRegex.Replace(expStr, @"db.$1s"); expStr = SingleLineCommentsRegex.Replace(expStr, ""); return(new ReadMeTranslationEntry { TranslationAttr = tAttr, ExpressionString = expStr, Sql = sql }); }
public static void Main(string[] args) { var config = new LoggingConfiguration(); // Step 2. Create targets and add them to the configuration var consoleTarget = new MyFirstTarget(); config.AddTarget(nameof(QueryTranslator), consoleTarget); // Step 3. Set target properties consoleTarget.Layout = @"${date:format=HH\:mm\:ss} ${logger} ${message}"; // Step 4. Define rules var rule1 = new LoggingRule("*", LogLevel.Debug, consoleTarget); config.LoggingRules.Add(rule1); // Step 5. Activate the configuration LogManager.Configuration = config; var categories = GetCategories(consoleTarget); const string path = @"../README.md"; if (File.Exists(path)) { File.Delete(path); } using (var fs = new FileStream(path, FileMode.OpenOrCreate)) using (var sw = new StreamWriter(fs)) { sw.WriteLine(Beginning); sw.WriteLine(); foreach (var category in categories) { category.WriteTo(sw); } sw.WriteLine(); sw.WriteLine(Ending); } }
private static IEnumerable <ReadMeCategory> GetCategories(MyFirstTarget consoleTarget) { var assambly = Assembly.Load(new AssemblyName("EFSqlTranslator.Tests")); var classes = assambly.GetTypes(); var categories = new SortedSet <ReadMeCategory>(ReadMeCategory.Comparer); foreach (var type in classes) { var typeInfo = type.GetTypeInfo(); var cAttr = typeInfo.GetCustomAttribute <CategoryReadMeAttribute>(); if (cAttr == null) { continue; } var category = new ReadMeCategory { CategoryAttr = cAttr }; categories.Add(category); var methods = type.GetMethods(); foreach (var methodInfo in methods) { var translationEntry = GetTranslationEntry(consoleTarget, methodInfo, type); if (translationEntry == null) { continue; } category.Entries.Add(translationEntry); } } return(categories); }