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; - } } }