diff --git a/src/Nager.PublicSuffix/RuleProviders/BaseRuleProvider.cs b/src/Nager.PublicSuffix/RuleProviders/BaseRuleProvider.cs
new file mode 100644
index 0000000..d068536
--- /dev/null
+++ b/src/Nager.PublicSuffix/RuleProviders/BaseRuleProvider.cs
@@ -0,0 +1,39 @@
+using Nager.PublicSuffix.Extensions;
+using Nager.PublicSuffix.Models;
+using System.Collections.Generic;
+using System.Threading;
+using System.Threading.Tasks;
+
+namespace Nager.PublicSuffix.RuleProviders
+{
+ ///
+ /// BaseRuleProvider
+ ///
+ public abstract class BaseRuleProvider : IRuleProvider
+ {
+ protected DomainDataStructure _domainDataStructure;
+
+ ///
+ public abstract Task BuildAsync(
+ bool ignoreCache = false,
+ CancellationToken cancellationToken = default);
+
+ ///
+ /// Create a DomainDataStructure
+ ///
+ ///
+ protected void CreareDomainDataStructure(IEnumerable rules)
+ {
+ var domainDataStructure = new DomainDataStructure("*", new TldRule("*"));
+ domainDataStructure.AddRules(rules);
+
+ this._domainDataStructure = domainDataStructure;
+ }
+
+ ///
+ public DomainDataStructure? GetDomainDataStructure()
+ {
+ return this._domainDataStructure;
+ }
+ }
+}
diff --git a/src/Nager.PublicSuffix/RuleProviders/CachedHttpRuleProvider.cs b/src/Nager.PublicSuffix/RuleProviders/CachedHttpRuleProvider.cs
index 6cd948c..3c5d69c 100644
--- a/src/Nager.PublicSuffix/RuleProviders/CachedHttpRuleProvider.cs
+++ b/src/Nager.PublicSuffix/RuleProviders/CachedHttpRuleProvider.cs
@@ -1,8 +1,6 @@
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Logging;
using Nager.PublicSuffix.Exceptions;
-using Nager.PublicSuffix.Extensions;
-using Nager.PublicSuffix.Models;
using Nager.PublicSuffix.RuleParsers;
using Nager.PublicSuffix.RuleProviders.CacheProviders;
using System;
@@ -15,13 +13,12 @@ namespace Nager.PublicSuffix.RuleProviders
///
/// CachedHttp RuleProvider
///
- public class CachedHttpRuleProvider : IRuleProvider
+ public class CachedHttpRuleProvider : BaseRuleProvider
{
private readonly string _dataFileUrl;
private readonly ILogger _logger;
private readonly ICacheProvider _cacheProvider;
private readonly HttpClient _httpClient;
- private DomainDataStructure? _domainDataStructure;
///
/// Returns the cache provider
@@ -58,7 +55,7 @@ HttpClient httpClient
}
///
- public async Task BuildAsync(
+ public override async Task BuildAsync(
bool ignoreCache = false,
CancellationToken cancellationToken = default)
{
@@ -93,20 +90,11 @@ public async Task BuildAsync(
var ruleParser = new TldRuleParser();
var rules = ruleParser.ParseRules(ruleData);
- var domainDataStructure = new DomainDataStructure("*", new TldRule("*"));
- domainDataStructure.AddRules(rules);
-
- this._domainDataStructure = domainDataStructure;
+ base.CreareDomainDataStructure(rules);
return true;
}
- ///
- public DomainDataStructure? GetDomainDataStructure()
- {
- return this._domainDataStructure;
- }
-
///
/// Load the public suffix data from the given url
///
diff --git a/src/Nager.PublicSuffix/RuleProviders/LocalFileRuleProvider.cs b/src/Nager.PublicSuffix/RuleProviders/LocalFileRuleProvider.cs
index 2e0f2e3..5df86ff 100644
--- a/src/Nager.PublicSuffix/RuleProviders/LocalFileRuleProvider.cs
+++ b/src/Nager.PublicSuffix/RuleProviders/LocalFileRuleProvider.cs
@@ -10,10 +10,9 @@ namespace Nager.PublicSuffix.RuleProviders
///
/// LocalFile RuleProvider
///
- public class LocalFileRuleProvider : IRuleProvider
+ public class LocalFileRuleProvider : BaseRuleProvider
{
private readonly string _filePath;
- private DomainDataStructure? _domainDataStructure;
///
/// LocalFile RuleProvider
@@ -25,7 +24,7 @@ public LocalFileRuleProvider(string filePath)
}
///
- public async Task BuildAsync(
+ public override async Task BuildAsync(
bool ignoreCache = false,
CancellationToken cancellationToken = default)
{
@@ -37,17 +36,11 @@ public async Task BuildAsync(
var domainDataStructure = new DomainDataStructure("*", new TldRule("*"));
domainDataStructure.AddRules(rules);
- this._domainDataStructure = domainDataStructure;
+ base.CreareDomainDataStructure(rules);
return true;
}
- ///
- public DomainDataStructure? GetDomainDataStructure()
- {
- return this._domainDataStructure;
- }
-
private async Task LoadFromFile()
{
if (!File.Exists(this._filePath))
diff --git a/src/Nager.PublicSuffix/RuleProviders/SimpleHttpRuleProvider.cs b/src/Nager.PublicSuffix/RuleProviders/SimpleHttpRuleProvider.cs
index 96ed369..2d1769f 100644
--- a/src/Nager.PublicSuffix/RuleProviders/SimpleHttpRuleProvider.cs
+++ b/src/Nager.PublicSuffix/RuleProviders/SimpleHttpRuleProvider.cs
@@ -2,8 +2,6 @@
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Logging.Abstractions;
using Nager.PublicSuffix.Exceptions;
-using Nager.PublicSuffix.Extensions;
-using Nager.PublicSuffix.Models;
using Nager.PublicSuffix.RuleParsers;
using System;
using System.Net.Http;
@@ -15,14 +13,13 @@ namespace Nager.PublicSuffix.RuleProviders
///
/// Simple Http RuleProvider
///
- public class SimpleHttpRuleProvider : IRuleProvider, IDisposable
+ public class SimpleHttpRuleProvider : BaseRuleProvider, IDisposable
{
private bool _disposed;
private readonly string _dataFileUrl;
private readonly ILogger _logger;
private readonly HttpClient _httpClient;
private readonly bool _disposeHttpClient;
- private DomainDataStructure? _domainDataStructure;
///
/// Simple Http RuleProvider
@@ -78,7 +75,7 @@ protected virtual void Dispose(bool disposing)
}
///
- public async Task BuildAsync(
+ public override async Task BuildAsync(
bool ignoreCache = false,
CancellationToken cancellationToken = default)
{
@@ -105,20 +102,11 @@ public async Task BuildAsync(
var ruleParser = new TldRuleParser();
var rules = ruleParser.ParseRules(ruleData);
- var domainDataStructure = new DomainDataStructure("*", new TldRule("*"));
- domainDataStructure.AddRules(rules);
-
- this._domainDataStructure = domainDataStructure;
+ base.CreareDomainDataStructure(rules);
return true;
}
- ///
- public DomainDataStructure? GetDomainDataStructure()
- {
- return this._domainDataStructure;
- }
-
///
/// Load the public suffix data from the given url
///
diff --git a/src/Nager.PublicSuffix/RuleProviders/StaticRuleProvider.cs b/src/Nager.PublicSuffix/RuleProviders/StaticRuleProvider.cs
index d804e76..8a8a132 100644
--- a/src/Nager.PublicSuffix/RuleProviders/StaticRuleProvider.cs
+++ b/src/Nager.PublicSuffix/RuleProviders/StaticRuleProvider.cs
@@ -1,5 +1,4 @@
-using Nager.PublicSuffix.Extensions;
-using Nager.PublicSuffix.Models;
+using Nager.PublicSuffix.Models;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
@@ -9,10 +8,8 @@ namespace Nager.PublicSuffix.RuleProviders
///
/// Static RuleProvider
///
- public class StaticRuleProvider : IRuleProvider
+ public class StaticRuleProvider : BaseRuleProvider
{
- private readonly DomainDataStructure _domainDataStructure;
-
///
/// Static RuleProvider
///
@@ -25,27 +22,18 @@ public StaticRuleProvider(DomainDataStructure domainDataStructure)
///
/// Static RuleProvider
///
- ///
- public StaticRuleProvider(IEnumerable tldRules)
+ ///
+ public StaticRuleProvider(IEnumerable rules)
{
- var domainDataStructure = new DomainDataStructure("*", new TldRule("*"));
- domainDataStructure.AddRules(tldRules);
-
- this._domainDataStructure = domainDataStructure;
+ base.CreareDomainDataStructure(rules);
}
///
- public Task BuildAsync(
+ public override Task BuildAsync(
bool ignoreCache = false,
CancellationToken cancellationToken = default)
{
return Task.FromResult(true);
}
-
- ///
- public DomainDataStructure GetDomainDataStructure()
- {
- return this._domainDataStructure;
- }
}
}