-
-
Save mxriverlynn/5cb0241ea0123b76fbb1 to your computer and use it in GitHub Desktop.
A DSL For Significant Numbers
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
private AddAssetResult HandleAssetFamily(SortContainer container, SystemAsset systemAsset) | |
{ | |
AddAssetResult result = null; | |
var assetFamilies = assetFamilyDao.GetByAssetType(systemAsset.AssetTypeId); | |
if (assetFamilies == null || assetFamilies.Count == 0) | |
{ | |
result = new AddAssetResult(SortContainerResources.NoAssetFamily); | |
} | |
if (assetFamilies != null && assetFamilies.Count > 1) | |
{ | |
result = new AddAssetResult(SortContainerResources.MultipleAssetFamilies); | |
} | |
if (assetFamilies != null && assetFamilies.Count == 1) | |
{ | |
var assetFamily = assetFamilies[0]; | |
SetContainerFamily(container, assetFamily); | |
result = VerifyFamilyIsCompatible(systemAsset, container); | |
} | |
return result; | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
private AddAssetResult HandleAssetFamily(SortContainer container, SystemAsset systemAsset) | |
{ | |
var assetFamilies = assetFamilyDao.GetByAssetType(systemAsset.AssetTypeId); | |
var result = assetFamilies.CheckCount<AssetFamily, AddAssetResult>() | |
.WhenZero(() => new AddAssetResult(SortContainerResources.NoAssetFamily)) | |
.WhenOne(() => AddAssetWithFamily(systemAsset, container, assetFamilies[0])) | |
.WhenMany(() => new AddAssetResult(SortContainerResources.MultipleAssetFamilies)) | |
.Result; | |
return result; | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public static class CountCheckerExtensions | |
{ | |
public static CountChecker<TResult> CheckCount<TCollectionType, TResult>(this IEnumerable<TCollectionType> enumerable) | |
{ | |
int theCount = 0; | |
if (enumerable != null) | |
theCount = enumerable.Count(); | |
return new CountChecker<TResult>(theCount); | |
} | |
} | |
public class CountChecker<TResult> | |
{ | |
private readonly int theCount; | |
public TResult Result { get; private set; } | |
public CountChecker(int theCount) | |
{ | |
this.theCount = theCount; | |
} | |
public CountChecker<TResult> WhenZero(Func<TResult> zeroAction) | |
{ | |
if (theCount == 0) | |
Result = zeroAction(); | |
return this; | |
} | |
public CountChecker<TResult> WhenOne(Func<TResult> oneAction) | |
{ | |
if (theCount == 1) | |
Result = oneAction(); | |
return this; | |
} | |
public CountChecker<TResult> WhenMany(Func<TResult> manyAction) | |
{ | |
if (theCount > 1) | |
Result = manyAction(); | |
return this; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment