Browse Source

Refactor store factory, create options.

pull/625/head
Halil ibrahim Kalkan 8 years ago
parent
commit
cd01234f00
  1. 7
      modules/docs/src/Volo.Docs.Domain/Volo/Docs/DocsDomainModule.cs
  2. 26
      modules/docs/src/Volo.Docs.Domain/Volo/Docs/Documents/DocumentStoreFactory.cs
  3. 15
      modules/docs/src/Volo.Docs.Domain/Volo/Docs/Documents/DocumentStoreOptions.cs
  4. 2
      modules/docs/src/Volo.Docs.Domain/Volo/Docs/Documents/IDocumentStoreFactory.cs
  5. 28
      modules/docs/src/Volo.Docs.Domain/Volo/Docs/Documents/ProjectGithubExtensions.cs
  6. 25
      modules/docs/src/Volo.Docs.Domain/Volo/Docs/GitHub/Documents/GithubDocumentStore.cs
  7. 45
      modules/docs/src/Volo.Docs.Domain/Volo/Docs/GitHub/Projects/ProjectGithubExtensions.cs

7
modules/docs/src/Volo.Docs.Domain/Volo/Docs/DocsDomainModule.cs

@ -2,6 +2,8 @@
using Volo.Abp.Localization;
using Volo.Abp.Modularity;
using Volo.Abp.VirtualFileSystem;
using Volo.Docs.Documents;
using Volo.Docs.GitHub.Documents;
using Volo.Docs.Localization;
namespace Volo.Docs
@ -26,6 +28,11 @@ namespace Volo.Docs
.Get<DocsResource>()
.AddVirtualJson("/Volo/Docs/Localization/Domain");
});
Configure<DocumentStoreOptions>(options =>
{
options.Stores[GithubDocumentStore.Type] = typeof(GithubDocumentStore);
});
}
}
}

26
modules/docs/src/Volo.Docs.Domain/Volo/Docs/Documents/DocumentStoreFactory.cs

@ -1,29 +1,33 @@
using System;
using System.Collections.Generic;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Options;
using Volo.Abp.DependencyInjection;
namespace Volo.Docs.Documents
{
public class DocumentStoreFactory : IDocumentStoreFactory, ITransientDependency
{
private readonly IServiceProvider _serviceProvider;
protected DocumentStoreOptions Options { get; }
protected IServiceProvider ServiceProvider { get; }
public DocumentStoreFactory(IServiceProvider serviceProvider)
public DocumentStoreFactory(
IServiceProvider serviceProvider,
IOptions<DocumentStoreOptions> options)
{
_serviceProvider = serviceProvider;
Options = options.Value;
ServiceProvider = serviceProvider;
}
public virtual IDocumentStore Create(string documentStoreType)
public virtual IDocumentStore Create(string storeType)
{
//TODO: Should be extensible
switch (documentStoreType)
var serviceType = Options.Stores.GetOrDefault(storeType);
if (serviceType == null)
{
case GithubDocumentStore.Type:
return _serviceProvider.GetRequiredService<GithubDocumentStore>();
default:
throw new ApplicationException($"Undefined document store: {documentStoreType}");
throw new ApplicationException($"Undefined document store: {storeType}");
}
return (IDocumentStore) ServiceProvider.GetRequiredService(serviceType);
}
}
}

15
modules/docs/src/Volo.Docs.Domain/Volo/Docs/Documents/DocumentStoreOptions.cs

@ -0,0 +1,15 @@
using System;
using System.Collections.Generic;
namespace Volo.Docs.Documents
{
public class DocumentStoreOptions
{
public Dictionary<string, Type> Stores { get; set; }
public DocumentStoreOptions()
{
Stores = new Dictionary<string, Type>();
}
}
}

2
modules/docs/src/Volo.Docs.Domain/Volo/Docs/Documents/IDocumentStoreFactory.cs

@ -2,6 +2,6 @@ namespace Volo.Docs.Documents
{
public interface IDocumentStoreFactory
{
IDocumentStore Create(string documentStoreType);
IDocumentStore Create(string storeType);
}
}

28
modules/docs/src/Volo.Docs.Domain/Volo/Docs/Documents/ProjectGithubExtensions.cs

