From 70400bd88d72765c4bdaab3d8827da67436d8c8a Mon Sep 17 00:00:00 2001 From: Tino Hager Date: Mon, 12 Feb 2024 20:48:06 +0100 Subject: [PATCH] change project structure --- .../{ => DemoRules}/DomainParserTest.cs | 2 +- ...inParserTestWithIdnMappingNormalization.cs | 5 +- ...omainParserTestWithInitializedStructure.cs | 3 +- .../DomainParserTestWithUriNormalization.cs | 6 +- .../{ => RealRules}/PublicSuffixTest.cs | 2 +- ...cSuffixTestsWithIdnMappingNormalization.cs | 2 +- .../PublicSuffixTestsWithUriNormalization.cs | 2 +- ...uleProviderTest.cs => RuleProviderTest.cs} | 10 +-- src/Nager.PublicSuffix/DomainParser.cs | 4 +- ...DomainRuleProvider.cs => IRuleProvider.cs} | 8 +- ...leProvider.cs => LocalFileRuleProvider.cs} | 23 +++--- ...2TldRuleProvider.cs => WebRuleProvider.cs} | 20 +++-- .../RuleProviders/WebTldRuleProvider.cs | 82 ------------------- 13 files changed, 49 insertions(+), 120 deletions(-) rename src/Nager.PublicSuffix.UnitTest/{ => DemoRules}/DomainParserTest.cs (99%) rename src/Nager.PublicSuffix.UnitTest/{ => DemoRules}/DomainParserTestWithIdnMappingNormalization.cs (67%) rename src/Nager.PublicSuffix.UnitTest/{ => DemoRules}/DomainParserTestWithInitializedStructure.cs (91%) rename src/Nager.PublicSuffix.UnitTest/{ => DemoRules}/DomainParserTestWithUriNormalization.cs (68%) rename src/Nager.PublicSuffix.UnitTest/{ => RealRules}/PublicSuffixTest.cs (99%) rename src/Nager.PublicSuffix.UnitTest/{ => RealRules}/PublicSuffixTestsWithIdnMappingNormalization.cs (91%) rename src/Nager.PublicSuffix.UnitTest/{ => RealRules}/PublicSuffixTestsWithUriNormalization.cs (91%) rename src/Nager.PublicSuffix.UnitTest/{TldRuleProviderTest.cs => RuleProviderTest.cs} (62%) rename src/Nager.PublicSuffix/RuleProviders/{ITopLevelDomainRuleProvider.cs => IRuleProvider.cs} (61%) rename src/Nager.PublicSuffix/RuleProviders/{FileTldRuleProvider.cs => LocalFileRuleProvider.cs} (54%) rename src/Nager.PublicSuffix/RuleProviders/{Web2TldRuleProvider.cs => WebRuleProvider.cs} (82%) delete mode 100644 src/Nager.PublicSuffix/RuleProviders/WebTldRuleProvider.cs diff --git a/src/Nager.PublicSuffix.UnitTest/DomainParserTest.cs b/src/Nager.PublicSuffix.UnitTest/DemoRules/DomainParserTest.cs similarity index 99% rename from src/Nager.PublicSuffix.UnitTest/DomainParserTest.cs rename to src/Nager.PublicSuffix.UnitTest/DemoRules/DomainParserTest.cs index 121782d..243ddbe 100644 --- a/src/Nager.PublicSuffix.UnitTest/DomainParserTest.cs +++ b/src/Nager.PublicSuffix.UnitTest/DemoRules/DomainParserTest.cs @@ -3,7 +3,7 @@ using Nager.PublicSuffix.Models; using System.Collections.Generic; -namespace Nager.PublicSuffix.UnitTest +namespace Nager.PublicSuffix.UnitTest.DemoRules { public abstract class DomainParserTest { diff --git a/src/Nager.PublicSuffix.UnitTest/DomainParserTestWithIdnMappingNormalization.cs b/src/Nager.PublicSuffix.UnitTest/DemoRules/DomainParserTestWithIdnMappingNormalization.cs similarity index 67% rename from src/Nager.PublicSuffix.UnitTest/DomainParserTestWithIdnMappingNormalization.cs rename to src/Nager.PublicSuffix.UnitTest/DemoRules/DomainParserTestWithIdnMappingNormalization.cs index d9170bb..8dd9332 100644 --- a/src/Nager.PublicSuffix.UnitTest/DomainParserTestWithIdnMappingNormalization.cs +++ b/src/Nager.PublicSuffix.UnitTest/DemoRules/DomainParserTestWithIdnMappingNormalization.cs @@ -3,14 +3,15 @@ using Nager.PublicSuffix.Models; using System.Collections.Generic; -namespace Nager.PublicSuffix.UnitTest +namespace Nager.PublicSuffix.UnitTest.DemoRules { [TestClass] public class DomainParserTestWithIdnMappingNormalization : DomainParserTest { protected override IDomainParser GetDomainParser(List rules) { - return new DomainParser(rules, new IdnMappingDomainNormalizer()); + var domainNormalizer = new IdnMappingDomainNormalizer(); + return new DomainParser(rules, domainNormalizer); } } } diff --git a/src/Nager.PublicSuffix.UnitTest/DomainParserTestWithInitializedStructure.cs b/src/Nager.PublicSuffix.UnitTest/DemoRules/DomainParserTestWithInitializedStructure.cs similarity index 91% rename from src/Nager.PublicSuffix.UnitTest/DomainParserTestWithInitializedStructure.cs rename to src/Nager.PublicSuffix.UnitTest/DemoRules/DomainParserTestWithInitializedStructure.cs index 3692306..1ce2e12 100644 --- a/src/Nager.PublicSuffix.UnitTest/DomainParserTestWithInitializedStructure.cs +++ b/src/Nager.PublicSuffix.UnitTest/DemoRules/DomainParserTestWithInitializedStructure.cs @@ -3,7 +3,7 @@ using Nager.PublicSuffix.Models; using System.Collections.Generic; -namespace Nager.PublicSuffix.UnitTest +namespace Nager.PublicSuffix.UnitTest.DemoRules { [TestClass] public class DomainParserTestWithInitializedStructure : DomainParserTest @@ -12,6 +12,7 @@ protected override IDomainParser GetDomainParser(List rules) { var structure = new DomainDataStructure("*", new TldRule("*")); structure.AddRules(rules); + return new DomainParser(structure); } } diff --git a/src/Nager.PublicSuffix.UnitTest/DomainParserTestWithUriNormalization.cs b/src/Nager.PublicSuffix.UnitTest/DemoRules/DomainParserTestWithUriNormalization.cs similarity index 68% rename from src/Nager.PublicSuffix.UnitTest/DomainParserTestWithUriNormalization.cs rename to src/Nager.PublicSuffix.UnitTest/DemoRules/DomainParserTestWithUriNormalization.cs index d9f534a..6c2c730 100644 --- a/src/Nager.PublicSuffix.UnitTest/DomainParserTestWithUriNormalization.cs +++ b/src/Nager.PublicSuffix.UnitTest/DemoRules/DomainParserTestWithUriNormalization.cs @@ -3,14 +3,16 @@ using Nager.PublicSuffix.Models; using System.Collections.Generic; -namespace Nager.PublicSuffix.UnitTest +namespace Nager.PublicSuffix.UnitTest.DemoRules { [TestClass] public class DomainParserTestWithUriNormalization : DomainParserTest { protected override IDomainParser GetDomainParser(List rules) { - return new DomainParser(rules, new UriDomainNormalizer()); + var domainNormalizer = new UriDomainNormalizer(); + + return new DomainParser(rules, domainNormalizer); } } } diff --git a/src/Nager.PublicSuffix.UnitTest/PublicSuffixTest.cs b/src/Nager.PublicSuffix.UnitTest/RealRules/PublicSuffixTest.cs similarity index 99% rename from src/Nager.PublicSuffix.UnitTest/PublicSuffixTest.cs rename to src/Nager.PublicSuffix.UnitTest/RealRules/PublicSuffixTest.cs index 959291a..3201137 100644 --- a/src/Nager.PublicSuffix.UnitTest/PublicSuffixTest.cs +++ b/src/Nager.PublicSuffix.UnitTest/RealRules/PublicSuffixTest.cs @@ -1,7 +1,7 @@ using Microsoft.VisualStudio.TestTools.UnitTesting; using Nager.PublicSuffix.Exceptions; -namespace Nager.PublicSuffix.UnitTest +namespace Nager.PublicSuffix.UnitTest.RealRules { public abstract class PublicSuffixTest { diff --git a/src/Nager.PublicSuffix.UnitTest/PublicSuffixTestsWithIdnMappingNormalization.cs b/src/Nager.PublicSuffix.UnitTest/RealRules/PublicSuffixTestsWithIdnMappingNormalization.cs similarity index 91% rename from src/Nager.PublicSuffix.UnitTest/PublicSuffixTestsWithIdnMappingNormalization.cs rename to src/Nager.PublicSuffix.UnitTest/RealRules/PublicSuffixTestsWithIdnMappingNormalization.cs index 480b733..f2cf7c9 100644 --- a/src/Nager.PublicSuffix.UnitTest/PublicSuffixTestsWithIdnMappingNormalization.cs +++ b/src/Nager.PublicSuffix.UnitTest/RealRules/PublicSuffixTestsWithIdnMappingNormalization.cs @@ -2,7 +2,7 @@ using Nager.PublicSuffix.DomainNormalizers; using Nager.PublicSuffix.RuleProviders; -namespace Nager.PublicSuffix.UnitTest +namespace Nager.PublicSuffix.UnitTest.RealRules { [TestClass] public class PublicSuffixTestsWithIdnMappingNormalization : PublicSuffixTest diff --git a/src/Nager.PublicSuffix.UnitTest/PublicSuffixTestsWithUriNormalization.cs b/src/Nager.PublicSuffix.UnitTest/RealRules/PublicSuffixTestsWithUriNormalization.cs similarity index 91% rename from src/Nager.PublicSuffix.UnitTest/PublicSuffixTestsWithUriNormalization.cs rename to src/Nager.PublicSuffix.UnitTest/RealRules/PublicSuffixTestsWithUriNormalization.cs index ca30da3..46a0ad1 100644 --- a/src/Nager.PublicSuffix.UnitTest/PublicSuffixTestsWithUriNormalization.cs +++ b/src/Nager.PublicSuffix.UnitTest/RealRules/PublicSuffixTestsWithUriNormalization.cs @@ -2,7 +2,7 @@ using Nager.PublicSuffix.DomainNormalizers; using Nager.PublicSuffix.RuleProviders; -namespace Nager.PublicSuffix.UnitTest +namespace Nager.PublicSuffix.UnitTest.RealRules { [TestClass] public class PublicSuffixTestsWithUriNormalization : PublicSuffixTest diff --git a/src/Nager.PublicSuffix.UnitTest/TldRuleProviderTest.cs b/src/Nager.PublicSuffix.UnitTest/RuleProviderTest.cs similarity index 62% rename from src/Nager.PublicSuffix.UnitTest/TldRuleProviderTest.cs rename to src/Nager.PublicSuffix.UnitTest/RuleProviderTest.cs index 2b37a64..7561c94 100644 --- a/src/Nager.PublicSuffix.UnitTest/TldRuleProviderTest.cs +++ b/src/Nager.PublicSuffix.UnitTest/RuleProviderTest.cs @@ -6,21 +6,21 @@ namespace Nager.PublicSuffix.UnitTest { [TestClass] - public class TldRuleProviderTest + public class RuleProviderTest { [TestMethod] public async Task WebTldRuleProviderTest() { - var tldRuleProvider = new WebTldRuleProvider(); - var rules = await tldRuleProvider.BuildAsync(); + var webRuleProvider = new WebRuleProvider(); + var rules = await webRuleProvider.BuildAsync(); Assert.IsNotNull(rules); } [TestMethod] public async Task FileTldRuleProviderTest() { - var tldRuleProvider = new FileTldRuleProvider("public_suffix_list.dat"); - var rules = await tldRuleProvider.BuildAsync(); + var localFileRuleProvider = new LocalFileRuleProvider("public_suffix_list.dat"); + var rules = await localFileRuleProvider.BuildAsync(); Assert.AreEqual(9609, rules.Count()); Assert.IsNotNull(rules); } diff --git a/src/Nager.PublicSuffix/DomainParser.cs b/src/Nager.PublicSuffix/DomainParser.cs index 2cd824a..ffbb285 100644 --- a/src/Nager.PublicSuffix/DomainParser.cs +++ b/src/Nager.PublicSuffix/DomainParser.cs @@ -37,9 +37,9 @@ public DomainParser(IEnumerable rules, IDomainNormalizer domainNormaliz /// /// Creates and initializes a DomainParser /// - /// A rule provider from interface . + /// A rule provider from interface . /// An . - public DomainParser(ITopLevelDomainRuleProvider ruleProvider, IDomainNormalizer domainNormalizer = null) + public DomainParser(IRuleProvider ruleProvider, IDomainNormalizer domainNormalizer = null) : this(domainNormalizer) { var rules = ruleProvider.BuildAsync().GetAwaiter().GetResult(); diff --git a/src/Nager.PublicSuffix/RuleProviders/ITopLevelDomainRuleProvider.cs b/src/Nager.PublicSuffix/RuleProviders/IRuleProvider.cs similarity index 61% rename from src/Nager.PublicSuffix/RuleProviders/ITopLevelDomainRuleProvider.cs rename to src/Nager.PublicSuffix/RuleProviders/IRuleProvider.cs index cb8c04c..299aaad 100644 --- a/src/Nager.PublicSuffix/RuleProviders/ITopLevelDomainRuleProvider.cs +++ b/src/Nager.PublicSuffix/RuleProviders/IRuleProvider.cs @@ -1,18 +1,20 @@ using Nager.PublicSuffix.Models; using System.Collections.Generic; +using System.Threading; using System.Threading.Tasks; namespace Nager.PublicSuffix.RuleProviders { /// - /// ITopLevelDomainRuleProvider + /// Interface RuleProvider /// - public interface ITopLevelDomainRuleProvider + public interface IRuleProvider { /// /// Loads the plain text data from a source and parse the public suffix rules /// + /// /// Returns the TldRules - Task> BuildAsync(); + Task> BuildAsync(CancellationToken cancellationToken = default); } } diff --git a/src/Nager.PublicSuffix/RuleProviders/FileTldRuleProvider.cs b/src/Nager.PublicSuffix/RuleProviders/LocalFileRuleProvider.cs similarity index 54% rename from src/Nager.PublicSuffix/RuleProviders/FileTldRuleProvider.cs rename to src/Nager.PublicSuffix/RuleProviders/LocalFileRuleProvider.cs index c9a1211..f3a2635 100644 --- a/src/Nager.PublicSuffix/RuleProviders/FileTldRuleProvider.cs +++ b/src/Nager.PublicSuffix/RuleProviders/LocalFileRuleProvider.cs @@ -2,28 +2,29 @@ using Nager.PublicSuffix.RuleParsers; using System.Collections.Generic; using System.IO; +using System.Threading; using System.Threading.Tasks; namespace Nager.PublicSuffix.RuleProviders { /// - /// FileTldRuleProvider + /// LocalFileRuleProvider /// - public class FileTldRuleProvider : ITopLevelDomainRuleProvider + public class LocalFileRuleProvider : IRuleProvider { - private readonly string _fileName; + private readonly string _filePath; /// - /// FileTldRuleProvider + /// LocalFileRuleProvider /// - /// - public FileTldRuleProvider(string fileName) + /// + public LocalFileRuleProvider(string filePath) { - this._fileName = fileName; + this._filePath = filePath; } /// - public async Task> BuildAsync() + public async Task> BuildAsync(CancellationToken cancellationToken = default) { var ruleData = await this.LoadFromFile().ConfigureAwait(false); @@ -34,12 +35,12 @@ public async Task> BuildAsync() private async Task LoadFromFile() { - if (!File.Exists(this._fileName)) + if (!File.Exists(this._filePath)) { - throw new FileNotFoundException("Rule file does not exist"); + throw new FileNotFoundException($"Rule file does not exist {this._filePath}"); } - using var reader = File.OpenText(this._fileName); + using var reader = File.OpenText(this._filePath); return await reader.ReadToEndAsync().ConfigureAwait(false); } } diff --git a/src/Nager.PublicSuffix/RuleProviders/Web2TldRuleProvider.cs b/src/Nager.PublicSuffix/RuleProviders/WebRuleProvider.cs similarity index 82% rename from src/Nager.PublicSuffix/RuleProviders/Web2TldRuleProvider.cs rename to src/Nager.PublicSuffix/RuleProviders/WebRuleProvider.cs index 6851ee5..4cb7690 100644 --- a/src/Nager.PublicSuffix/RuleProviders/Web2TldRuleProvider.cs +++ b/src/Nager.PublicSuffix/RuleProviders/WebRuleProvider.cs @@ -4,14 +4,15 @@ using Nager.PublicSuffix.RuleParsers; using System.Collections.Generic; using System.Net.Http; +using System.Threading; using System.Threading.Tasks; namespace Nager.PublicSuffix.RuleProviders { /// - /// Web2TldRuleProvider + /// WebRuleProvider /// - public class Web2TldRuleProvider : ITopLevelDomainRuleProvider + public class WebRuleProvider : IRuleProvider { private readonly string _fileUrl; private readonly ICacheProvider _cacheProvider; @@ -23,13 +24,13 @@ public class Web2TldRuleProvider : ITopLevelDomainRuleProvider public ICacheProvider CacheProvider { get { return this._cacheProvider; } } /// - /// Web2TldRuleProvider
+ /// WebRuleProvider
/// Loads the public suffix definition file from a given url ///
/// /// /// default is - public Web2TldRuleProvider( + public WebRuleProvider( HttpClient httpClient, string url = "https://publicsuffix.org/list/public_suffix_list.dat", ICacheProvider cacheProvider = null) @@ -47,7 +48,7 @@ public Web2TldRuleProvider( } /// - public async Task> BuildAsync() + public async Task> BuildAsync(CancellationToken cancellationToken = default) { var ruleParser = new TldRuleParser(); @@ -58,7 +59,7 @@ public async Task> BuildAsync() } else { - ruleData = await this.LoadFromUrlAsync(this._fileUrl).ConfigureAwait(false); + ruleData = await this.LoadFromUrlAsync(this._fileUrl, cancellationToken).ConfigureAwait(false); await this._cacheProvider.SetAsync(ruleData).ConfigureAwait(false); } @@ -70,10 +71,13 @@ public async Task> BuildAsync() /// Load the public suffix data from the given url /// /// + /// /// - public async Task LoadFromUrlAsync(string url) + public async Task LoadFromUrlAsync( + string url, + CancellationToken cancellationToken) { - using var response = await this._httpClient.GetAsync(url).ConfigureAwait(false); + using var response = await this._httpClient.GetAsync(url, cancellationToken).ConfigureAwait(false); if (!response.IsSuccessStatusCode) { diff --git a/src/Nager.PublicSuffix/RuleProviders/WebTldRuleProvider.cs b/src/Nager.PublicSuffix/RuleProviders/WebTldRuleProvider.cs deleted file mode 100644 index 80e6049..0000000 --- a/src/Nager.PublicSuffix/RuleProviders/WebTldRuleProvider.cs +++ /dev/null @@ -1,82 +0,0 @@ -using Nager.PublicSuffix.CacheProviders; -using Nager.PublicSuffix.Exceptions; -using Nager.PublicSuffix.Models; -using Nager.PublicSuffix.RuleParsers; -using System.Collections.Generic; -using System.Net.Http; -using System.Threading.Tasks; - -namespace Nager.PublicSuffix.RuleProviders -{ - /// - /// WebTldRuleProvider - /// - public class WebTldRuleProvider : ITopLevelDomainRuleProvider - { - private readonly string _fileUrl; - private readonly ICacheProvider _cacheProvider; - - /// - /// Returns the cache provider - /// - public ICacheProvider CacheProvider { get { return this._cacheProvider; } } - - /// - /// WebTldRuleProvider
- /// Loads the public suffix definition file from a given url - ///
- /// - /// default is - public WebTldRuleProvider( - string url = "https://publicsuffix.org/list/public_suffix_list.dat", - ICacheProvider cacheProvider = null) - { - this._fileUrl = url; - - if (cacheProvider == null) - { - this._cacheProvider = new FileCacheProvider(); - return; - } - - this._cacheProvider = cacheProvider; - } - - /// - public async Task> BuildAsync() - { - var ruleParser = new TldRuleParser(); - - string ruleData; - if (!this._cacheProvider.IsCacheValid()) - { - ruleData = await this.LoadFromUrlAsync(this._fileUrl).ConfigureAwait(false); - await this._cacheProvider.SetAsync(ruleData).ConfigureAwait(false); - } - else - { - ruleData = await this._cacheProvider.GetAsync().ConfigureAwait(false); - } - - var rules = ruleParser.ParseRules(ruleData); - return rules; - } - - /// - /// Load the public suffix data from the given url - /// - /// - /// - public async Task LoadFromUrlAsync(string url) - { - using var httpClient = new HttpClient(); - using var response = await httpClient.GetAsync(url).ConfigureAwait(false); - if (!response.IsSuccessStatusCode) - { - throw new RuleLoadException($"Cannot load from {url} {response.StatusCode}"); - } - - return await response.Content.ReadAsStringAsync().ConfigureAwait(false); - } - } -}