public bool CanHandle(RawRaceFeed theRawRaceFeed, out object theDeserializedObj) { theDeserializedObj = null; if (theRawRaceFeed == null || theRawRaceFeed.FileName == null || theRawRaceFeed.FeedStream == null) { return(false); } if (!theRawRaceFeed.FileName.EndsWith("json", StringComparison.OrdinalIgnoreCase)) { return(false); } var aWolferhamptonRaceFeed = GetWolferhamptonRaceFeed(theRawRaceFeed.FeedStream); if (aWolferhamptonRaceFeed == null) { return(false); } theDeserializedObj = aWolferhamptonRaceFeed; return(aWolferhamptonRaceFeed.RawData != null && aWolferhamptonRaceFeed.RawData.Tags != null && !string.IsNullOrEmpty(aWolferhamptonRaceFeed.RawData.Tags.Sport) && aWolferhamptonRaceFeed.RawData.Tags.Sport.Equals(HORSE_RACING, StringComparison.OrdinalIgnoreCase) && !string.IsNullOrEmpty(aWolferhamptonRaceFeed.RawData.Tags.Track) && aWolferhamptonRaceFeed.RawData.Tags.Track.Equals(WOLVERHAMPTON, StringComparison.OrdinalIgnoreCase)); }
public void TestWolferhamptonFeed() { var aFeedDataLoaders = new List <IFeedDataLoader>(); aFeedDataLoaders.Add(new WolferhamptonFeedDataLoader()); var aHorseRaceDataProvicer = new HorseRaceDataProvider(aFeedDataLoaders); var aRawData = "{ \"RawData\": { \"Tags\": { \"TrackCode\": \"Wolverhampton\", \"Sport\": \"HorseRacing\" }, \"Markets\": [ { \"Selections\": [ { \"Price\": 10.0, \"Tags\": { \"name\": \"Toolatetodelegate\" } }, { \"Price\": 4.4, \"Tags\": { \"name\": \"Fikhaar\" } } ] } ] } } "; var aRawRaceFeed = new RawRaceFeed { FileName = "Wolferhampton_Race1.json", FeedStream = new MemoryStream(Encoding.UTF8.GetBytes(aRawData)) }; var aHorseRace = aHorseRaceDataProvicer.GetHorseRace(aRawRaceFeed); Assert.NotNull(aHorseRace); Assert.Equal("Wolverhampton", aHorseRace.Track); Assert.Equal(2, aHorseRace.Horses.Count); Assert.NotNull(aHorseRace.Horses.FirstOrDefault(theHorse => theHorse.Name.Equals("Fikhaar"))); Assert.NotNull(aHorseRace.Horses.FirstOrDefault(theHorse => theHorse.Name.Equals("Toolatetodelegate"))); Assert.Equal((decimal)4.4, aHorseRace.Horses.FirstOrDefault(theHorse => theHorse.Name.Equals("Fikhaar")).Price); Assert.Equal((decimal)10.0, aHorseRace.Horses.FirstOrDefault(theHorse => theHorse.Name.Equals("Toolatetodelegate")).Price); var aHorcesByPriceAsc = aHorseRace.Horses.OrderBy(theHorce => theHorce.Price).ToList(); Assert.Equal("Fikhaar", aHorcesByPriceAsc[0].Name); Assert.Equal("Toolatetodelegate", aHorcesByPriceAsc[1].Name); }
public void TestCaulfieldFeed() { var aFeedDataLoaders = new List <IFeedDataLoader>(); aFeedDataLoaders.Add(new CaulfieldFeedDataLoader()); var aHorseRaceDataProvicer = new HorseRaceDataProvider(aFeedDataLoaders); var aRawData = "<?xml version=\"1.0\"?> <meeting xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\"> <MeetingType>HorseRacing</MeetingType> <track name=\"Caulfield\"/> <races> <race> <horses> <horse name=\"Advancing\"> <number>1</number> </horse> <horse name=\"Coronel\"> <number>2</number> </horse> </horses> <prices> <price> <horses> <horse number=\"1\" Price=\"4.2\"/> <horse number=\"2\" Price=\"12\"/> </horses> </price> </prices> </race> </races> </meeting>"; var aRawRaceFeed = new RawRaceFeed { FileName = "Caulfield_Race1.xml", FeedStream = new MemoryStream(Encoding.UTF8.GetBytes(aRawData)) }; var aHorseRace = aHorseRaceDataProvicer.GetHorseRace(aRawRaceFeed); Assert.NotNull(aHorseRace); Assert.Equal("Caulfield", aHorseRace.Track); Assert.Equal(2, aHorseRace.Horses.Count); Assert.NotNull(aHorseRace.Horses.FirstOrDefault(theHorse => theHorse.Name.Equals("Advancing"))); Assert.NotNull(aHorseRace.Horses.FirstOrDefault(theHorse => theHorse.Name.Equals("Coronel"))); Assert.Equal((decimal)4.2, aHorseRace.Horses.FirstOrDefault(theHorse => theHorse.Name.Equals("Advancing")).Price); Assert.Equal(12, aHorseRace.Horses.FirstOrDefault(theHorse => theHorse.Name.Equals("Coronel")).Price); var aHorcesByPriceAsc = aHorseRace.Horses.OrderBy(theHorce => theHorce.Price).ToList(); Assert.Equal("Advancing", aHorcesByPriceAsc[0].Name); Assert.Equal("Coronel", aHorcesByPriceAsc[1].Name); }
public static RawRaceFeed CreateRawRaceFeed(string theFilePath) { if (string.IsNullOrEmpty(theFilePath)) { throw new ArgumentNullException(theFilePath); } var aFullPath = string.Format( "{0}{1}", AppDomain.CurrentDomain.BaseDirectory, theFilePath.TrimStart('\\')); if (!File.Exists(aFullPath)) { throw new FileNotFoundException(aFullPath); } var aMemoryStream = new MemoryStream(); using (var aFileStream = new FileStream(aFullPath, FileMode.Open, FileAccess.Read)) { aFileStream.CopyTo(aMemoryStream); } var aFile = new FileInfo(aFullPath); var aRawRaceFeed = new RawRaceFeed { FileName = aFile.Name, FeedStream = aMemoryStream }; return(aRawRaceFeed); }
public bool CanHandle(RawRaceFeed theRawRaceFeed, out object theDeserializedObj) { theDeserializedObj = null; if (theRawRaceFeed == null || theRawRaceFeed.FileName == null || theRawRaceFeed.FeedStream == null) { return(false); } if (!theRawRaceFeed.FileName.EndsWith("xml", StringComparison.OrdinalIgnoreCase)) { return(false); } var aCaulfieldRaceFeed = GetCaulfieldRaceFeed(theRawRaceFeed.FeedStream); if (aCaulfieldRaceFeed == null) { return(false); } theDeserializedObj = aCaulfieldRaceFeed; return(!string.IsNullOrEmpty(aCaulfieldRaceFeed.MeetingType) && aCaulfieldRaceFeed.MeetingType.Equals(HORSE_RACING, StringComparison.OrdinalIgnoreCase) && aCaulfieldRaceFeed.Track != null && !string.IsNullOrEmpty(aCaulfieldRaceFeed.Track.Name) && aCaulfieldRaceFeed.Track.Name.Equals(CAULFIELD, StringComparison.OrdinalIgnoreCase)); }
public HorseRace GetHorseRace(RawRaceFeed theRawRaceFeed) { foreach (var aFeedDataLoader in feedDataLoaders) { object aDeserializedObj; if (aFeedDataLoader.CanHandle(theRawRaceFeed, out aDeserializedObj)) { return(aFeedDataLoader.GetHorseRace(aDeserializedObj)); } } return(null); }