@ -1,28 +0,0 @@
using System;
using Volo.Docs.Projects;
namespace Volo.Docs.Documents
{
public static class ProjectGithubExtensions
{
public static string GetGithubUrl(this Projects.Project project)
{
CheckGithubProject(project);
return project.ExtraProperties["GithubRootUrl"] as string;
}
public static void SetGithubUrl(this Projects.Project project, string value)
{
CheckGithubProject(project);
project.ExtraProperties["GithubRootUrl"] = value;
}
private static void CheckGithubProject(Project project)
{
if (project.DocumentStoreType != GithubDocumentStore.Type)
{
throw new ApplicationException("Given project has not a Github document store!");
}
}
}
}

25
modules/docs/src/Volo.Docs.Domain/Volo/Docs/Documents/GithubDocumentStore.cs → modules/docs/src/Volo.Docs.Domain/Volo/Docs/GitHub/Documents/GithubDocumentStore.cs

@ -1,27 +1,26 @@
using Microsoft.Extensions.Logging;
using Octokit;
using Octokit.Internal;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Threading.Tasks;
using Microsoft.Extensions.Logging;
using Octokit;
using Octokit.Internal;
using Volo.Abp.Domain.Services;
using Volo.Docs.Documents;
using Volo.Docs.GitHub.Projects;
using Volo.Docs.Projects;
using ProductHeaderValue = Octokit.ProductHeaderValue;
namespace Volo.Docs.Documents
namespace Volo.Docs.GitHub.Documents
{
public class GithubDocumentStore : DomainService, IDocumentStore
{
public const string Type = "Github"; //TODO: Convert to "github"
public const string Type = "GitHub";
public Task<Document> FindDocument(
Projects.Project project,
string documentName,
string version)
public Task<Document> FindDocument(Docs.Projects.Project project, string documentName, string version)
{
var rootUrl = project.GetGithubUrl()
var rootUrl = project.GetGitHubUrl()
.Replace("_version_/", version + "/")
.Replace("www.", ""); //TODO: Can be a problem?
@ -43,7 +42,7 @@ namespace Volo.Docs.Documents
);
}
var token = project.ExtraProperties["GithubAccessToken"]?.ToString(); //TODO: Define GetGithubAccessToken extension method
var token = project.GetGitHubAccessTokenOrNull();
var document = new Document
{
@ -86,13 +85,13 @@ namespace Volo.Docs.Documents
{
try
{
var token = project.ExtraProperties["GithubAccessToken"]?.ToString();
var token = project.GetGitHubAccessTokenOrNull();
var gitHubClient = token.IsNullOrWhiteSpace()
? new GitHubClient(new ProductHeaderValue("AbpWebSite"))
: new GitHubClient(new ProductHeaderValue("AbpWebSite"), new InMemoryCredentialStore(new Credentials(token)));
var url = project.ExtraProperties["GithubRootUrl"].ToString();
var url = project.GetGitHubUrl();
var releases = await gitHubClient.Repository.Release.GetAll(
GetGithubOrganizationNameFromUrl(url),
GetGithubRepositoryNameFromUrl(url)

45
modules/docs/src/Volo.Docs.Domain/Volo/Docs/GitHub/Projects/ProjectGithubExtensions.cs

@ -0,0 +1,45 @@
using System;
using JetBrains.Annotations;
using Volo.Abp;
using Volo.Docs.GitHub.Documents;
using Volo.Docs.Projects;
namespace Volo.Docs.GitHub.Projects
{
public static class ProjectGithubExtensions
{
public static string GetGitHubUrl([NotNull] this Project project)
{
CheckGitHubProject(project);
return project.ExtraProperties["GitHubRootUrl"] as string;
}
public static void SetGitHubUrl([NotNull] this Project project, string value)
{
CheckGitHubProject(project);
project.ExtraProperties["GitHubRootUrl"] = value;
}
public static string GetGitHubAccessTokenOrNull([NotNull] this Project project)
{
CheckGitHubProject(project);
return project.ExtraProperties["GitHubAccessToken"] as string;
}
public static void SetGitHubAccessToken([NotNull] this Project project, string value)
{
CheckGitHubProject(project);
project.ExtraProperties["GitHubAccessToken"] = value;
}
private static void CheckGitHubProject(Project project)
{
Check.NotNull(project, nameof(project));
if (project.DocumentStoreType != GithubDocumentStore.Type)
{
throw new ApplicationException("Given project has not a Github document store!");
}
}
}
}
Loading…
Cancel
Save