From 48db596f970d9a4f49633959c8aa5686e421e37c Mon Sep 17 00:00:00 2001 From: Yunus Emre Kalkan Date: Wed, 22 Jul 2020 10:30:27 +0300 Subject: [PATCH] docs: created IVersionHelper --- .../Pages/Documents/Project/Index.cshtml.cs | 19 ++++--- .../Pages/Documents/Search.cshtml.cs | 8 ++- .../src/Volo.Docs.Web/Utils/VersionHelper.cs | 11 ---- .../Volo.Docs.Web/Version/IVersionHelper.cs | 14 +++++ .../Version/SemanticVersionHelper.cs | 52 +++++++++++++++++++ 5 files changed, 84 insertions(+), 20 deletions(-) delete mode 100644 modules/docs/src/Volo.Docs.Web/Utils/VersionHelper.cs create mode 100644 modules/docs/src/Volo.Docs.Web/Version/IVersionHelper.cs create mode 100644 modules/docs/src/Volo.Docs.Web/Version/SemanticVersionHelper.cs diff --git a/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/Index.cshtml.cs b/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/Index.cshtml.cs index 4a38c166b3..7049adf011 100644 --- a/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/Index.cshtml.cs +++ b/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/Index.cshtml.cs @@ -18,6 +18,7 @@ using Volo.Docs.Models; using Volo.Docs.Projects; using Volo.Docs.Utils; using NuGet.Versioning; +using Volo.Docs.Version; namespace Volo.Docs.Pages.Documents.Project { @@ -78,6 +79,7 @@ namespace Volo.Docs.Pages.Documents.Project private readonly IDocumentToHtmlConverterFactory _documentToHtmlConverterFactory; private readonly IProjectAppService _projectAppService; private readonly IDocumentSectionRenderer _documentSectionRenderer; + private readonly IVersionHelper _versionHelper; private readonly DocsUiOptions _uiOptions; public IndexModel( @@ -85,7 +87,8 @@ namespace Volo.Docs.Pages.Documents.Project IDocumentToHtmlConverterFactory documentToHtmlConverterFactory, IProjectAppService projectAppService, IOptions options, - IDocumentSectionRenderer documentSectionRenderer) + IDocumentSectionRenderer documentSectionRenderer, + IVersionHelper versionHelper) { ObjectMapperContext = typeof(DocsWebModule); @@ -93,6 +96,7 @@ namespace Volo.Docs.Pages.Documents.Project _documentToHtmlConverterFactory = documentToHtmlConverterFactory; _projectAppService = projectAppService; _documentSectionRenderer = documentSectionRenderer; + _versionHelper = versionHelper; _uiOptions = options.Value; } @@ -252,16 +256,15 @@ namespace Volo.Docs.Pages.Documents.Project } var output = await _projectAppService.GetVersionsAsync(Project.ShortName); - var versions = output.Items - .OrderByDescending(i => SemanticVersion.Parse(i.Name), new VersionComparer()) + var versions = _versionHelper.OrderByDescending(output.Items.ToList()) .Select(v => new VersionInfoViewModel(v.DisplayName, v.Name)) .ToList(); - SetLatestVersionBranchName(versions); - if (versions.Any()) { - LatestStableVersionInfo = versions.FirstOrDefault(v => !VersionHelper.IsPreRelease(v.Version)) ?? versions.First(); + LatestStableVersionInfo = versions.FirstOrDefault(v => !_versionHelper.IsPreRelease(v.Version)) ?? versions.First(); + + SetLatestVersionBranchName(versions); LatestStableVersionInfo.DisplayText = $"{LatestStableVersionInfo.DisplayText} ({DocsAppConsts.Latest})"; @@ -287,6 +290,8 @@ namespace Volo.Docs.Pages.Documents.Project } else { + SetLatestVersionBranchName(versions); + LatestStableVersionInfo = new VersionInfoViewModel( $"{DocsAppConsts.Latest}", DocsAppConsts.Latest, @@ -305,7 +310,7 @@ namespace Volo.Docs.Pages.Documents.Project { if (versions.Any() && !string.IsNullOrEmpty(Project.LatestVersionBranchName)) { - versions.First(v=> !SemanticVersion.Parse(v.Version).IsPrerelease).Version = Project.LatestVersionBranchName; + versions.First(v=> !_versionHelper.IsPreRelease(v.Version)).Version = Project.LatestVersionBranchName; } } diff --git a/modules/docs/src/Volo.Docs.Web/Pages/Documents/Search.cshtml.cs b/modules/docs/src/Volo.Docs.Web/Pages/Documents/Search.cshtml.cs index 54c8953ce1..3f096575c8 100644 --- a/modules/docs/src/Volo.Docs.Web/Pages/Documents/Search.cshtml.cs +++ b/modules/docs/src/Volo.Docs.Web/Pages/Documents/Search.cshtml.cs @@ -11,6 +11,7 @@ using Volo.Docs.HtmlConverting; using Volo.Docs.Models; using Volo.Docs.Projects; using Volo.Docs.Utils; +using Volo.Docs.Version; namespace Volo.Docs.Pages.Documents { @@ -33,14 +34,17 @@ namespace Volo.Docs.Pages.Documents private readonly IProjectAppService _projectAppService; private readonly IDocumentAppService _documentAppService; private readonly HtmlEncoder _encoder; + private readonly IVersionHelper _versionHelper; public SearchModel(IProjectAppService projectAppService, IDocumentAppService documentAppService, - HtmlEncoder encoder) + HtmlEncoder encoder, + IVersionHelper versionHelper) { _projectAppService = projectAppService; _documentAppService = documentAppService; _encoder = encoder; + _versionHelper = versionHelper; } public List SearchOutputs { get; set; } = new List(); @@ -63,7 +67,7 @@ namespace Volo.Docs.Pages.Documents if (versions.Any() && string.Equals(Version, DocsAppConsts.Latest, StringComparison.OrdinalIgnoreCase)) { Version = string.IsNullOrEmpty(Project.LatestVersionBranchName) ? - (versions.FirstOrDefault(v=> !VersionHelper.IsPreRelease(v.Name)) ?? versions.First()).Name : + (versions.FirstOrDefault(v=> !_versionHelper.IsPreRelease(v.Name)) ?? versions.First()).Name : Project.LatestVersionBranchName; } diff --git a/modules/docs/src/Volo.Docs.Web/Utils/VersionHelper.cs b/modules/docs/src/Volo.Docs.Web/Utils/VersionHelper.cs deleted file mode 100644 index aea42f8c58..0000000000 --- a/modules/docs/src/Volo.Docs.Web/Utils/VersionHelper.cs +++ /dev/null @@ -1,11 +0,0 @@ -namespace Volo.Docs.Utils -{ - public static class VersionHelper - { - - public static bool IsPreRelease(string version) - { - return (version?.Split("-").Length ?? 0) > 1; - } - } -} diff --git a/modules/docs/src/Volo.Docs.Web/Version/IVersionHelper.cs b/modules/docs/src/Volo.Docs.Web/Version/IVersionHelper.cs new file mode 100644 index 0000000000..f3fd202155 --- /dev/null +++ b/modules/docs/src/Volo.Docs.Web/Version/IVersionHelper.cs @@ -0,0 +1,14 @@ +using System.Collections.Generic; +using Volo.Docs.Projects; + +namespace Volo.Docs.Version +{ + public interface IVersionHelper + { + List OrderByDescending(List versions); + + List OrderByDescending(List versions); + + bool IsPreRelease(string version); + } +} diff --git a/modules/docs/src/Volo.Docs.Web/Version/SemanticVersionHelper.cs b/modules/docs/src/Volo.Docs.Web/Version/SemanticVersionHelper.cs new file mode 100644 index 0000000000..c60abaccea --- /dev/null +++ b/modules/docs/src/Volo.Docs.Web/Version/SemanticVersionHelper.cs @@ -0,0 +1,52 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using NuGet.Versioning; +using Volo.Abp.DependencyInjection; +using Volo.Docs.Projects; + +namespace Volo.Docs.Version +{ + public class SemanticVersionHelper : IVersionHelper, ITransientDependency + { + public List OrderByDescending(List versions) + { + return versions.OrderByDescending(v=> SemanticVersion.Parse(NormalizeVersion(v)), new VersionComparer()).ToList(); + } + + public List OrderByDescending(List versions) + { + return versions.OrderByDescending(v => SemanticVersion.Parse(NormalizeVersion(v.Name)), new VersionComparer()).ToList(); + } + + public bool IsPreRelease(string version) + { + return SemanticVersion.Parse(NormalizeVersion(version)).IsPrerelease; + } + + private string NormalizeVersion(string version) + { + version = version.RemovePreFix("v"); + + var normalizedVersion = ""; + + var versionParts = version.Split("-"); + + if (versionParts[0].Split(".").Length > 3) + { + normalizedVersion = string.Join(".",versionParts[0].Split(".").Take(3)); + } + else + { + normalizedVersion = versionParts[0]; + } + + if (versionParts.Length > 1) + { + return normalizedVersion + "-" + string.Join("-", versionParts.Skip(1)); + } + + return normalizedVersion; + } + } +}