diff --git a/README.md b/README.md index bae5ede..b4ef7d6 100644 --- a/README.md +++ b/README.md @@ -77,8 +77,8 @@ var composition = scope.For(myObject) .Build(); // Access via either contract -var validator = composition.GetAll().First(); -var formatter = composition.GetAll().First(); +var validator = composition.GetFirstOrDefault(); +var formatter = composition.GetFirstOrDefault(); ``` ## 📚 Documentation diff --git a/docs/api-reference.md b/docs/api-reference.md index c383e6a..56d9db4 100644 --- a/docs/api-reference.md +++ b/docs/api-reference.md @@ -246,7 +246,7 @@ Provides access to the composer registry for managing active composers. |--------|---------|-------------| | `Has(object subject)` | `bool` | Checks if a composer exists for the subject | | `Find(object subject)` | `Composer` | Finds the composer for the subject (throws if not found) | -| `FindOrDefault(object subject)` | `Composer?` | Finds the composer or returns null | +| `GetOrDefault(object subject)` | `Composer?` | Finds the composer or returns null | | `TryGet(object subject, out Composer composer)` | `bool` | Tries to get the composer for the subject | ### Example @@ -271,13 +271,13 @@ Provides access to the composition registry for managing built compositions. |--------|---------|-------------| | `Has(object subject)` | `bool` | Checks if a composition exists for the subject | | `Find(object subject)` | `IComposition` | Finds the composition for the subject (throws if not found) | -| `FindOrDefault(object subject)` | `IComposition?` | Finds the composition or returns null | -| `TryFind(object subject, out IComposition composition)` | `bool` | Tries to find the composition for the subject | +| `GetOrDefault(object subject)` | `IComposition?` | Finds the composition or returns null | +| `TryGet(object subject, out IComposition composition)` | `bool` | Tries to find the composition for the subject | ### Example ```csharp -var composition = scope.Compositions.FindOrDefault(document); +var composition = scope.Compositions.GetOrDefault(document); if (composition != null) { var capabilities = composition.GetAll(); diff --git a/docs/examples.md b/docs/examples.md index 38fb9ce..a993069 100644 --- a/docs/examples.md +++ b/docs/examples.md @@ -211,8 +211,8 @@ var composition = scope.For(myObject) .Build(); // Access via either contract - both return the same instance -var validator = composition.GetAll().First(); -var formatter = composition.GetAll().First(); +var validator = composition.GetFirstOrDefault(); +var formatter = composition.GetFirstOrDefault(); Console.WriteLine(ReferenceEquals(validator, formatter)); // True ``` @@ -370,7 +370,7 @@ var composition = scope.For(document) .Build(); // Automatically registered // Find compositions later -var found = scope.Compositions.FindOrDefault(document); +var found = scope.Compositions.GetOrDefault(document); if (found != null) { var capabilities = found.GetAll(); @@ -388,14 +388,14 @@ if (scope.Compositions.Has(document)) } // Find or return null -var comp = scope.Compositions.FindOrDefault(document); +var comp = scope.Compositions.GetOrDefault(document); if (comp != null) { // Use composition } // Try pattern -if (scope.Compositions.TryFind(document, out var composition)) +if (scope.Compositions.TryGet(document, out var composition)) { // Use composition } @@ -443,7 +443,7 @@ var composition = scope.For(subject, useRegistry: true) .Build(useRegistry: true); // This composition IS registered despite global settings -var found = scope.Compositions.FindOrDefault(subject); +var found = scope.Compositions.GetOrDefault(subject); Console.WriteLine(found != null); // True ``` diff --git a/src/Cocoar.Capabilities.Benchmarks/CanonicalizationBenchmarks.cs b/src/Cocoar.Capabilities.Benchmarks/CanonicalizationBenchmarks.cs index 5ebc1c1..9d1df6d 100644 --- a/src/Cocoar.Capabilities.Benchmarks/CanonicalizationBenchmarks.cs +++ b/src/Cocoar.Capabilities.Benchmarks/CanonicalizationBenchmarks.cs @@ -57,7 +57,7 @@ public int Lookup_StringSubjects() int total = 0; for (int i = 0; i < SubjectCount; i++) { - _stringScope.Compositions.TryFind(_stringSubjects[i], out var comp); + _stringScope.Compositions.TryGet(_stringSubjects[i], out var comp); if (comp != null) total += comp.TotalCapabilityCount; } return total; @@ -69,7 +69,7 @@ public int Lookup_ValueSubjects() int total = 0; for (int i = 0; i < SubjectCount; i++) { - _valueScope.Compositions.TryFind(_valueSubjects[i], out var comp); + _valueScope.Compositions.TryGet(_valueSubjects[i], out var comp); if (comp != null) total += comp.TotalCapabilityCount; } return total; diff --git a/src/Cocoar.Capabilities.Benchmarks/CapabilityBenchmarks.cs b/src/Cocoar.Capabilities.Benchmarks/CapabilityBenchmarks.cs index dd23313..add2c5e 100644 --- a/src/Cocoar.Capabilities.Benchmarks/CapabilityBenchmarks.cs +++ b/src/Cocoar.Capabilities.Benchmarks/CapabilityBenchmarks.cs @@ -153,7 +153,7 @@ public IComposition Build_Registry_Small_1x50() composer.Build(useRegistry: true); // Retrieve from registry (this is the real-world usage pattern) - BenchmarkScopes.Shared.Compositions.TryFind(subject, out var composition); + BenchmarkScopes.Shared.Compositions.TryGet(subject, out var composition); return composition!; } @@ -173,7 +173,7 @@ public IComposition Build_Registry_Large_1x500() composer.Build(useRegistry: true); // Retrieve from registry (this is the real-world usage pattern) - BenchmarkScopes.Shared.Compositions.TryFind(subject, out var composition); + BenchmarkScopes.Shared.Compositions.TryGet(subject, out var composition); return composition!; } @@ -181,28 +181,28 @@ public IComposition Build_Registry_Large_1x500() [Benchmark] public int Count_Registry_Small_AllCapabilities() { - BenchmarkScopes.Shared.Compositions.TryFind(_registryTestSubject, out var composition); + BenchmarkScopes.Shared.Compositions.TryGet(_registryTestSubject, out var composition); return composition!.GetAll().Count; } [Benchmark] public int Count_Registry_Large_AllCapabilities() { - BenchmarkScopes.Shared.Compositions.TryFind(_registryTestSubjectLarge, out var composition); + BenchmarkScopes.Shared.Compositions.TryGet(_registryTestSubjectLarge, out var composition); return composition!.GetAll().Count; } [Benchmark] public int Count_Registry_Small_FeatureCapabilities() { - BenchmarkScopes.Shared.Compositions.TryFind(_registryTestSubject, out var composition); + BenchmarkScopes.Shared.Compositions.TryGet(_registryTestSubject, out var composition); return composition!.GetAll().Count; } [Benchmark] public int Count_Registry_Large_FeatureCapabilities() { - BenchmarkScopes.Shared.Compositions.TryFind(_registryTestSubjectLarge, out var composition); + BenchmarkScopes.Shared.Compositions.TryGet(_registryTestSubjectLarge, out var composition); return composition!.GetAll().Count; } } diff --git a/src/Cocoar.Capabilities.Benchmarks/CoreVsRegistryBenchmarks.cs b/src/Cocoar.Capabilities.Benchmarks/CoreVsRegistryBenchmarks.cs index 07b871a..c9a47d1 100644 --- a/src/Cocoar.Capabilities.Benchmarks/CoreVsRegistryBenchmarks.cs +++ b/src/Cocoar.Capabilities.Benchmarks/CoreVsRegistryBenchmarks.cs @@ -123,19 +123,19 @@ public IComposition Lookup_Core_DirectAccess() [Benchmark(Description = "Registry: Global FindOrDefault")] [BenchmarkCategory("Lookup", "Registry")] - public IComposition? Lookup_Registry_FindOrDefault() + public IComposition? Lookup_Registry_GetOrDefault() { // Registry pattern: Global lookup (convenience with overhead) - BenchmarkScopes.Shared.Compositions.TryFind(_registrySubject, out var composition); + BenchmarkScopes.Shared.Compositions.TryGet(_registrySubject, out var composition); return composition; } - [Benchmark(Description = "Registry: TryFind pattern")] + [Benchmark(Description = "Registry: TryGet pattern")] [BenchmarkCategory("Lookup", "Registry")] - public bool Lookup_Registry_TryFind() + public bool Lookup_Registry_TryGet() { - // Registry pattern: TryFind (slightly optimized) - return BenchmarkScopes.Shared.Compositions.TryFind(_registrySubject, out _); + // Registry pattern: TryGet (slightly optimized) + return BenchmarkScopes.Shared.Compositions.TryGet(_registrySubject, out _); } diff --git a/src/Cocoar.Capabilities.Tests/BasicCompositionTests.cs b/src/Cocoar.Capabilities.Tests/BasicCompositionTests.cs index a137762..be3d67a 100644 --- a/src/Cocoar.Capabilities.Tests/BasicCompositionTests.cs +++ b/src/Cocoar.Capabilities.Tests/BasicCompositionTests.cs @@ -19,7 +19,7 @@ public void Build_WithRegistryDisabled_CompositionNotRegistered() Assert.Single(testCaps); Assert.Equal("A", testCaps[0].Name); - var found = scope.Compositions.FindOrDefault(subject); + var found = scope.Compositions.GetOrDefault(subject); Assert.Null(found); } @@ -33,7 +33,7 @@ public void Build_WithOverrideEnablesRegistry_CompositionRegistered() .Add(new TestCapability("B")) .Build(useRegistry: true); - var found = scope.Compositions.FindOrDefault(subject); + var found = scope.Compositions.GetOrDefault(subject); Assert.NotNull(found); Assert.Same(composition, found); Assert.Equal("B", found!.GetAll()[0].Name); diff --git a/src/Cocoar.Capabilities.Tests/BuildRegistryDecisionMatrixTests.cs b/src/Cocoar.Capabilities.Tests/BuildRegistryDecisionMatrixTests.cs index a927320..9134cb1 100644 --- a/src/Cocoar.Capabilities.Tests/BuildRegistryDecisionMatrixTests.cs +++ b/src/Cocoar.Capabilities.Tests/BuildRegistryDecisionMatrixTests.cs @@ -46,8 +46,8 @@ public void Matrix_Verify_All_Registry_Decisions( var composer = scope.For(subject, composerOverride); composer.Add(new TestCapability("T")); - var preComposer = scope.Composers.FindOrDefault(subject); - var preComposition = scope.Compositions.FindOrDefault(subject); + var preComposer = scope.Composers.GetOrDefault(subject); + var preComposition = scope.Compositions.GetOrDefault(subject); Assert.Equal(effectiveComposer, preComposer != null); Assert.Null(preComposition); // Never registered before Build @@ -55,8 +55,8 @@ public void Matrix_Verify_All_Registry_Decisions( // Act: Build var composition = composer.Build(compositionOverride); - var postComposer = scope.Composers.FindOrDefault(subject); - var postComposition = scope.Compositions.FindOrDefault(subject); + var postComposer = scope.Composers.GetOrDefault(subject); + var postComposition = scope.Compositions.GetOrDefault(subject); // Assert post-build according to matrix if (!effectiveComposer && !effectiveComposition) diff --git a/src/Cocoar.Capabilities.Tests/BuildRegistryDecisionTests.cs b/src/Cocoar.Capabilities.Tests/BuildRegistryDecisionTests.cs index b612974..f1e2fcd 100644 --- a/src/Cocoar.Capabilities.Tests/BuildRegistryDecisionTests.cs +++ b/src/Cocoar.Capabilities.Tests/BuildRegistryDecisionTests.cs @@ -13,8 +13,8 @@ public void Build_NoRegistries_NoOverrides_NoRegistryCalls() using var scope = CreateScope(false, false); var subject = new StringSubject("s1"); var comp = scope.For(subject).Add(new TestCapability("A")).Build(); - Assert.Null(scope.Composers.FindOrDefault(subject)); - Assert.Null(scope.Compositions.FindOrDefault(subject)); + Assert.Null(scope.Composers.GetOrDefault(subject)); + Assert.Null(scope.Compositions.GetOrDefault(subject)); Assert.Same(subject, comp.Subject); } @@ -26,8 +26,8 @@ public void Build_ComposerDisabled_CompositionEnabledViaOverride_RegistersCompos var comp = scope.For(subject, useRegistry: false) // composer override false (explicit) .Add(new TestCapability("B")) .Build(useRegistry: true); // composition override true - Assert.Null(scope.Composers.FindOrDefault(subject)); // composer not registered - var found = scope.Compositions.FindOrDefault(subject); + Assert.Null(scope.Composers.GetOrDefault(subject)); // composer not registered + var found = scope.Compositions.GetOrDefault(subject); Assert.NotNull(found); Assert.Same(comp, found); Assert.Same(subject, comp.Subject); @@ -41,8 +41,8 @@ public void Build_ComposerEnabled_CompositionDisabled_RemovesComposerDoesNotRegi var builder = scope.For(subject, useRegistry: true) // composer registered .Add(new TestCapability("C")); var comp = builder.Build(useRegistry: false); // disable composition - Assert.Null(scope.Compositions.FindOrDefault(subject)); // composition not registered - Assert.Null(scope.Composers.FindOrDefault(subject)); // composer removed + Assert.Null(scope.Compositions.GetOrDefault(subject)); // composition not registered + Assert.Null(scope.Composers.GetOrDefault(subject)); // composer removed Assert.Same(subject, comp.Subject); } @@ -54,8 +54,8 @@ public void Build_ComposerEnabled_CompositionEnabled_Transitions() var comp = scope.For(subject) // default true -> composer registered .Add(new TestCapability("D")) .Build(); // default true -> transition - Assert.Null(scope.Composers.FindOrDefault(subject)); // composer transitioned away - var composition = scope.Compositions.FindOrDefault(subject); + Assert.Null(scope.Composers.GetOrDefault(subject)); // composer transitioned away + var composition = scope.Compositions.GetOrDefault(subject); Assert.NotNull(composition); Assert.Same(comp, composition); Assert.Same(subject, comp.Subject); @@ -69,8 +69,8 @@ public void Build_ComposerDisabled_CompositionDefaultTrue_DirectRegistration() var comp = scope.For(subject, useRegistry: false) .Add(new TestCapability("E")) .Build(); // composition default true - Assert.Null(scope.Composers.FindOrDefault(subject)); - var found = scope.Compositions.FindOrDefault(subject); + Assert.Null(scope.Composers.GetOrDefault(subject)); + var found = scope.Compositions.GetOrDefault(subject); Assert.NotNull(found); Assert.Same(comp, found); Assert.Same(subject, comp.Subject); @@ -83,10 +83,10 @@ public void Build_ComposerOnlyEnabled_RemovesComposer_NoComposition() var subject = new StringSubject("s6"); var composer = scope.For(subject); // composer registered composer.Add(new TestCapability("X")); - Assert.NotNull(scope.Composers.FindOrDefault(subject)); // pre-build composer present + Assert.NotNull(scope.Composers.GetOrDefault(subject)); // pre-build composer present var composition = composer.Build(); // composition registry disabled -> no registration - Assert.Null(scope.Compositions.FindOrDefault(subject)); - Assert.Null(scope.Composers.FindOrDefault(subject)); // composer removed + Assert.Null(scope.Compositions.GetOrDefault(subject)); + Assert.Null(scope.Composers.GetOrDefault(subject)); // composer removed Assert.Same(subject, composition.Subject); } @@ -97,12 +97,12 @@ public void Build_ComposerAndCompositionEnabled_ComposerVisibleBeforeBuild_Trans var subject = new StringSubject("s7"); var composer = scope.For(subject); // composer registered composer.Add(new TestCapability("Y")); - var composerPre = scope.Composers.FindOrDefault(subject); + var composerPre = scope.Composers.GetOrDefault(subject); Assert.NotNull(composerPre); Assert.Same(composer, composerPre); var composition = composer.Build(); // transition - Assert.Null(scope.Composers.FindOrDefault(subject)); - var compositionPost = scope.Compositions.FindOrDefault(subject); + Assert.Null(scope.Composers.GetOrDefault(subject)); + var compositionPost = scope.Compositions.GetOrDefault(subject); Assert.NotNull(compositionPost); Assert.Same(composition, compositionPost); Assert.Same(subject, composition.Subject); diff --git a/src/Cocoar.Capabilities.Tests/CapabilityEntryTests.cs b/src/Cocoar.Capabilities.Tests/CapabilityEntryTests.cs index 3b635e5..94efb5f 100644 --- a/src/Cocoar.Capabilities.Tests/CapabilityEntryTests.cs +++ b/src/Cocoar.Capabilities.Tests/CapabilityEntryTests.cs @@ -17,11 +17,11 @@ public void Registry_ObjectApis_SucceedForExisting() .Build(useRegistry: true); // Use object-based registry path (exercises CapabilityEntry.TryGetComposition(object&)) - Assert.True(scope.Compositions.TryFind(subject, out var typed)); + Assert.True(scope.Compositions.TryGet(subject, out var typed)); Assert.Same(comp, typed); object boxedSubject = subject; - Assert.True(scope.Compositions.TryFind(boxedSubject, out IComposition boxedComp)); + Assert.True(scope.Compositions.TryGet(boxedSubject, out IComposition boxedComp)); Assert.Same(comp, boxedComp); } @@ -30,7 +30,7 @@ public void Registry_ObjectApis_ReturnFalseWhenMissing() { using var scope = new CapabilityScope(); object missing = new Subject(999); - Assert.False(scope.Compositions.TryFind(missing, out IComposition? _)); + Assert.False(scope.Compositions.TryGet(missing, out IComposition? _)); } private sealed class DisposableComposerCap : IDisposable where T : notnull @@ -49,6 +49,6 @@ public void ScopeDispose_RegistryAccessThrows() var recomposer = scope.Recompose(comp); recomposer.Build(useRegistry: true); scope.Dispose(); - Assert.Throws(() => scope.Compositions.TryFind(subject, out _)); + Assert.Throws(() => scope.Compositions.TryGet(subject, out _)); } } diff --git a/src/Cocoar.Capabilities.Tests/ConfigTests/ConfigureBuilder.cs b/src/Cocoar.Capabilities.Tests/ConfigTests/ConfigureBuilder.cs index 289fe11..5bb1855 100644 --- a/src/Cocoar.Capabilities.Tests/ConfigTests/ConfigureBuilder.cs +++ b/src/Cocoar.Capabilities.Tests/ConfigTests/ConfigureBuilder.cs @@ -14,7 +14,7 @@ public abstract class ConfigBuilder(CapabilityScope capabilityScope): IConfigure public static CapabilityScope GetCapabilityScopeFor(ConfigBuilder builder) => builder.CapabilityScope; public static Composer GetComposer(ConfigBuilder builder) => - GetCapabilityScopeFor(builder).Composers.FindRequired(builder); + GetCapabilityScopeFor(builder).Composers.GetRequired(builder); } public sealed class ConfigureBuilder(CapabilityScope capabilityScope) diff --git a/src/Cocoar.Capabilities.Tests/CustomStringMapperTests.cs b/src/Cocoar.Capabilities.Tests/CustomStringMapperTests.cs index cf37fdd..4754bcd 100644 --- a/src/Cocoar.Capabilities.Tests/CustomStringMapperTests.cs +++ b/src/Cocoar.Capabilities.Tests/CustomStringMapperTests.cs @@ -27,7 +27,7 @@ public void CustomStringMapper_AppliedPerScope_CanonicalizesConsistently() .Build(); // Lookup using differently cased + spaced variant - var found = scope.Compositions.FindOrDefault("HeLLo"); + var found = scope.Compositions.GetOrDefault("HeLLo"); Assert.NotNull(found); Assert.Same(composer, found); } @@ -46,7 +46,7 @@ public void CustomStringMapper_SecondRegistrationIgnored() .Add(new SimpleCapability()) .Build(); - var found = scope.Compositions.FindOrDefault("A"); + var found = scope.Compositions.GetOrDefault("A"); Assert.NotNull(found); Assert.Same(composer, found); } diff --git a/src/Cocoar.Capabilities.Tests/GetFirstTests.cs b/src/Cocoar.Capabilities.Tests/GetFirstTests.cs index 389834f..63e2940 100644 --- a/src/Cocoar.Capabilities.Tests/GetFirstTests.cs +++ b/src/Cocoar.Capabilities.Tests/GetFirstTests.cs @@ -141,7 +141,7 @@ public void TryGetFirst_WithRegistry_WorksCorrectly() .Add(new TestCapability("Second")) .Build(useRegistry: true); - var retrieved = scope.Compositions.FindOrDefault(subject); + var retrieved = scope.Compositions.GetOrDefault(subject); Assert.NotNull(retrieved); var found = retrieved!.TryGetFirst(out var result); diff --git a/src/Cocoar.Capabilities.Tests/RecomposeTests.cs b/src/Cocoar.Capabilities.Tests/RecomposeTests.cs index 0f020cb..b99bfbf 100644 --- a/src/Cocoar.Capabilities.Tests/RecomposeTests.cs +++ b/src/Cocoar.Capabilities.Tests/RecomposeTests.cs @@ -10,15 +10,15 @@ public void Recompose_RegistryDisabled_NoComposerRegistration() using var scope = new CapabilityScope(new CapabilityScopeOptions { UseComposerRegistry = false, UseCompositionRegistry = false }); var subject = new StringSubject("r1"); var baseComp = scope.For(subject).Add(new TestCapability("A")).Build(useRegistry: false); - Assert.Null(scope.Composers.FindOrDefault(subject)); - Assert.Null(scope.Compositions.FindOrDefault(subject)); + Assert.Null(scope.Composers.GetOrDefault(subject)); + Assert.Null(scope.Compositions.GetOrDefault(subject)); var recomposer = scope.Recompose(baseComp, useRegistry: false); recomposer.Add(new TestCapability("B")); - Assert.Null(scope.Composers.FindOrDefault(subject)); + Assert.Null(scope.Composers.GetOrDefault(subject)); var newComp = recomposer.Build(useRegistry: false); - Assert.Null(scope.Composers.FindOrDefault(subject)); - Assert.Null(scope.Compositions.FindOrDefault(subject)); + Assert.Null(scope.Composers.GetOrDefault(subject)); + Assert.Null(scope.Compositions.GetOrDefault(subject)); Assert.Equal(2, newComp.GetAll().Count); } @@ -29,15 +29,15 @@ public void Recompose_ComposerEnabled_CompositionDisabled_ComposerRemovedAfterBu var subject = new StringSubject("r2"); var baseComp = scope.For(subject).Add(new TestCapability("A")).Build(useRegistry: false); // composition explicitly disabled // Composer registry true, composition disabled => composer removed, no composition stored - Assert.Null(scope.Compositions.FindOrDefault(subject)); - Assert.Null(scope.Composers.FindOrDefault(subject)); + Assert.Null(scope.Compositions.GetOrDefault(subject)); + Assert.Null(scope.Composers.GetOrDefault(subject)); var recomposer = scope.Recompose(baseComp); // default composer reg true - Assert.NotNull(scope.Composers.FindOrDefault(subject)); + Assert.NotNull(scope.Composers.GetOrDefault(subject)); recomposer.Add(new TestCapability("B")); var newComp = recomposer.Build(useRegistry: false); // disable composition registry explicitly - Assert.Null(scope.Compositions.FindOrDefault(subject)); - Assert.Null(scope.Composers.FindOrDefault(subject)); + Assert.Null(scope.Compositions.GetOrDefault(subject)); + Assert.Null(scope.Composers.GetOrDefault(subject)); Assert.Equal(2, newComp.GetAll().Count); } @@ -47,16 +47,16 @@ public void Recompose_BothEnabled_TransitionOccurs() using var scope = new CapabilityScope(new CapabilityScopeOptions { UseComposerRegistry = true, UseCompositionRegistry = true }); var subject = new StringSubject("r3"); var baseComp = scope.For(subject).Add(new TestCapability("A")).Build(); - var stored = scope.Compositions.FindOrDefault(subject); + var stored = scope.Compositions.GetOrDefault(subject); Assert.NotNull(stored); Assert.Same(baseComp, stored); var recomposer = scope.Recompose(baseComp); // composer registered - Assert.NotNull(scope.Composers.FindOrDefault(subject)); + Assert.NotNull(scope.Composers.GetOrDefault(subject)); recomposer.Add(new TestCapability("B")); var newComp = recomposer.Build(); // transition - Assert.Null(scope.Composers.FindOrDefault(subject)); - var storedAfter = scope.Compositions.FindOrDefault(subject); + Assert.Null(scope.Composers.GetOrDefault(subject)); + var storedAfter = scope.Compositions.GetOrDefault(subject); Assert.NotNull(storedAfter); Assert.Same(newComp, storedAfter); Assert.Equal(2, newComp.GetAll().Count); diff --git a/src/Cocoar.Capabilities.Tests/RegistryApiTests.cs b/src/Cocoar.Capabilities.Tests/RegistryApiTests.cs index 9b87743..6141757 100644 --- a/src/Cocoar.Capabilities.Tests/RegistryApiTests.cs +++ b/src/Cocoar.Capabilities.Tests/RegistryApiTests.cs @@ -6,19 +6,19 @@ private sealed record Subject(int Id); private sealed record Cap(string Name) ; [Fact] - public void CompositionRegistry_FindRequired_ThrowsWhenMissing() + public void CompositionRegistry_GetRequired_ThrowsWhenMissing() { using var scope = new CapabilityScope(); var subject = new Subject(1); - Assert.Throws(() => scope.Compositions.FindRequired(subject)); + Assert.Throws(() => scope.Compositions.GetRequired(subject)); } [Fact] - public void ComposerRegistry_FindRequired_ThrowsWhenMissing() + public void ComposerRegistry_GetRequired_ThrowsWhenMissing() { using var scope = new CapabilityScope(); var subject = new Subject(2); - Assert.Throws(() => scope.Composers.FindRequired(subject)); + Assert.Throws(() => scope.Composers.GetRequired(subject)); } [Fact] @@ -36,6 +36,6 @@ public void Remove_ReturnsTrueWhenPresent() var subject = new Subject(4); scope.For(subject).Add(new Cap("X")).Build(useRegistry: true); Assert.True(scope.Compositions.Remove(subject)); - Assert.False(scope.Compositions.TryFind(subject, out _)); + Assert.False(scope.Compositions.TryGet(subject, out _)); } } diff --git a/src/Cocoar.Capabilities.Tests/SingleTestApproach.cs b/src/Cocoar.Capabilities.Tests/SingleTestApproach.cs index 8ed5dcb..f64007f 100644 --- a/src/Cocoar.Capabilities.Tests/SingleTestApproach.cs +++ b/src/Cocoar.Capabilities.Tests/SingleTestApproach.cs @@ -29,7 +29,7 @@ public void Test01_DisabledScope_EnableCompositionRegistry_ShouldWork() .Build(useRegistry: true); // Assert: Composition should be findable in registry - var foundComposition = _scope.Compositions.FindOrDefault(subject); + var foundComposition = _scope.Compositions.GetOrDefault(subject); // For now, let's just see what happens var isFound = foundComposition != null; diff --git a/src/Cocoar.Capabilities.Tests/StringSubjectValueSemanticsTests.cs b/src/Cocoar.Capabilities.Tests/StringSubjectValueSemanticsTests.cs index 14a0f4d..e25ee0c 100644 --- a/src/Cocoar.Capabilities.Tests/StringSubjectValueSemanticsTests.cs +++ b/src/Cocoar.Capabilities.Tests/StringSubjectValueSemanticsTests.cs @@ -17,7 +17,7 @@ public void DistinctEqualStringInstances_MapToSameComposition_WhenRegistered() .Add(new StringCapability("X")) .Build(useRegistry: true); - Assert.True(scope.Compositions.TryFind(s2, out var found)); + Assert.True(scope.Compositions.TryGet(s2, out var found)); Assert.Same(comp, found); // value-like semantics now } @@ -32,8 +32,8 @@ public void Remove_UsingDifferentEqualInstance_RemovesComposition() .Add(new StringCapability("T")) .Build(useRegistry: true); - Assert.True(scope.Compositions.TryFind(s2, out _)); + Assert.True(scope.Compositions.TryGet(s2, out _)); Assert.True(scope.Compositions.Remove(s2)); - Assert.False(scope.Compositions.TryFind(s1, out _)); + Assert.False(scope.Compositions.TryGet(s1, out _)); } } diff --git a/src/Cocoar.Capabilities.Tests/SubjectKeyCanonicalizerTests.cs b/src/Cocoar.Capabilities.Tests/SubjectKeyCanonicalizerTests.cs index 17ac101..b31e0fc 100644 --- a/src/Cocoar.Capabilities.Tests/SubjectKeyCanonicalizerTests.cs +++ b/src/Cocoar.Capabilities.Tests/SubjectKeyCanonicalizerTests.cs @@ -19,7 +19,7 @@ public void Canonicalization_StringInstancesShareSameComposition() var s1 = new string("alpha".ToCharArray()); var s2 = new string("alpha".ToCharArray()); var comp1 = scope.For(s1).Add(new Cap("A")).Build(useRegistry: true); - var comp2 = scope.Compositions.FindRequired(s2); + var comp2 = scope.Compositions.GetRequired(s2); Assert.Same(comp1, comp2); // value semantics } diff --git a/src/Cocoar.Capabilities.Tests/ValueTypeRegistryTests.cs b/src/Cocoar.Capabilities.Tests/ValueTypeRegistryTests.cs index bd1ff1d..7c31d83 100644 --- a/src/Cocoar.Capabilities.Tests/ValueTypeRegistryTests.cs +++ b/src/Cocoar.Capabilities.Tests/ValueTypeRegistryTests.cs @@ -23,8 +23,8 @@ public void ValueType_Compositions_AreRetrievable() .Add(new IntTestCapability("seven")) .Build(useRegistry: true); - Assert.True(scope.Compositions.TryFind(42, out var found1)); - Assert.True(scope.Compositions.TryFind(7, out var found2)); + Assert.True(scope.Compositions.TryGet(42, out var found1)); + Assert.True(scope.Compositions.TryGet(7, out var found2)); Assert.Same(c1, found1); Assert.Same(c2, found2); } @@ -36,8 +36,8 @@ public void ValueType_Composition_Removal_Works() scope.For(100, useRegistry: true).Add(new IntTestCapability("hundred")).Build(useRegistry: true); scope.For(200, useRegistry: true).Add(new IntTestCapability("two")) .Build(useRegistry: true); Assert.True(scope.Compositions.Remove(100)); - Assert.False(scope.Compositions.TryFind(100, out _)); - Assert.True(scope.Compositions.TryFind(200, out _)); + Assert.False(scope.Compositions.TryGet(100, out _)); + Assert.True(scope.Compositions.TryGet(200, out _)); } [Fact] @@ -47,7 +47,7 @@ public void ValueType_NotRegistered_WhenUseRegistryFalse() var comp = scope.For(5, useRegistry: false) .Add(new IntTestCapability("five")) .Build(useRegistry: false); - Assert.False(scope.Compositions.TryFind(5, out _)); + Assert.False(scope.Compositions.TryGet(5, out _)); Assert.NotNull(comp); } } diff --git a/src/Cocoar.Capabilities/ComposerRegistryApi.cs b/src/Cocoar.Capabilities/ComposerRegistryApi.cs index d507595..0587ce9 100644 --- a/src/Cocoar.Capabilities/ComposerRegistryApi.cs +++ b/src/Cocoar.Capabilities/ComposerRegistryApi.cs @@ -12,19 +12,19 @@ public ComposerRegistryApi(CapabilityScopeOptions options, DefaultCapabilityRegi _registry = sharedRegistry; } - public bool TryFind(TSubject subject, out Composer? composer) where TSubject : notnull + public bool TryGet(TSubject subject, out Composer? composer) where TSubject : notnull { return _registry.TryGetComposer(subject, out composer); } - public Composer? FindOrDefault(TSubject subject) where TSubject : notnull + public Composer? GetOrDefault(TSubject subject) where TSubject : notnull { - return TryFind(subject, out var composer) ? composer : null; + return TryGet(subject, out var composer) ? composer : null; } - public Composer FindRequired(TSubject subject) where TSubject : notnull + public Composer GetRequired(TSubject subject) where TSubject : notnull { - if (TryFind(subject, out var composer) && composer != null) + if (TryGet(subject, out var composer) && composer != null) return composer; throw new InvalidOperationException($"No composer found for subject of type '{typeof(TSubject).Name}'."); diff --git a/src/Cocoar.Capabilities/CompositionRegistryApi.cs b/src/Cocoar.Capabilities/CompositionRegistryApi.cs index c468f29..e69f9e2 100644 --- a/src/Cocoar.Capabilities/CompositionRegistryApi.cs +++ b/src/Cocoar.Capabilities/CompositionRegistryApi.cs @@ -12,44 +12,44 @@ public CompositionRegistryApi(CapabilityScopeOptions options, DefaultCapabilityR _registry = sharedRegistry; } - public bool TryFind(TSubject subject, out IComposition composition) where TSubject : notnull + public bool TryGet(TSubject subject, out IComposition composition) where TSubject : notnull { return _registry.TryGetComposition(subject, out composition); } - public IComposition? FindOrDefault(TSubject subject) where TSubject : notnull + public IComposition? GetOrDefault(TSubject subject) where TSubject : notnull { - return TryFind(subject, out var composition) ? composition : null; + return TryGet(subject, out var composition) ? composition : null; } - public IComposition FindRequired(TSubject subject) where TSubject : notnull + public IComposition GetRequired(TSubject subject) where TSubject : notnull { - if (TryFind(subject, out var composition)) + if (TryGet(subject, out var composition)) return composition; throw new InvalidOperationException($"No composition found for subject of type '{typeof(TSubject).Name}'."); } - public bool TryFind(object subject, out IComposition composition) + public bool TryGet(object subject, out IComposition composition) { ArgumentNullException.ThrowIfNull(subject); return _registry.TryGetComposition(subject, out composition); } - public IComposition? FindOrDefault(object subject) + public IComposition? GetOrDefault(object subject) { ArgumentNullException.ThrowIfNull(subject); - return TryFind(subject, out IComposition composition) ? composition : null; + return TryGet(subject, out IComposition composition) ? composition : null; } - public IComposition FindRequired(object subject) + public IComposition GetRequired(object subject) { ArgumentNullException.ThrowIfNull(subject); - if (TryFind(subject, out IComposition composition)) + if (TryGet(subject, out IComposition composition)) return composition; throw new InvalidOperationException($"No composition found for subject of type '{subject.GetType().Name}'.");