From bdfd6a3871314ed66cad1dbd4f9cc181860028cd Mon Sep 17 00:00:00 2001 From: Martin Lee Date: Fri, 28 Feb 2020 19:00:13 +0000 Subject: [PATCH] Add decimal odds --- .../DataConverterHelperTests.cs | 14 ++++++++++++++ .../Helpers/DataConverterHelper.cs | 14 ++++++++++++++ BritishHorseRacingApi/Models/Runner.cs | 5 ++++- BritishHorseRacingApi/Models/RunnerResult.cs | 1 + 4 files changed, 33 insertions(+), 1 deletion(-) diff --git a/BritishHorseRacingApi.Tests/DataConverterHelperTests.cs b/BritishHorseRacingApi.Tests/DataConverterHelperTests.cs index 88821f2..2d6efcc 100644 --- a/BritishHorseRacingApi.Tests/DataConverterHelperTests.cs +++ b/BritishHorseRacingApi.Tests/DataConverterHelperTests.cs @@ -63,5 +63,19 @@ namespace BritishHorseRacingApi.Tests //Assert Assert.Equal(expectedResult, result); } + + [Theory()] + [InlineData("3/5",1.6)] + [InlineData("", null)] + [InlineData(" ", null)] + [InlineData(null, null)] + public void TestFractionOddsToDecimal(string value, double? expectedResult) + { + //Arrange + //Act + var result = DataConverterHelper.FractionOddsToDecimal(value); + //Assert + Assert.Equal(expectedResult, result); + } } } diff --git a/BritishHorseRacingApi/Helpers/DataConverterHelper.cs b/BritishHorseRacingApi/Helpers/DataConverterHelper.cs index c050e4d..cd4f366 100644 --- a/BritishHorseRacingApi/Helpers/DataConverterHelper.cs +++ b/BritishHorseRacingApi/Helpers/DataConverterHelper.cs @@ -67,5 +67,19 @@ namespace BritishHorseRacingApi.Helpers var lossDifference = GetComponent(match, "lossDifference", 0d); return (int)TimeSpan.FromSeconds(lossDifference).TotalMilliseconds; } + private static Regex _ratioRegex = new Regex("(?'Numerator'[0-9]*)/(?'Denominator'[0-9]*)", RegexOptions.Compiled); + public static decimal? FractionOddsToDecimal(string fraction) + { + if (String.IsNullOrWhiteSpace(fraction)) + return null; + + var match = _ratioRegex.Match(fraction); + if (match.Groups.Count != 2) + return null; + + var numerator = Decimal.Parse(match.Groups["Numerator"].Value); + var denominator = Decimal.Parse(match.Groups["Denominator"].Value); + return (numerator / denominator) + 1; + } } } diff --git a/BritishHorseRacingApi/Models/Runner.cs b/BritishHorseRacingApi/Models/Runner.cs index 104c9c9..d371da3 100644 --- a/BritishHorseRacingApi/Models/Runner.cs +++ b/BritishHorseRacingApi/Models/Runner.cs @@ -1,4 +1,5 @@ -using Newtonsoft.Json; +using BritishHorseRacingApi.Helpers; +using Newtonsoft.Json; namespace BritishHorseRacingApi.Models { @@ -135,5 +136,7 @@ namespace BritishHorseRacingApi.Models [JsonProperty("lastRuns")] public LastRun[] LastRuns { get; set; } + + public decimal? DecimalOdds() => DataConverterHelper.FractionOddsToDecimal(Odds); } } \ No newline at end of file diff --git a/BritishHorseRacingApi/Models/RunnerResult.cs b/BritishHorseRacingApi/Models/RunnerResult.cs index 84002cb..2f93a81 100644 --- a/BritishHorseRacingApi/Models/RunnerResult.cs +++ b/BritishHorseRacingApi/Models/RunnerResult.cs @@ -44,6 +44,7 @@ namespace BritishHorseRacingApi.Models public string RatingChase { get; set; } public string RatingHurdle { get; set; } public string RaceCriteriaRaceType { get; set; } + public string ResultFinishDNF { get; set; } public int Hro { get; set; } public string FinishTime { get; set; } public int? FinishTimeInMilliseconds() => DataConverterHelper.StopWatchStringToMilliseconds(FinishTime);