84 lines
3.2 KiB
C#
84 lines
3.2 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text.RegularExpressions;
|
|
using ASC.Api.Interfaces;
|
|
using ASC.Common.DependencyInjection;
|
|
using ASC.Common.Logging;
|
|
using Autofac;
|
|
|
|
public static class Documentation
|
|
{
|
|
private static List<MsDocEntryPoint> _points = new List<MsDocEntryPoint>();
|
|
|
|
public static void Load()
|
|
{
|
|
//Load documentation
|
|
_points = GenerateDocs();
|
|
}
|
|
|
|
private static List<MsDocEntryPoint> GenerateDocs()
|
|
{
|
|
var containerBuilder = AutofacConfigLoader.Load("api");
|
|
|
|
containerBuilder.Register(c => LogManager.GetLogger("ASC"))
|
|
.As<ILog>()
|
|
.SingleInstance();
|
|
|
|
containerBuilder.Register(c => c.Resolve<IApiRouteConfigurator>().RegisterEntryPoints())
|
|
.As<IEnumerable<IApiMethodCall>>()
|
|
.SingleInstance();
|
|
|
|
var container = containerBuilder.Build();
|
|
|
|
var entries = container.Resolve<IEnumerable<IApiMethodCall>>();
|
|
|
|
var apiEntryPoints = container.ComponentRegistry.Registrations.Where(x => typeof (IApiEntryPoint).IsAssignableFrom(x.Activator.LimitType)).ToList();
|
|
|
|
var generator = new MsDocDocumentGenerator(container);
|
|
|
|
foreach (var apiEntryPoint in entries.GroupBy(x => x.ApiClassType))
|
|
{
|
|
var point = apiEntryPoint;
|
|
generator.GenerateDocForEntryPoint(
|
|
apiEntryPoints.SingleOrDefault(x => x.Activator.LimitType == point.Key),
|
|
apiEntryPoint.AsEnumerable());
|
|
}
|
|
|
|
return generator.Points;
|
|
}
|
|
|
|
public static MsDocEntryPoint GetDocs(string name)
|
|
{
|
|
return _points.SingleOrDefault(x => x.Name.Equals(name, StringComparison.OrdinalIgnoreCase));
|
|
}
|
|
|
|
public static IEnumerable<MsDocEntryPoint> GetAll()
|
|
{
|
|
return _points;
|
|
}
|
|
|
|
public static Dictionary<MsDocEntryPoint, Dictionary<MsDocEntryPointMethod, string>> Search(string query)
|
|
{
|
|
if (string.IsNullOrEmpty(query))
|
|
{
|
|
return new Dictionary<MsDocEntryPoint, Dictionary<MsDocEntryPointMethod, string>>();
|
|
}
|
|
|
|
var terms = Regex.Split(query, @"\W+").Where(x => !String.IsNullOrEmpty(x));
|
|
var result = _points.ToDictionary(
|
|
x => x,
|
|
ep => ep.Methods.Where(m => terms.All(
|
|
term => (m.Summary != null && 0 <= m.Summary.IndexOf(term, StringComparison.OrdinalIgnoreCase)) ||
|
|
(m.Category != null && 0 <= m.Category.IndexOf(term, StringComparison.OrdinalIgnoreCase)) ||
|
|
(m.FunctionName != null && 0 <= m.FunctionName.IndexOf(term, StringComparison.OrdinalIgnoreCase)) ||
|
|
(m.Notes != null && 0 <= m.Notes.IndexOf(term, StringComparison.OrdinalIgnoreCase)) ||
|
|
(m.Path != null && 0 <= m.Path.IndexOf(term, StringComparison.OrdinalIgnoreCase)) ||
|
|
(m.Remarks != null && 0 <= m.Remarks.IndexOf(term, StringComparison.OrdinalIgnoreCase)) ||
|
|
(m.Returns != null && 0 <= m.Returns.IndexOf(term, StringComparison.OrdinalIgnoreCase)))
|
|
)
|
|
.ToDictionary(key => key, value => string.Empty)
|
|
);
|
|
return result;
|
|
}
|
|
} |